@objectql/cli 1.8.3 โ†’ 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 (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +156 -0
  3. package/__tests__/commands.test.ts +110 -0
  4. package/dist/commands/ai.js +4 -3
  5. package/dist/commands/ai.js.map +1 -1
  6. package/dist/commands/build.d.ts +12 -0
  7. package/dist/commands/build.js +119 -0
  8. package/dist/commands/build.js.map +1 -0
  9. package/dist/commands/dev.d.ts +9 -0
  10. package/dist/commands/dev.js +23 -0
  11. package/dist/commands/dev.js.map +1 -0
  12. package/dist/commands/format.d.ts +9 -0
  13. package/dist/commands/format.js +137 -0
  14. package/dist/commands/format.js.map +1 -0
  15. package/dist/commands/lint.d.ts +9 -0
  16. package/dist/commands/lint.js +120 -0
  17. package/dist/commands/lint.js.map +1 -0
  18. package/dist/commands/new.js +0 -52
  19. package/dist/commands/new.js.map +1 -1
  20. package/dist/commands/start.d.ts +11 -0
  21. package/dist/commands/start.js +119 -0
  22. package/dist/commands/start.js.map +1 -0
  23. package/dist/commands/test.d.ts +10 -0
  24. package/dist/commands/test.js +120 -0
  25. package/dist/commands/test.js.map +1 -0
  26. package/dist/index.js +91 -14
  27. package/dist/index.js.map +1 -1
  28. package/package.json +6 -7
  29. package/src/commands/ai.ts +4 -3
  30. package/src/commands/build.ts +98 -0
  31. package/src/commands/dev.ts +23 -0
  32. package/src/commands/format.ts +110 -0
  33. package/src/commands/lint.ts +98 -0
  34. package/src/commands/new.ts +0 -52
  35. package/src/commands/start.ts +100 -0
  36. package/src/commands/test.ts +98 -0
  37. package/src/index.ts +96 -14
  38. package/tsconfig.tsbuildinfo +1 -1
  39. package/dist/commands/studio.d.ts +0 -5
  40. package/dist/commands/studio.js +0 -364
  41. package/dist/commands/studio.js.map +0 -1
  42. package/src/commands/studio.ts +0 -354
@@ -0,0 +1,137 @@
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.format = format;
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const yaml = __importStar(require("js-yaml"));
44
+ const fast_glob_1 = __importDefault(require("fast-glob"));
45
+ // Naming convention regex
46
+ const VALID_NAME_REGEX = /^[a-z][a-z0-9_]*$/;
47
+ /**
48
+ * Format command - formats metadata files using Prettier
49
+ */
50
+ async function format(options) {
51
+ console.log(chalk_1.default.blue('๐ŸŽจ Formatting ObjectQL metadata files...\n'));
52
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
53
+ let formattedCount = 0;
54
+ let unchangedCount = 0;
55
+ let errorCount = 0;
56
+ // Load Prettier once at the start
57
+ let prettier;
58
+ try {
59
+ prettier = await Promise.resolve().then(() => __importStar(require('prettier')));
60
+ }
61
+ catch (e) {
62
+ console.error(chalk_1.default.red('โŒ Prettier is not installed. Install it with: npm install --save-dev prettier'));
63
+ process.exit(1);
64
+ }
65
+ try {
66
+ const files = await (0, fast_glob_1.default)(['**/*.yml', '**/*.yaml'], {
67
+ cwd: rootDir,
68
+ ignore: ['node_modules/**', 'dist/**', 'build/**']
69
+ });
70
+ console.log(chalk_1.default.cyan(`Found ${files.length} YAML file(s)\n`));
71
+ for (const file of files) {
72
+ const filePath = path.join(rootDir, file);
73
+ try {
74
+ const content = fs.readFileSync(filePath, 'utf-8');
75
+ // Parse to validate YAML
76
+ yaml.load(content);
77
+ // Format with Prettier
78
+ const formatted = await prettier.format(content, {
79
+ parser: 'yaml',
80
+ printWidth: 80,
81
+ tabWidth: 2,
82
+ singleQuote: true
83
+ });
84
+ if (content !== formatted) {
85
+ if (options.check) {
86
+ console.log(chalk_1.default.yellow(` โš ๏ธ ${file} needs formatting`));
87
+ formattedCount++;
88
+ }
89
+ else {
90
+ fs.writeFileSync(filePath, formatted, 'utf-8');
91
+ console.log(chalk_1.default.green(` โœ… ${file}`));
92
+ formattedCount++;
93
+ }
94
+ }
95
+ else {
96
+ unchangedCount++;
97
+ if (!options.check) {
98
+ console.log(chalk_1.default.gray(` โœ“ ${file}`));
99
+ }
100
+ }
101
+ }
102
+ catch (e) {
103
+ console.error(chalk_1.default.red(` โŒ ${file}: ${e.message}`));
104
+ errorCount++;
105
+ }
106
+ }
107
+ console.log('');
108
+ // Summary
109
+ if (options.check) {
110
+ if (formattedCount > 0) {
111
+ console.log(chalk_1.default.yellow.bold(`โš ๏ธ ${formattedCount} file(s) need formatting`));
112
+ console.log(chalk_1.default.gray('Run without --check to format files\n'));
113
+ process.exit(1);
114
+ }
115
+ else {
116
+ console.log(chalk_1.default.green.bold('โœ… All files are properly formatted!\n'));
117
+ }
118
+ }
119
+ else {
120
+ console.log(chalk_1.default.cyan('Summary:'));
121
+ console.log(chalk_1.default.green(` โœ… Formatted: ${formattedCount}`));
122
+ console.log(chalk_1.default.gray(` โœ“ Unchanged: ${unchangedCount}`));
123
+ if (errorCount > 0) {
124
+ console.log(chalk_1.default.red(` โŒ Errors: ${errorCount}`));
125
+ }
126
+ console.log('');
127
+ if (errorCount > 0) {
128
+ process.exit(1);
129
+ }
130
+ }
131
+ }
132
+ catch (e) {
133
+ console.error(chalk_1.default.red('โŒ Format failed:'), e.message);
134
+ process.exit(1);
135
+ }
136
+ }
137
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface LintOptions {
2
+ dir?: string;
3
+ fix?: boolean;
4
+ }
5
+ /**
6
+ * Lint command - validates metadata files for correctness and best practices
7
+ */
8
+ export declare function lint(options: LintOptions): Promise<void>;
9
+ 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.lint = lint;
40
+ const core_1 = require("@objectql/core");
41
+ const platform_node_1 = require("@objectql/platform-node");
42
+ const path = __importStar(require("path"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ // Naming convention regex
45
+ const VALID_NAME_REGEX = /^[a-z][a-z0-9_]*$/;
46
+ /**
47
+ * Lint command - validates metadata files for correctness and best practices
48
+ */
49
+ async function lint(options) {
50
+ console.log(chalk_1.default.blue('๐Ÿ” Linting ObjectQL metadata files...\n'));
51
+ const rootDir = path.resolve(process.cwd(), options.dir || '.');
52
+ let hasErrors = false;
53
+ let hasWarnings = false;
54
+ try {
55
+ const app = new core_1.ObjectQL({ datasources: {} });
56
+ const loader = new platform_node_1.ObjectLoader(app.metadata);
57
+ console.log(chalk_1.default.cyan('Loading metadata files...'));
58
+ loader.load(rootDir);
59
+ const objects = app.metadata.list('object');
60
+ console.log(chalk_1.default.green(`โœ… Found ${objects.length} object(s)\n`));
61
+ // Validate each object
62
+ for (const obj of objects) {
63
+ const objectConfig = obj;
64
+ const name = objectConfig.name;
65
+ console.log(chalk_1.default.cyan(`Checking object: ${name}`));
66
+ // Check naming convention (lowercase with underscores)
67
+ if (!VALID_NAME_REGEX.test(name)) {
68
+ console.log(chalk_1.default.red(` โŒ Invalid name format: "${name}" should be lowercase with underscores`));
69
+ hasErrors = true;
70
+ }
71
+ // Check if label exists
72
+ if (!objectConfig.label) {
73
+ console.log(chalk_1.default.yellow(` โš ๏ธ Missing label for object "${name}"`));
74
+ hasWarnings = true;
75
+ }
76
+ // Check fields
77
+ const fieldCount = Object.keys(objectConfig.fields || {}).length;
78
+ if (fieldCount === 0) {
79
+ console.log(chalk_1.default.yellow(` โš ๏ธ Object "${name}" has no fields defined`));
80
+ hasWarnings = true;
81
+ }
82
+ else {
83
+ console.log(chalk_1.default.gray(` โ„น๏ธ ${fieldCount} field(s) defined`));
84
+ }
85
+ // Validate field names
86
+ for (const [fieldName, field] of Object.entries(objectConfig.fields || {})) {
87
+ if (!VALID_NAME_REGEX.test(fieldName)) {
88
+ console.log(chalk_1.default.red(` โŒ Invalid field name: "${fieldName}" should be lowercase with underscores`));
89
+ hasErrors = true;
90
+ }
91
+ const fieldConfig = field;
92
+ // Check for required label on fields
93
+ if (!fieldConfig.label) {
94
+ console.log(chalk_1.default.yellow(` โš ๏ธ Field "${fieldName}" missing label`));
95
+ hasWarnings = true;
96
+ }
97
+ }
98
+ console.log('');
99
+ }
100
+ // Summary
101
+ if (hasErrors) {
102
+ console.log(chalk_1.default.red.bold('โŒ Linting failed with errors\n'));
103
+ process.exit(1);
104
+ }
105
+ else if (hasWarnings) {
106
+ console.log(chalk_1.default.yellow.bold('โš ๏ธ Linting completed with warnings\n'));
107
+ }
108
+ else {
109
+ console.log(chalk_1.default.green.bold('โœ… Linting passed - no issues found!\n'));
110
+ }
111
+ }
112
+ catch (e) {
113
+ console.error(chalk_1.default.red('โŒ Linting failed:'), e.message);
114
+ if (e.stack) {
115
+ console.error(chalk_1.default.gray(e.stack));
116
+ }
117
+ process.exit(1);
118
+ }
119
+ }
120
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -43,16 +43,11 @@ const chalk_1 = __importDefault(require("chalk"));
43
43
  const yaml = __importStar(require("js-yaml"));
44
44
  const METADATA_TYPES = [
45
45
  'object',
46
- 'view',
47
- 'form',
48
- 'page',
49
46
  'action',
50
47
  'hook',
51
48
  'permission',
52
49
  'validation',
53
50
  'workflow',
54
- 'report',
55
- 'menu',
56
51
  'data'
57
52
  ];
58
53
  const TEMPLATES = {
@@ -66,35 +61,6 @@ const TEMPLATES = {
66
61
  }
67
62
  }
68
63
  },
69
- view: {
70
- label: '{{label}} View',
71
- object: '{{objectName}}',
72
- columns: [
73
- { field: 'name', label: 'Name' }
74
- ]
75
- },
76
- form: {
77
- label: '{{label}} Form',
78
- object: '{{objectName}}',
79
- layout: {
80
- sections: [
81
- {
82
- label: 'Basic Information',
83
- fields: ['name']
84
- }
85
- ]
86
- }
87
- },
88
- page: {
89
- label: '{{label}} Page',
90
- type: 'standard',
91
- components: [
92
- {
93
- type: 'title',
94
- text: '{{label}}'
95
- }
96
- ]
97
- },
98
64
  action: {
99
65
  label: '{{label}} Action',
100
66
  object: '{{objectName}}',
@@ -149,24 +115,6 @@ const TEMPLATES = {
149
115
  }
150
116
  ]
151
117
  },
152
- report: {
153
- label: '{{label}} Report',
154
- type: 'tabular',
155
- object: '{{objectName}}',
156
- columns: [
157
- { field: 'name', label: 'Name' }
158
- ]
159
- },
160
- menu: {
161
- label: '{{label}} Menu',
162
- items: [
163
- {
164
- label: 'Home',
165
- page: 'home',
166
- icon: 'home'
167
- }
168
- ]
169
- },
170
118
  data: {
171
119
  label: '{{label}} Data',
172
120
  object: '{{objectName}}',
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface StartOptions {
2
+ port: number;
3
+ dir: string;
4
+ config?: string;
5
+ }
6
+ /**
7
+ * Start production server
8
+ * Loads configuration from objectql.config.ts/js if available
9
+ */
10
+ export declare function start(options: StartOptions): Promise<void>;
11
+ export {};
@@ -0,0 +1,119 @@
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
+ // Initialize datasource from config or use default SQLite
76
+ // Note: Config files may use 'datasource' (singular) while ObjectQLConfig uses 'datasources' (plural)
77
+ 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) || {
78
+ client: 'sqlite3',
79
+ connection: {
80
+ filename: process.env.DATABASE_FILE || './objectql.db'
81
+ },
82
+ useNullAsDefault: true
83
+ };
84
+ const driver = new driver_sql_1.SqlDriver(datasourceConfig);
85
+ const app = new core_1.ObjectQL({
86
+ datasources: { default: driver }
87
+ });
88
+ // Load Schema
89
+ try {
90
+ const loader = new platform_node_1.ObjectLoader(app.metadata);
91
+ loader.load(rootDir);
92
+ await app.init();
93
+ console.log(chalk_1.default.green('โœ… Schema loaded successfully.'));
94
+ }
95
+ catch (e) {
96
+ console.error(chalk_1.default.red('โŒ Failed to load schema:'), e.message);
97
+ process.exit(1);
98
+ }
99
+ // Create Handler
100
+ const handler = (0, server_1.createNodeHandler)(app);
101
+ // Start Server
102
+ const server = (0, http_1.createServer)(async (req, res) => {
103
+ await handler(req, res);
104
+ });
105
+ server.listen(options.port, () => {
106
+ console.log(chalk_1.default.green(`\nโœ… Server started in production mode`));
107
+ console.log(chalk_1.default.green(`๐Ÿš€ API endpoint: http://localhost:${options.port}`));
108
+ console.log(chalk_1.default.blue(`๐Ÿ“– OpenAPI Spec: http://localhost:${options.port}/openapi.json`));
109
+ // Handle graceful shutdown
110
+ process.on('SIGTERM', () => {
111
+ console.log(chalk_1.default.yellow('\nโš ๏ธ SIGTERM received, shutting down gracefully...'));
112
+ server.close(() => {
113
+ console.log(chalk_1.default.green('โœ… Server closed'));
114
+ process.exit(0);
115
+ });
116
+ });
117
+ });
118
+ }
119
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,sBAyEC;AAnGD,yCAA0C;AAC1C,qDAAiD;AACjD,2DAAuD;AACvD,6CAAqD;AACrD,+BAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AACzB,kDAA0B;AAe1B;;;GAGG;AACI,KAAK,UAAU,KAAK,CAAC,OAAqB;;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3D,4BAA4B;IAC5B,IAAI,MAAM,GAAwB,IAAI,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEpF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC,CAAC;YAC9D,qDAAqD;YACrD,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,+CAA+C;YAC/C,MAAM,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;QAClD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;IAED,0DAA0D;IAC1D,sGAAsG;IACtG,MAAM,gBAAgB,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,OAAO,MAAI,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,OAAO,CAAA,IAAI;QACpF,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE;YACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,eAAe;SACzD;QACD,gBAAgB,EAAE,IAAI;KACzB,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,eAAQ,CAAC;QACrB,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;KACnC,CAAC,CAAC;IAEH,cAAc;IACd,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,4BAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,iBAAiB;IACjB,MAAM,OAAO,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,CAAC;IAEvC,eAAe;IACf,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC;QAE1F,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACjF,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -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