@objectql/cli 1.8.2 → 1.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +229 -0
  3. package/USAGE_EXAMPLES.md +147 -0
  4. package/__tests__/commands.test.ts +274 -1
  5. package/dist/commands/ai.js +4 -3
  6. package/dist/commands/ai.js.map +1 -1
  7. package/dist/commands/build.d.ts +12 -0
  8. package/dist/commands/build.js +119 -0
  9. package/dist/commands/build.js.map +1 -0
  10. package/dist/commands/dev.d.ts +9 -0
  11. package/dist/commands/dev.js +23 -0
  12. package/dist/commands/dev.js.map +1 -0
  13. package/dist/commands/format.d.ts +9 -0
  14. package/dist/commands/format.js +137 -0
  15. package/dist/commands/format.js.map +1 -0
  16. package/dist/commands/lint.d.ts +9 -0
  17. package/dist/commands/lint.js +120 -0
  18. package/dist/commands/lint.js.map +1 -0
  19. package/dist/commands/new.js +5 -52
  20. package/dist/commands/new.js.map +1 -1
  21. package/dist/commands/start.d.ts +11 -0
  22. package/dist/commands/start.js +119 -0
  23. package/dist/commands/start.js.map +1 -0
  24. package/dist/commands/sync.d.ts +14 -0
  25. package/dist/commands/sync.js +314 -0
  26. package/dist/commands/sync.js.map +1 -0
  27. package/dist/commands/test.d.ts +10 -0
  28. package/dist/commands/test.js +120 -0
  29. package/dist/commands/test.js.map +1 -0
  30. package/dist/index.js +109 -14
  31. package/dist/index.js.map +1 -1
  32. package/jest.config.js +19 -0
  33. package/package.json +7 -7
  34. package/src/commands/ai.ts +4 -3
  35. package/src/commands/build.ts +98 -0
  36. package/src/commands/dev.ts +23 -0
  37. package/src/commands/format.ts +110 -0
  38. package/src/commands/lint.ts +98 -0
  39. package/src/commands/new.ts +5 -52
  40. package/src/commands/start.ts +100 -0
  41. package/src/commands/sync.ts +328 -0
  42. package/src/commands/test.ts +98 -0
  43. package/src/index.ts +114 -14
  44. package/tsconfig.tsbuildinfo +1 -1
  45. package/dist/commands/studio.d.ts +0 -5
  46. package/dist/commands/studio.js +0 -364
  47. package/dist/commands/studio.js.map +0 -1
  48. package/src/commands/studio.ts +0 -354
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/jest.config.js ADDED
@@ -0,0 +1,19 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ testEnvironment: 'node',
4
+ testMatch: ['**/__tests__/**/*.test.ts'],
5
+ moduleNameMapper: {
6
+ '^@objectql/types$': '<rootDir>/../../foundation/types/src',
7
+ '^@objectql/core$': '<rootDir>/../../foundation/core/src',
8
+ '^@objectql/driver-sql$': '<rootDir>/../../drivers/sql/src',
9
+ '^@objectql/driver-mongo$': '<rootDir>/../../drivers/mongo/src',
10
+ '^@objectql/sdk$': '<rootDir>/../../drivers/sdk/src',
11
+ '^@objectql/platform-node$': '<rootDir>/../../foundation/platform-node/src',
12
+ '^@objectql/server$': '<rootDir>/../../runtime/server/src',
13
+ },
14
+ transform: {
15
+ '^.+\\.ts$': ['ts-jest', {
16
+ isolatedModules: true,
17
+ }],
18
+ },
19
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectql/cli",
3
- "version": "1.8.2",
3
+ "version": "1.8.4",
4
4
  "description": "Command-line interface for ObjectQL - Code generation, migrations, REPL, and AI-powered development tools",
