summaryrefslogtreecommitdiff
path: root/generate_ts_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'generate_ts_config.py')
-rwxr-xr-xgenerate_ts_config.py132
1 files changed, 132 insertions, 0 deletions
diff --git a/generate_ts_config.py b/generate_ts_config.py
new file mode 100755
index 0000000..7585ec6
--- /dev/null
+++ b/generate_ts_config.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python3
+"""
+Generate TypeScript configuration constants from shared Python config.
+This script is run during development to sync the schemas.
+"""
+
+import sys
+from pathlib import Path
+
+# Add the parent directory to Python path to import shared_config
+sys.path.insert(0, str(Path(__file__).parent))
+
+from shared_config import CONFIG_SCHEMA_DEF, ConfigFieldType, get_field_names, get_defaults, get_field_types
+
+
+def generate_typescript_config():
+ """Generate TypeScript configuration constants"""
+
+ ts_content = '''/**
+ * Auto-generated TypeScript configuration schema.
+ * DO NOT EDIT MANUALLY - Generated from shared_config.py
+ *
+ * To update this file, run: python3 generate_ts_config.py > src/config/generatedConfigSchema.ts
+ */
+
+// Configuration field type enum - matches Python
+export enum ConfigFieldType {
+ BOOLEAN = "boolean",
+ INTEGER = "integer",
+ FLOAT = "float",
+ STRING = "string"
+}
+
+// Configuration field definition
+export interface ConfigField {
+ name: string;
+ fieldType: ConfigFieldType;
+ default: boolean | number | string;
+ description: string;
+}
+
+// Configuration schema - auto-generated from Python
+export const CONFIG_SCHEMA: Record<string, ConfigField> = {
+'''
+
+ # Generate each field
+ for field_name, field_def in CONFIG_SCHEMA_DEF.items():
+ field_type = field_def["fieldType"]
+ default_value = field_def["default"]
+
+ # Format default value for TypeScript
+ if field_type == "string":
+ default_str = f'"{default_value}"'
+ elif field_type == "boolean":
+ default_str = "true" if default_value else "false"
+ else:
+ default_str = str(default_value)
+
+ ts_content += f''' {field_name}: {{
+ name: "{field_def["name"]}",
+ fieldType: ConfigFieldType.{field_type.upper()},
+ default: {default_str},
+ description: "{field_def["description"]}"
+ }},
+'''
+
+ ts_content += '''};
+
+// Type-safe configuration data structure
+export interface ConfigurationData {
+'''
+
+ # Generate interface fields
+ for field_name, field_def in CONFIG_SCHEMA_DEF.items():
+ field_type = field_def["fieldType"]
+
+ # Map Python types to TypeScript types
+ ts_type_map = {
+ "string": "string",
+ "boolean": "boolean",
+ "integer": "number",
+ "float": "number"
+ }
+
+ ts_type = ts_type_map[field_type]
+ ts_content += f' {field_name}: {ts_type};\n'
+
+ ts_content += '''}
+
+// Helper functions
+export function getFieldNames(): string[] {
+ return Object.keys(CONFIG_SCHEMA);
+}
+
+export function getDefaults(): ConfigurationData {
+ return {
+'''
+
+ # Generate defaults object
+ for field_name, field_def in CONFIG_SCHEMA_DEF.items():
+ default_value = field_def["default"]
+ field_type = field_def["fieldType"]
+
+ if field_type == "string":
+ default_str = f'"{default_value}"'
+ elif field_type == "boolean":
+ default_str = "true" if default_value else "false"
+ else:
+ default_str = str(default_value)
+
+ ts_content += f' {field_name}: {default_str},\n'
+
+ ts_content += ''' };
+}
+
+export function getFieldTypes(): Record<string, string> {
+ return {
+'''
+
+ # Generate field types object
+ for field_name, field_def in CONFIG_SCHEMA_DEF.items():
+ ts_content += f' {field_name}: "{field_def["fieldType"]}",\n'
+
+ ts_content += ''' };
+}
+'''
+
+ return ts_content
+
+
+if __name__ == "__main__":
+ print(generate_typescript_config())