@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.
- package/README.md +157 -1
- package/dist/commands/ai.js +4 -3
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/build.d.ts +12 -0
- package/dist/commands/build.js +119 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/database-push.d.ts +5 -0
- package/dist/commands/database-push.js +15 -0
- package/dist/commands/database-push.js.map +1 -0
- package/dist/commands/dev.d.ts +11 -0
- package/dist/commands/dev.js +111 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.js +37 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/format.d.ts +9 -0
- package/dist/commands/format.js +137 -0
- package/dist/commands/format.js.map +1 -0
- package/dist/commands/init.js +31 -30
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +9 -0
- package/dist/commands/lint.js +120 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/new.js +0 -52
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/serve.d.ts +2 -0
- package/dist/commands/serve.js +122 -46
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/start.d.ts +12 -0
- package/dist/commands/start.js +134 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/test.d.ts +10 -0
- package/dist/commands/test.js +120 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.js +189 -149
- package/dist/index.js.map +1 -1
- package/package.json +13 -8
- package/templates/hello-world/.vscode/extensions.json +7 -0
- package/templates/hello-world/CHANGELOG.md +41 -0
- package/templates/hello-world/README.md +29 -0
- package/templates/hello-world/package.json +24 -0
- package/templates/hello-world/src/index.ts +58 -0
- package/templates/hello-world/tsconfig.json +10 -0
- package/templates/starter/.vscode/extensions.json +7 -0
- package/{CHANGELOG.md ā templates/starter/CHANGELOG.md} +47 -41
- package/templates/starter/README.md +17 -0
- package/templates/starter/__tests__/projects-hooks-actions.test.ts +490 -0
- package/templates/starter/jest.config.js +16 -0
- package/templates/starter/package.json +52 -0
- package/templates/starter/src/README.pages.md +110 -0
- package/templates/starter/src/demo.app.yml +4 -0
- package/templates/starter/src/i18n/zh-CN/projects.json +22 -0
- package/templates/starter/src/modules/kitchen-sink/kitchen_sink.data.yml +18 -0
- package/templates/starter/src/modules/kitchen-sink/kitchen_sink.object.yml +156 -0
- package/templates/starter/src/modules/projects/project_approval.workflow.yml +51 -0
- package/templates/starter/src/modules/projects/projects.action.ts +472 -0
- package/templates/starter/src/modules/projects/projects.data.yml +13 -0
- package/templates/starter/src/modules/projects/projects.hook.ts +339 -0
- package/templates/starter/src/modules/projects/projects.object.yml +148 -0
- package/templates/starter/src/modules/projects/projects.permission.yml +141 -0
- package/templates/starter/src/modules/projects/projects.validation.yml +37 -0
- package/templates/starter/src/modules/tasks/tasks.data.yml +23 -0
- package/templates/starter/src/modules/tasks/tasks.object.yml +34 -0
- package/templates/starter/src/modules/tasks/tasks.permission.yml +167 -0
- package/templates/starter/src/seed.ts +55 -0
- package/templates/starter/src/types/index.ts +3 -0
- package/templates/starter/src/types/kitchen_sink.ts +101 -0
- package/templates/starter/src/types/projects.ts +49 -0
- package/templates/starter/src/types/tasks.ts +33 -0
- package/templates/starter/tsconfig.json +11 -0
- package/templates/starter/tsconfig.tsbuildinfo +1 -0
- package/AI_EXAMPLES.md +0 -154
- package/AI_IMPLEMENTATION_SUMMARY.md +0 -509
- package/AI_TUTORIAL.md +0 -144
- package/IMPLEMENTATION_SUMMARY.md +0 -437
- package/USAGE_EXAMPLES.md +0 -951
- package/__tests__/commands.test.ts +0 -316
- package/dist/commands/studio.d.ts +0 -5
- package/dist/commands/studio.js +0 -364
- package/dist/commands/studio.js.map +0 -1
- package/jest.config.js +0 -19
- package/src/commands/ai.ts +0 -508
- package/src/commands/generate.ts +0 -135
- package/src/commands/i18n.ts +0 -303
- package/src/commands/init.ts +0 -191
- package/src/commands/migrate.ts +0 -314
- package/src/commands/new.ts +0 -273
- package/src/commands/repl.ts +0 -120
- package/src/commands/serve.ts +0 -96
- package/src/commands/studio.ts +0 -354
- package/src/commands/sync.ts +0 -328
- package/src/index.ts +0 -274
- package/tsconfig.json +0 -15
- package/tsconfig.tsbuildinfo +0 -1
package/dist/commands/serve.js
CHANGED
|
@@ -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
|
|
48
|
+
const SCALAR_HTML = `
|
|
48
49
|
<!DOCTYPE html>
|
|
49
|
-
<html
|
|
50
|
-
<head>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</
|
|
58
|
-
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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(
|
|
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
|
-
//
|
|
111
|
-
if (req.
|
|
112
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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,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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"}
|