@objectql/cli 1.8.3 → 1.9.0

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 (94) hide show
  1. package/README.md +157 -1
  2. package/dist/commands/ai.js +4 -3
  3. package/dist/commands/ai.js.map +1 -1
  4. package/dist/commands/build.d.ts +12 -0
  5. package/dist/commands/build.js +119 -0
  6. package/dist/commands/build.js.map +1 -0
  7. package/dist/commands/database-push.d.ts +5 -0
  8. package/dist/commands/database-push.js +15 -0
  9. package/dist/commands/database-push.js.map +1 -0
  10. package/dist/commands/dev.d.ts +11 -0
  11. package/dist/commands/dev.js +111 -0
  12. package/dist/commands/dev.js.map +1 -0
  13. package/dist/commands/doctor.d.ts +4 -0
  14. package/dist/commands/doctor.js +37 -0
  15. package/dist/commands/doctor.js.map +1 -0
  16. package/dist/commands/format.d.ts +9 -0
  17. package/dist/commands/format.js +137 -0
  18. package/dist/commands/format.js.map +1 -0
  19. package/dist/commands/init.js +31 -30
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/lint.d.ts +9 -0
  22. package/dist/commands/lint.js +120 -0
  23. package/dist/commands/lint.js.map +1 -0
  24. package/dist/commands/new.js +0 -52
  25. package/dist/commands/new.js.map +1 -1
  26. package/dist/commands/serve.d.ts +2 -0
  27. package/dist/commands/serve.js +122 -46
  28. package/dist/commands/serve.js.map +1 -1
  29. package/dist/commands/start.d.ts +12 -0
  30. package/dist/commands/start.js +134 -0
  31. package/dist/commands/start.js.map +1 -0
  32. package/dist/commands/test.d.ts +10 -0
  33. package/dist/commands/test.js +120 -0
  34. package/dist/commands/test.js.map +1 -0
  35. package/dist/index.js +189 -149
  36. package/dist/index.js.map +1 -1
  37. package/package.json +13 -8
  38. package/templates/hello-world/.vscode/extensions.json +7 -0
  39. package/templates/hello-world/CHANGELOG.md +41 -0
  40. package/templates/hello-world/README.md +29 -0
  41. package/templates/hello-world/package.json +24 -0
  42. package/templates/hello-world/src/index.ts +58 -0
  43. package/templates/hello-world/tsconfig.json +10 -0
  44. package/templates/starter/.vscode/extensions.json +7 -0
  45. package/{CHANGELOG.md → templates/starter/CHANGELOG.md} +47 -41
  46. package/templates/starter/README.md +17 -0
  47. package/templates/starter/__tests__/projects-hooks-actions.test.ts +490 -0
  48. package/templates/starter/jest.config.js +16 -0
  49. package/templates/starter/package.json +52 -0
  50. package/templates/starter/src/README.pages.md +110 -0
  51. package/templates/starter/src/demo.app.yml +4 -0
  52. package/templates/starter/src/i18n/zh-CN/projects.json +22 -0
  53. package/templates/starter/src/modules/kitchen-sink/kitchen_sink.data.yml +18 -0
  54. package/templates/starter/src/modules/kitchen-sink/kitchen_sink.object.yml +156 -0
  55. package/templates/starter/src/modules/projects/project_approval.workflow.yml +51 -0
  56. package/templates/starter/src/modules/projects/projects.action.ts +472 -0
  57. package/templates/starter/src/modules/projects/projects.data.yml +13 -0
  58. package/templates/starter/src/modules/projects/projects.hook.ts +339 -0
  59. package/templates/starter/src/modules/projects/projects.object.yml +148 -0
  60. package/templates/starter/src/modules/projects/projects.permission.yml +141 -0
  61. package/templates/starter/src/modules/projects/projects.validation.yml +37 -0
  62. package/templates/starter/src/modules/tasks/tasks.data.yml +23 -0
  63. package/templates/starter/src/modules/tasks/tasks.object.yml +34 -0
  64. package/templates/starter/src/modules/tasks/tasks.permission.yml +167 -0
  65. package/templates/starter/src/seed.ts +55 -0
  66. package/templates/starter/src/types/index.ts +3 -0
  67. package/templates/starter/src/types/kitchen_sink.ts +101 -0
  68. package/templates/starter/src/types/projects.ts +49 -0
  69. package/templates/starter/src/types/tasks.ts +33 -0
  70. package/templates/starter/tsconfig.json +11 -0
  71. package/templates/starter/tsconfig.tsbuildinfo +1 -0
  72. package/AI_EXAMPLES.md +0 -154
  73. package/AI_IMPLEMENTATION_SUMMARY.md +0 -509
  74. package/AI_TUTORIAL.md +0 -144
  75. package/IMPLEMENTATION_SUMMARY.md +0 -437
  76. package/USAGE_EXAMPLES.md +0 -951
  77. package/__tests__/commands.test.ts +0 -316
  78. package/dist/commands/studio.d.ts +0 -5
  79. package/dist/commands/studio.js +0 -364
  80. package/dist/commands/studio.js.map +0 -1
  81. package/jest.config.js +0 -19
  82. package/src/commands/ai.ts +0 -508
  83. package/src/commands/generate.ts +0 -135
  84. package/src/commands/i18n.ts +0 -303
  85. package/src/commands/init.ts +0 -191
  86. package/src/commands/migrate.ts +0 -314
  87. package/src/commands/new.ts +0 -273
  88. package/src/commands/repl.ts +0 -120
  89. package/src/commands/serve.ts +0 -96
  90. package/src/commands/studio.ts +0 -354
  91. package/src/commands/sync.ts +0 -328
  92. package/src/index.ts +0 -274
  93. package/tsconfig.json +0 -15
  94. package/tsconfig.tsbuildinfo +0 -1