5
5
  "keywords": [
6
6
  "objectql",
@@ -29,11 +29,11 @@
29
29
  "ts-node": "^10.9.1",
30
30
  "openai": "^4.28.0",
31
31
  "dotenv": "^16.4.5",
32
- "@objectql/types": "1.8.2",
33
- "@objectql/core": "1.8.2",
34
- "@objectql/server": "1.8.2",
35
- "@objectql/driver-sql": "1.8.2",
36
- "@objectql/platform-node": "1.8.2"
32
+ "@objectql/types": "1.8.4",
33
+ "@objectql/server": "1.8.4",
34
+ "@objectql/core": "1.8.4",
35
+ "@objectql/driver-sql": "1.8.4",
36
+ "@objectql/platform-node": "1.8.4"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "^5.0.0",
@@ -43,6 +43,6 @@
43
43
  "scripts": {
44
44
  "build": "tsc",
45
45
  "watch": "tsc -w",
46
- "studio": "node dist/index.js studio"
46
+ "test": "jest"
47
47
  }
48
48
  }
@@ -263,10 +263,11 @@ export async function aiValidate(options: ValidateOptions): Promise<void> {
263
263
  const patterns = [
264
264
  '**/*.object.yml',
265
265
  '**/*.validation.yml',
266
- '**/*.form.yml',
267
- '**/*.view.yml',
268
- '**/*.page.yml',
269
266
  '**/*.action.yml',
267
+ '**/*.hook.yml',
268
+ '**/*.permission.yml',
269
+ '**/*.workflow.yml',
270
+ '**/*.data.yml',
270
271
  ];
271
272
 
272
273
  const files = await glob(patterns, {
@@ -0,0 +1,98 @@
1
+ import { ObjectQL } from '@objectql/core';
2
+ import { ObjectLoader } from '@objectql/platform-node';
3
+ import { generateTypes } from './generate';
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
+ import glob from 'fast-glob';
7
+ import chalk from 'chalk';
8
+
9
+ interface BuildOptions {
10
+ dir?: string;
11
+ output?: string;
12
+ types?: boolean;
13
+ validate?: boolean;
14
+ }
15
+
16
+ /**
17
+ * Build command - validates metadata and generates TypeScript types
18
+ * Prepares the project for production deployment
19
+ */
20
+ export async function build(options: BuildOptions) {
21
+ console.log(chalk.blue('🔨 Building ObjectQL project...\n'));
22
+
23
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
24
+ const outputDir = path.resolve(process.cwd(), options.output || './dist');
25
+
26
+ // Step 1: Validate metadata
27
+ if (options.validate !== false) {
28
+ console.log(chalk.cyan('1️⃣ Validating metadata files...'));
29
+
30
+ try {
31
+ const app = new ObjectQL({ datasources: {} });
32
+ const loader = new ObjectLoader(app.metadata);
33
+ loader.load(rootDir);
34
+ console.log(chalk.green(' ✅ Metadata validation passed\n'));
35
+ } catch (e: any) {
36
+ console.error(chalk.red(' ❌ Metadata validation failed:'), e.message);
37
+ process.exit(1);
38
+ }
39
+ }
40
+
41
+ // Step 2: Generate TypeScript types
42
+ if (options.types !== false) {
43
+ console.log(chalk.cyan('2️⃣ Generating TypeScript types...'));
44
+
45
+ try {
46
+ const typesOutput = path.join(outputDir, 'types');
47
+ await generateTypes(rootDir, typesOutput);
48
+ console.log(chalk.green(` ✅ Types generated at ${typesOutput}\n`));
49
+ } catch (e: any) {
50
+ console.error(chalk.red(' ❌ Type generation failed:'), e.message);
51
+ process.exit(1);
52
+ }
53
+ }
54
+
55
+ // Step 3: Copy metadata files to dist
56
+ console.log(chalk.cyan('3️⃣ Copying metadata files...'));
57
+
58
+ try {
59
+ // Ensure output directory exists
60
+ if (!fs.existsSync(outputDir)) {
61
+ fs.mkdirSync(outputDir, { recursive: true });
62
+ }
63
+
64
+ // Copy .yml files
65
+ const metadataPatterns = [
66
+ '**/*.object.yml',
67
+ '**/*.validation.yml',
68
+ '**/*.permission.yml',
69
+ '**/*.hook.yml',
70
+ '**/*.action.yml',
71
+ '**/*.app.yml'
72
+ ];
73
+
74
+ let fileCount = 0;
75
+ const files = await glob(metadataPatterns, { cwd: rootDir });
76
+
77
+ for (const file of files) {
78
+ const srcPath = path.join(rootDir, file);
79
+ const destPath = path.join(outputDir, file);
80
+ const destDir = path.dirname(destPath);
81
+
82
+ if (!fs.existsSync(destDir)) {
83
+ fs.mkdirSync(destDir, { recursive: true });
84
+ }
85
+
86
+ fs.copyFileSync(srcPath, destPath);
87
+ fileCount++;
88
+ }
89
+
90
+ console.log(chalk.green(` ✅ Copied ${fileCount} metadata files\n`));
91
+ } catch (e: any) {
92
+ console.error(chalk.red(' ❌ Failed to copy metadata files:'), e.message);
93
+ process.exit(1);
94
+ }
95
+
96
+ console.log(chalk.green.bold('✨ Build completed successfully!\n'));
97
+ console.log(chalk.gray(`Output directory: ${outputDir}`));
98
+ }
@@ -0,0 +1,23 @@
1
+ import { serve } from './serve';
2
+ import chalk from 'chalk';
3
+
4
+ /**
5
+ * Start development server with hot reload
6
+ * This is an enhanced version of the serve command for development workflow
7
+ */
8
+ export async function dev(options: {
9
+ port: number;
10
+ dir: string;
11
+ watch?: boolean;
12
+ }) {
13
+ console.log(chalk.cyan('🚀 Starting ObjectQL Development Server...\n'));
14
+
15
+ // For now, delegate to serve command
16
+ // In future, can add file watching and auto-reload
17
+ await serve({ port: options.port, dir: options.dir });
18
+
19
+ if (options.watch !== false) {
20
+ console.log(chalk.yellow('\n👀 Watching for file changes... (Not yet implemented)'));
21
+ console.log(chalk.gray(' Tip: Use --no-watch to disable file watching'));
22
+ }
23
+ }
@@ -0,0 +1,110 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import chalk from 'chalk';
4
+ import * as yaml from 'js-yaml';
5
+ import glob from 'fast-glob';
6
+
7
+ // Naming convention regex
8
+ const VALID_NAME_REGEX = /^[a-z][a-z0-9_]*$/;
9
+
10
+ interface FormatOptions {
11
+ dir?: string;
12
+ check?: boolean;
13
+ }
14
+
15
+ /**
16
+ * Format command - formats metadata files using Prettier
17
+ */
18
+ export async function format(options: FormatOptions) {
19
+ console.log(chalk.blue('🎨 Formatting ObjectQL metadata files...\n'));
20
+
21
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
22
+ let formattedCount = 0;
23
+ let unchangedCount = 0;
24
+ let errorCount = 0;
25
+
26
+ // Load Prettier once at the start
27
+ let prettier: any;
28
+ try {
29
+ prettier = await import('prettier');
30
+ } catch (e) {
31
+ console.error(chalk.red('❌ Prettier is not installed. Install it with: npm install --save-dev prettier'));
32
+ process.exit(1);
33
+ }
34
+
35
+ try {
36
+ const files = await glob(['**/*.yml', '**/*.yaml'], {
37
+ cwd: rootDir,
38
+ ignore: ['node_modules/**', 'dist/**', 'build/**']
39
+ });
40
+
41
+ console.log(chalk.cyan(`Found ${files.length} YAML file(s)\n`));
42
+
43
+ for (const file of files) {
44
+ const filePath = path.join(rootDir, file);
45
+
46
+ try {
47
+ const content = fs.readFileSync(filePath, 'utf-8');
48
+
49
+ // Parse to validate YAML
50
+ yaml.load(content);
51
+
52
+ // Format with Prettier
53
+ const formatted = await prettier.format(content, {
54
+ parser: 'yaml',
55
+ printWidth: 80,
56
+ tabWidth: 2,
57
+ singleQuote: true
58
+ });
59
+
60
+ if (content !== formatted) {
61
+ if (options.check) {
62
+ console.log(chalk.yellow(` ⚠️ ${file} needs formatting`));
63
+ formattedCount++;
64
+ } else {
65
+ fs.writeFileSync(filePath, formatted, 'utf-8');
66
+ console.log(chalk.green(` ✅ ${file}`));
67
+ formattedCount++;
68
+ }
69
+ } else {
70
+ unchangedCount++;
71
+ if (!options.check) {
72
+ console.log(chalk.gray(` ✓ ${file}`));
73
+ }
74
+ }
75
+ } catch (e: any) {
76
+ console.error(chalk.red(` ❌ ${file}: ${e.message}`));
77
+ errorCount++;
78
+ }
79
+ }
80
+
81
+ console.log('');
82
+
83
+ // Summary
84
+ if (options.check) {
85
+ if (formattedCount > 0) {
86
+ console.log(chalk.yellow.bold(`⚠️ ${formattedCount} file(s) need formatting`));
87
+ console.log(chalk.gray('Run without --check to format files\n'));
88
+ process.exit(1);
89
+ } else {
90
+ console.log(chalk.green.bold('✅ All files are properly formatted!\n'));
91
+ }
92
+ } else {
93
+ console.log(chalk.cyan('Summary:'));
94
+ console.log(chalk.green(` ✅ Formatted: ${formattedCount}`));
95
+ console.log(chalk.gray(` ✓ Unchanged: ${unchangedCount}`));
96
+ if (errorCount > 0) {
97
+ console.log(chalk.red(` ❌ Errors: ${errorCount}`));
98
+ }
99
+ console.log('');
100
+
101
+ if (errorCount > 0) {
102
+ process.exit(1);
103
+ }
104
+ }
105
+
106
+ } catch (e: any) {
107
+ console.error(chalk.red('❌ Format failed:'), e.message);
108
+ process.exit(1);
109
+ }
110
+ }
@@ -0,0 +1,98 @@
1
+ import { ObjectQL } from '@objectql/core';
2
+ import { ObjectLoader } from '@objectql/platform-node';
3
+ import { ObjectConfig, FieldConfig } from '@objectql/types';
4
+ import * as path from 'path';
5
+ import chalk from 'chalk';
6
+
7
+ // Naming convention regex
8
+ const VALID_NAME_REGEX = /^[a-z][a-z0-9_]*$/;
9
+
10
+ interface LintOptions {
11
+ dir?: string;
12
+ fix?: boolean;
13
+ }
14
+
15
+ /**
16
+ * Lint command - validates metadata files for correctness and best practices
17
+ */
18
+ export async function lint(options: LintOptions) {
19
+ console.log(chalk.blue('🔍 Linting ObjectQL metadata files...\n'));
20
+
21
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
22
+ let hasErrors = false;
23
+ let hasWarnings = false;
24
+
25
+ try {
26
+ const app = new ObjectQL({ datasources: {} });
27
+ const loader = new ObjectLoader(app.metadata);
28
+
29
+ console.log(chalk.cyan('Loading metadata files...'));
30
+ loader.load(rootDir);
31
+
32
+ const objects = app.metadata.list('object');
33
+
34
+ console.log(chalk.green(`✅ Found ${objects.length} object(s)\n`));
35
+
36
+ // Validate each object
37
+ for (const obj of objects) {
38
+ const objectConfig = obj as ObjectConfig;
39
+ const name = objectConfig.name;
40
+ console.log(chalk.cyan(`Checking object: ${name}`));
41
+
42
+ // Check naming convention (lowercase with underscores)
43
+ if (!VALID_NAME_REGEX.test(name)) {
44
+ console.log(chalk.red(` ❌ Invalid name format: "${name}" should be lowercase with underscores`));
45
+ hasErrors = true;
46
+ }
47
+
48
+ // Check if label exists
49
+ if (!objectConfig.label) {
50
+ console.log(chalk.yellow(` ⚠️ Missing label for object "${name}"`));
51
+ hasWarnings = true;
52
+ }
53
+
54
+ // Check fields
55
+ const fieldCount = Object.keys(objectConfig.fields || {}).length;
56
+ if (fieldCount === 0) {
57
+ console.log(chalk.yellow(` ⚠️ Object "${name}" has no fields defined`));
58
+ hasWarnings = true;
59
+ } else {
60
+ console.log(chalk.gray(` ℹ️ ${fieldCount} field(s) defined`));
61
+ }
62
+
63
+ // Validate field names
64
+ for (const [fieldName, field] of Object.entries(objectConfig.fields || {})) {
65
+ if (!VALID_NAME_REGEX.test(fieldName)) {
66
+ console.log(chalk.red(` ❌ Invalid field name: "${fieldName}" should be lowercase with underscores`));
67
+ hasErrors = true;
68
+ }
69
+
70
+ const fieldConfig = field as FieldConfig;
71
+ // Check for required label on fields
72
+ if (!fieldConfig.label) {
73
+ console.log(chalk.yellow(` ⚠️ Field "${fieldName}" missing label`));
74
+ hasWarnings = true;
75
+ }
76
+ }
77
+
78
+ console.log('');
79
+ }
80
+
81
+ // Summary
82
+ if (hasErrors) {
83
+ console.log(chalk.red.bold('❌ Linting failed with errors\n'));
84
+ process.exit(1);
85
+ } else if (hasWarnings) {
86
+ console.log(chalk.yellow.bold('⚠️ Linting completed with warnings\n'));
87
+ } else {
88
+ console.log(chalk.green.bold('✅ Linting passed - no issues found!\n'));
89
+ }
90
+
91
+ } catch (e: any) {
92
+ console.error(chalk.red('❌ Linting failed:'), e.message);
93
+ if (e.stack) {
94
+ console.error(chalk.gray(e.stack));
95
+ }
96
+ process.exit(1);
97
+ }
98
+ }
@@ -11,16 +11,11 @@ interface NewOptions {
11
11
 
12
12
  const METADATA_TYPES = [
13
13
  'object',
14
- 'view',
15
- 'form',
16
- 'page',
17
14
  'action',
18
15
  'hook',
19
16
  'permission',
20
17
  'validation',
21
18
  'workflow',
22
- 'report',
23
- 'menu',
24
19
  'data'
25
20
  ];
26
21
 
@@ -35,41 +30,17 @@ const TEMPLATES: Record<string, any> = {
35
30
  }
36
31
  }
37
32
  },
38
- view: {
39
- label: '{{label}} View',
40
- object: '{{objectName}}',
41
- columns: [
42
- { field: 'name', label: 'Name' }
43
- ]
44
- },
45
- form: {
46
- label: '{{label}} Form',
47
- object: '{{objectName}}',
48
- layout: {
49
- sections: [
50
- {
51
- label: 'Basic Information',
52
- fields: ['name']
53
- }
54
- ]
55
- }
56
- },
57
- page: {
58
- label: '{{label}} Page',
59
- type: 'standard',
60
- components: [
61
- {
62
- type: 'title',
63
- text: '{{label}}'
64
- }
65
- ]
66
- },
67
33
  action: {
68
34
  label: '{{label}} Action',
69
35
  object: '{{objectName}}',
70
36
  type: 'record',
71
37
  handler: 'action_{{name}}'
72
38
  },
39
+ hook: {
40
+ label: '{{label}} Hook',
41
+ object: '{{objectName}}',
42
+ triggers: ['before_insert', 'after_insert']
43
+ },
73
44
  permission: {
74
45
  label: '{{label}} Permissions',
75
46
  object: '{{objectName}}',
@@ -113,24 +84,6 @@ const TEMPLATES: Record<string, any> = {
113
84
  }
114
85
  ]
115
86
  },
116
- report: {
117
- label: '{{label}} Report',
118
- type: 'tabular',
119
- object: '{{objectName}}',
120
- columns: [
121
- { field: 'name', label: 'Name' }
122
- ]
123
- },
124
- menu: {
125
- label: '{{label}} Menu',
126
- items: [
127
- {
128
- label: 'Home',
129
- page: 'home',
130
- icon: 'home'
131
- }
132
- ]
133
- },
134
87
  data: {
135
88
  label: '{{label}} Data',
136
89
  object: '{{objectName}}',
@@ -0,0 +1,100 @@
1
+ import { ObjectQL } from '@objectql/core';
2
+ import { SqlDriver } from '@objectql/driver-sql';
3
+ import { ObjectLoader } from '@objectql/platform-node';
4
+ import { createNodeHandler } from '@objectql/server';
5
+ import { createServer } from 'http';
6
+ import * as path from 'path';
7
+ import * as fs from 'fs';
8
+ import chalk from 'chalk';
9
+
10
+ interface StartOptions {
11
+ port: number;
12
+ dir: string;
13
+ config?: string;
14
+ }
15
+
16
+ // Flexible config type that handles both ObjectQLConfig and custom config formats
17
+ interface LoadedConfig {
18
+ datasources?: Record<string, any>;
19
+ datasource?: Record<string, any>;
20
+ [key: string]: any;
21
+ }
22
+
23
+ /**
24
+ * Start production server
25
+ * Loads configuration from objectql.config.ts/js if available
26
+ */
27
+ export async function start(options: StartOptions) {
28
+ console.log(chalk.blue('Starting ObjectQL Production Server...'));
29
+
30
+ const rootDir = path.resolve(process.cwd(), options.dir);
31
+ console.log(chalk.gray(`Loading schema from: ${rootDir}`));
32
+
33
+ // Try to load configuration
34
+ let config: LoadedConfig | null = null;
35
+ const configPath = options.config || path.join(process.cwd(), 'objectql.config.ts');
36
+
37
+ if (fs.existsSync(configPath)) {
38
+ try {
39
+ console.log(chalk.gray(`Loading config from: ${configPath}`));
40
+ // Use require for .js files or ts-node for .ts files
41
+ if (configPath.endsWith('.ts')) {
42
+ require('ts-node/register');
43
+ }
44
+ const loadedModule = require(configPath);
45
+ // Handle both default export and direct export
46
+ config = loadedModule.default || loadedModule;
47
+ } catch (e: any) {
48
+ console.warn(chalk.yellow(`⚠️ Failed to load config: ${e.message}`));
49
+ }
50
+ }
51
+
52
+ // Initialize datasource from config or use default SQLite
53
+ // Note: Config files may use 'datasource' (singular) while ObjectQLConfig uses 'datasources' (plural)
54
+ const datasourceConfig = config?.datasources?.default || config?.datasource?.default || {
55
+ client: 'sqlite3',
56
+ connection: {
57
+ filename: process.env.DATABASE_FILE || './objectql.db'
58
+ },
59
+ useNullAsDefault: true
60
+ };
61
+
62
+ const driver = new SqlDriver(datasourceConfig);
63
+ const app = new ObjectQL({
64
+ datasources: { default: driver }
65
+ });
66
+
67
+ // Load Schema
68
+ try {
69
+ const loader = new ObjectLoader(app.metadata);
70
+ loader.load(rootDir);
71
+ await app.init();
72
+ console.log(chalk.green('✅ Schema loaded successfully.'));
73
+ } catch (e: any) {
74
+ console.error(chalk.red('❌ Failed to load schema:'), e.message);
75
+ process.exit(1);
76
+ }
77
+
78
+ // Create Handler
79
+ const handler = createNodeHandler(app);
80
+
81
+ // Start Server
82
+ const server = createServer(async (req, res) => {
83
+ await handler(req, res);
84
+ });
85
+
86
+ server.listen(options.port, () => {
87
+ console.log(chalk.green(`\n✅ Server started in production mode`));
88
+ console.log(chalk.green(`🚀 API endpoint: http://localhost:${options.port}`));
89
+ console.log(chalk.blue(`📖 OpenAPI Spec: http://localhost:${options.port}/openapi.json`));
90
+
91
+ // Handle graceful shutdown
92
+ process.on('SIGTERM', () => {
93
+ console.log(chalk.yellow('\n⚠️ SIGTERM received, shutting down gracefully...'));
94
+ server.close(() => {
95
+ console.log(chalk.green('✅ Server closed'));
96
+ process.exit(0);
97
+ });
98
+ });
99
+ });
100
+ }