@@ -43,52 +43,99 @@ const platform_node_1 = require("@objectql/platform-node");
43
43
  const server_1 = require("@objectql/server");
44
44
  const http_1 = require("http");
45
45
  const path = __importStar(require("path"));
46
+ const fs = __importStar(require("fs"));
46
47
  const chalk_1 = __importDefault(require("chalk"));
47
- const CONSOLE_HTML = `
48
+ const SCALAR_HTML = `
48
49
  <!DOCTYPE html>
49
- <html lang="en">
50
- <head>
51
- <meta charset="utf-8" />
52
- <meta name="viewport" content="width=device-width, initial-scale=1" />
53
- <title>ObjectQL Swagger UI</title>
54
- <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" />
55
- <style>
56
- body { margin: 0; padding: 0; }
57
- </style>
58
- </head>
59
- <body>
60
- <div id="swagger-ui"></div>
61
- <script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js" crossorigin></script>
62
- <script>
63
- window.onload = () => {
64
- window.ui = SwaggerUIBundle({
65
- url: '/openapi.json',
66
- dom_id: '#swagger-ui',
67
- });
68
- };
69
- </script>
70
- </body>
50
+ <html>
51
+ <head>
52
+ <title>ObjectQL API Reference</title>
53
+ <meta charset="utf-8" />
54
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
55
+ <style>
56
+ body { margin: 0; }
57
+ </style>
58
+ </head>
59
+ <body>
60
+ <script
61
+ id="api-reference"
62
+ data-url="/openapi.json"
63
+ data-proxy-url="https://proxy.scalar.com"
64
+ data-configuration='{"theme": "deepSpace"}'
65
+ ></script>
66
+ <script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
67
+ </body>
71
68
  </html>
72
69
  `;
73
70
  async function serve(options) {
71
+ var _a, _b;
74
72
  console.log(chalk_1.default.blue('Starting ObjectQL Dev Server...'));
75
73
  const rootDir = path.resolve(process.cwd(), options.dir);
76
74
  console.log(chalk_1.default.gray(`Loading schema from: ${rootDir}`));
77
- // 1. Init ObjectQL with in-memory SQLite for Dev
75
+ // Try to load configuration
76
+ let config = null;
77
+ const configPath = options.config || path.join(process.cwd(), 'objectql.config.ts');
78
+ if (fs.existsSync(configPath)) {
79
+ try {
80
+ console.log(chalk_1.default.gray(`Loading config from: ${configPath}`));
81
+ if (configPath.endsWith('.ts')) {
82
+ require('ts-node/register');
83
+ }
84
+ const loaded = require(configPath);
85
+ config = loaded.default || loaded;
86
+ }
87
+ catch (e) {
88
+ console.warn(chalk_1.default.yellow(`āš ļø Failed to load config: ${e.message}`));
89
+ }
90
+ }
91
+ else if (options.config) {
92
+ console.error(chalk_1.default.red(`āŒ Config file not found: ${options.config}`));
93
+ process.exit(1);
94
+ }
95
+ // Process modules override
96
+ if (options.modules) {
97
+ const moduleList = options.modules.split(',').map(p => p.trim());
98
+ if (!config)
99
+ config = {};
100
+ config.modules = moduleList;
101
+ console.log(chalk_1.default.yellow(`āš ļø Overriding modules: ${moduleList.join(', ')}`));
102
+ }
103
+ const loadedConfig = ((_a = config === null || config === void 0 ? void 0 : config.datasource) === null || _a === void 0 ? void 0 : _a.default) || ((_b = config === null || config === void 0 ? void 0 : config.datasources) === null || _b === void 0 ? void 0 : _b.default);
104
+ let datasourceValue = loadedConfig;
105
+ // Normalize config if it uses simplified format (type: 'sqlite')
106
+ if (loadedConfig && !loadedConfig.client && loadedConfig.type === 'sqlite') {
107
+ datasourceValue = {
108
+ client: 'sqlite3',
109
+ connection: {
110
+ filename: loadedConfig.filename || ':memory:'
111
+ },
112
+ useNullAsDefault: true
113
+ };
114
+ }
115
+ const datasource = datasourceValue || {
116
+ client: 'sqlite3',
117
+ connection: {
118
+ filename: ':memory:'
119
+ },
120
+ useNullAsDefault: true
121
+ };
122
+ // 1. Init ObjectQL
78
123
  const app = new core_1.ObjectQL({
79
124
  datasources: {
80
- default: new driver_sql_1.SqlDriver({
81
- client: 'sqlite3',
82
- connection: {
83
- filename: ':memory:' // Or local file './dev.db'
84
- },
85
- useNullAsDefault: true
86
- })
87
- }
125
+ default: new driver_sql_1.SqlDriver(datasource)
126
+ },
127
+ ...config
88
128
  });
89
129
  // 2. Load Schema
90
130
  try {
91
131
  const loader = new platform_node_1.ObjectLoader(app.metadata);
132
+ // Load modules first (if any)
133
+ // Backwards compatibility for presets
134
+ const modulesToLoad = (config === null || config === void 0 ? void 0 : config.modules) || (config === null || config === void 0 ? void 0 : config.presets);
135
+ if (modulesToLoad) {
136
+ await (0, platform_node_1.loadModules)(loader, modulesToLoad);
137
+ }
138
+ // Load project source
92
139
  loader.load(rootDir);
93
140
  await app.init();
94
141
  console.log(chalk_1.default.green('āœ… Schema loaded successfully.'));
@@ -99,29 +146,58 @@ async function serve(options) {
99
146
  }
100
147
  // 3. Create Handler
101
148
  const internalHandler = (0, server_1.createNodeHandler)(app);
149
+ const graphqlHandler = (0, server_1.createGraphQLHandler)(app);
102
150
  // 4. Start Server
103
151
  const server = (0, http_1.createServer)(async (req, res) => {
104
- // Serve Swagger UI
105
- if (req.method === 'GET' && (req.url === '/swagger' || req.url === '/swagger/')) {
152
+ var _a;
153
+ // Serve API Docs at Root (Default)
154
+ if (req.method === 'GET' && (req.url === '/' || req.url === '/docs' || req.url === '/docs/')) {
106
155
  res.writeHead(200, { 'Content-Type': 'text/html' });
107
- res.end(CONSOLE_HTML);
156
+ res.end(SCALAR_HTML);
157
+ return;
158
+ }
159
+ // GraphQL Endpoint & Playground (Keep for compatibility)
160
+ if (req.url === '/graphql' || req.url === '/graphql/') {
161
+ await graphqlHandler(req, res);
108
162
  return;
109
163
  }
110
- // Redirect / to /swagger for better DX
111
- if (req.method === 'GET' && req.url === '/') {
112
- res.writeHead(302, { 'Location': '/swagger' });
113
- res.end();
164
+ // Keep /api/graphql as alias for compatibility
165
+ if ((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith('/api/graphql')) {
166
+ await graphqlHandler(req, res);
114
167
  return;
115
168
  }
116
169
  // Delegate to API Handler
117
170
  await internalHandler(req, res);
118
171
  });
119
- server.listen(options.port, () => {
120
- console.log(chalk_1.default.green(`\nšŸš€ Server ready at http://localhost:${options.port}`));
121
- console.log(chalk_1.default.green(`šŸ“š Swagger UI: http://localhost:${options.port}/swagger`));
122
- console.log(chalk_1.default.blue(`šŸ“– OpenAPI Spec: http://localhost:${options.port}/openapi.json`));
123
- console.log(chalk_1.default.gray('\nTry a curl command:'));
124
- console.log(`curl -X POST http://localhost:${options.port} -H "Content-Type: application/json" -d '{"op": "find", "object": "YourObject", "args": {}}'`);
125
- });
172
+ // Auto-port detection logic
173
+ const startPort = options.port;
174
+ const tryListen = (port, attempt = 0) => {
175
+ if (attempt > 10) {
176
+ console.error(chalk_1.default.red(`āŒ Unable to find a free port after 10 attempts.`));
177
+ process.exit(1);
178
+ }
179
+ const onError = (e) => {
180
+ if (e.code === 'EADDRINUSE') {
181
+ console.log(chalk_1.default.yellow(`āš ļø Port ${port} is in use, trying ${port + 1}...`));
182
+ // Wait a tick before retrying to let the socket cleanup if needed, though usually not needed for EADDRINUSE on listen
183
+ setTimeout(() => {
184
+ server.close(); // Ensure previous attempt is closed
185
+ tryListen(port + 1, attempt + 1);
186
+ }, 100);
187
+ }
188
+ else {
189
+ console.error(chalk_1.default.red('āŒ Server error:'), e);
190
+ }
191
+ };
192
+ server.once('error', onError);
193
+ server.listen(port, () => {
194
+ server.removeListener('error', onError);
195
+ console.log(chalk_1.default.green(`\nšŸš€ Server ready at http://localhost:${port}`));
196
+ console.log(chalk_1.default.blue(`šŸ“– API Docs (Scalar): http://localhost:${port}/`));
197
+ console.log(chalk_1.default.gray('\nTry a curl command:'));
198
+ console.log(`curl -X POST http://localhost:${port} -H "Content-Type: application/json" -d '{"op": "find", "object": "tasks", "args": {}}'`);
199
+ });
200
+ };
201
+ tryListen(startPort);
126
202
  }
127
203
  //# sourceMappingURL=serve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface StartOptions {
2
+ port: number;
3
+ dir: string;
4
+ config?: string;
5
+ modules?: string;
6
+ }
7
+ /**
8
+ * Start production server
9
+ * Loads configuration from objectql.config.ts/js if available
10
+ */
11
+ export declare function start(options: StartOptions): Promise<void>;
12
+ export {};
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.start = start;
40
+ const core_1 = require("@objectql/core");
41
+ const driver_sql_1 = require("@objectql/driver-sql");
42
+ const platform_node_1 = require("@objectql/platform-node");
43
+ const server_1 = require("@objectql/server");
44
+ const http_1 = require("http");
45
+ const path = __importStar(require("path"));
46
+ const fs = __importStar(require("fs"));
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ /**
49
+ * Start production server
50
+ * Loads configuration from objectql.config.ts/js if available
51
+ */
52
+ async function start(options) {
53
+ var _a, _b;
54
+ console.log(chalk_1.default.blue('Starting ObjectQL Production Server...'));
55
+ const rootDir = path.resolve(process.cwd(), options.dir);
56
+ console.log(chalk_1.default.gray(`Loading schema from: ${rootDir}`));
57
+ // Try to load configuration
58
+ let config = null;
59
+ const configPath = options.config || path.join(process.cwd(), 'objectql.config.ts');
60
+ if (fs.existsSync(configPath)) {
61
+ try {
62
+ console.log(chalk_1.default.gray(`Loading config from: ${configPath}`));
63
+ // Use require for .js files or ts-node for .ts files
64
+ if (configPath.endsWith('.ts')) {
65
+ require('ts-node/register');
66
+ }
67
+ const loadedModule = require(configPath);
68
+ // Handle both default export and direct export
69
+ config = loadedModule.default || loadedModule;
70
+ }
71
+ catch (e) {
72
+ console.warn(chalk_1.default.yellow(`āš ļø Failed to load config: ${e.message}`));
73
+ }
74
+ }
75
+ // Process modules override
76
+ if (options.modules) {
77
+ const moduleList = options.modules.split(',').map(p => p.trim());
78
+ if (!config)
79
+ config = {};
80
+ config.modules = moduleList;
81
+ console.log(chalk_1.default.yellow(`āš ļø Overriding modules: ${moduleList.join(', ')}`));
82
+ }
83
+ // Initialize datasource from config or use default SQLite
84
+ // Note: Config files may use 'datasource' (singular) while ObjectQLConfig uses 'datasources' (plural)
85
+ const datasourceConfig = ((_a = config === null || config === void 0 ? void 0 : config.datasources) === null || _a === void 0 ? void 0 : _a.default) || ((_b = config === null || config === void 0 ? void 0 : config.datasource) === null || _b === void 0 ? void 0 : _b.default) || {
86
+ client: 'sqlite3',
87
+ connection: {
88
+ filename: process.env.DATABASE_FILE || './objectql.db'
89
+ },
90
+ useNullAsDefault: true
91
+ };
92
+ const driver = new driver_sql_1.SqlDriver(datasourceConfig);
93
+ const app = new core_1.ObjectQL({
94
+ datasources: { default: driver }
95
+ });
96
+ // Load Schema
97
+ try {
98
+ const loader = new platform_node_1.ObjectLoader(app.metadata);
99
+ // Load modules first (if any)
100
+ // Backwards compatibility for presets
101
+ const modulesToLoad = (config === null || config === void 0 ? void 0 : config.modules) || (config === null || config === void 0 ? void 0 : config.presets);
102
+ if (modulesToLoad) {
103
+ await (0, platform_node_1.loadModules)(loader, modulesToLoad);
104
+ }
105
+ // Load project source
106
+ loader.load(rootDir);
107
+ await app.init();
108
+ console.log(chalk_1.default.green('āœ… Schema loaded successfully.'));
109
+ }
110
+ catch (e) {
111
+ console.error(chalk_1.default.red('āŒ Failed to load schema:'), e.message);
112
+ process.exit(1);
113
+ }
114
+ // Create Handler
115
+ const handler = (0, server_1.createNodeHandler)(app);
116
+ // Start Server
117
+ const server = (0, http_1.createServer)(async (req, res) => {
118
+ await handler(req, res);
119
+ });
120
+ server.listen(options.port, () => {
121
+ console.log(chalk_1.default.green(`\nāœ… Server started in production mode`));
122
+ console.log(chalk_1.default.green(`šŸš€ API endpoint: http://localhost:${options.port}`));
123
+ console.log(chalk_1.default.blue(`šŸ“– OpenAPI Spec: http://localhost:${options.port}/openapi.json`));
124
+ // Handle graceful shutdown
125
+ process.on('SIGTERM', () => {
126
+ console.log(chalk_1.default.yellow('\nāš ļø SIGTERM received, shutting down gracefully...'));
127
+ server.close(() => {
128
+ console.log(chalk_1.default.green('āœ… Server closed'));
129
+ process.exit(0);
130
+ });
131
+ });
132
+ });
133
+ }
134
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface TestOptions {
2
+ dir?: string;
3
+ watch?: boolean;
4
+ coverage?: boolean;
5
+ }
6
+ /**
7
+ * Test command - runs tests for the ObjectQL project
8
+ */
9
+ export declare function test(options: TestOptions): Promise<void>;
10
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.test = test;
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const child_process_1 = require("child_process");
44
+ /**
45
+ * Test command - runs tests for the ObjectQL project
46
+ */
47
+ async function test(options) {
48
+ var _a, _b, _c;
49
+ console.log(chalk_1.default.blue('🧪 Running tests...\n'));
50
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
51
+ // Look for package.json to determine test runner
52
+ const packageJsonPath = path.join(rootDir, 'package.json');
53
+ let testCommand = 'npm test';
54
+ try {
55
+ if (fs.existsSync(packageJsonPath)) {
56
+ try {
57
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
58
+ // Check if jest is configured
59
+ if (((_a = packageJson.devDependencies) === null || _a === void 0 ? void 0 : _a.jest) || ((_b = packageJson.dependencies) === null || _b === void 0 ? void 0 : _b.jest) || packageJson.jest) {
60
+ const jestArgs = ['jest'];
61
+ if (options.watch) {
62
+ jestArgs.push('--watch');
63
+ }
64
+ if (options.coverage) {
65
+ jestArgs.push('--coverage');
66
+ }
67
+ console.log(chalk_1.default.cyan(`Running: ${jestArgs.join(' ')}\n`));
68
+ const jestProcess = (0, child_process_1.spawn)('npx', jestArgs, {
69
+ cwd: rootDir,
70
+ stdio: 'inherit',
71
+ shell: true
72
+ });
73
+ jestProcess.on('exit', (code) => {
74
+ if (code !== 0) {
75
+ console.error(chalk_1.default.red(`\nāŒ Tests failed with exit code ${code}`));
76
+ process.exit(code || 1);
77
+ }
78
+ else {
79
+ console.log(chalk_1.default.green('\nāœ… All tests passed!'));
80
+ }
81
+ });
82
+ return;
83
+ }
84
+ // Fall back to package.json test script
85
+ if ((_c = packageJson.scripts) === null || _c === void 0 ? void 0 : _c.test) {
86
+ console.log(chalk_1.default.cyan(`Running: npm test\n`));
87
+ const npmProcess = (0, child_process_1.spawn)('npm', ['test'], {
88
+ cwd: rootDir,
89
+ stdio: 'inherit',
90
+ shell: true
91
+ });
92
+ npmProcess.on('exit', (code) => {
93
+ if (code !== 0) {
94
+ console.error(chalk_1.default.red(`\nāŒ Tests failed with exit code ${code}`));
95
+ process.exit(code || 1);
96
+ }
97
+ else {
98
+ console.log(chalk_1.default.green('\nāœ… All tests passed!'));
99
+ }
100
+ });
101
+ return;
102
+ }
103
+ }
104
+ catch (parseError) {
105
+ console.error(chalk_1.default.yellow(`āš ļø Failed to parse package.json: ${parseError.message}`));
106
+ }
107
+ }
108
+ // No test configuration found
109
+ console.log(chalk_1.default.yellow('āš ļø No test configuration found'));
110
+ console.log(chalk_1.default.gray('To add tests to your project:'));
111
+ console.log(chalk_1.default.gray(' 1. Install jest: npm install --save-dev jest @types/jest ts-jest'));
112
+ console.log(chalk_1.default.gray(' 2. Create a jest.config.js file'));
113
+ console.log(chalk_1.default.gray(' 3. Add a test script to package.json'));
114
+ }
115
+ catch (e) {
116
+ console.error(chalk_1.default.red('āŒ Test execution failed:'), e.message);
117
+ process.exit(1);
118
+ }
119
+ }
120
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}