@objectql/cli 1.8.4 → 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 +2 -2
- 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 +2 -0
- package/dist/commands/dev.js +94 -6
- package/dist/commands/dev.js.map +1 -1
- 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/init.js +31 -30
- package/dist/commands/init.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 +1 -0
- package/dist/commands/start.js +15 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +173 -210
- package/dist/index.js.map +1 -1
- package/package.json +13 -7
- 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} +36 -42
- 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 -426
- package/jest.config.js +0 -19
- package/src/commands/ai.ts +0 -509
- package/src/commands/build.ts +0 -98
- package/src/commands/dev.ts +0 -23
- package/src/commands/format.ts +0 -110
- package/src/commands/generate.ts +0 -135
- package/src/commands/i18n.ts +0 -303
- package/src/commands/init.ts +0 -191
- package/src/commands/lint.ts +0 -98
- package/src/commands/migrate.ts +0 -314
- package/src/commands/new.ts +0 -221
- package/src/commands/repl.ts +0 -120
- package/src/commands/serve.ts +0 -96
- package/src/commands/start.ts +0 -100
- package/src/commands/sync.ts +0 -328
- package/src/commands/test.ts +0 -98
- package/src/index.ts +0 -356
- package/tsconfig.json +0 -15
- package/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -449,7 +449,7 @@ objectql dev --no-watch
|
|
|
449
449
|
```
|
|
450
450
|
|
|
451
451
|
The development server provides:
|
|
452
|
-
- **
|
|
452
|
+
- **API Docs (Scalar)**: `http://localhost:<port>/docs` - Interactive API documentation
|
|
453
453
|
- **API Endpoint**: `http://localhost:<port>/` - Main API endpoint
|
|
454
454
|
- **OpenAPI Spec**: `http://localhost:<port>/openapi.json` - Machine-readable API spec
|
|
455
455
|
|
|
@@ -602,7 +602,7 @@ objectql serve --dir ./src/schema --port 8080
|
|
|
602
602
|
```
|
|
603
603
|
|
|
604
604
|
The server exposes:
|
|
605
|
-
- **Web Console (
|
|
605
|
+
- **Web Console (API Docs)**: `http://localhost:<port>/docs` (GET) - Interactive API explorer
|
|
606
606
|
- **JSON API Endpoint**: `http://localhost:<port>/` (POST)
|
|
607
607
|
- **OpenAPI Spec**: `http://localhost:<port>/openapi.json` (GET)
|
|
608
608
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.dbPushCommand = dbPushCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
async function dbPushCommand(options) {
|
|
9
|
+
console.log(chalk_1.default.blue('💾 Database Push'));
|
|
10
|
+
console.log(chalk_1.default.gray('Synchronizing schema with database...'));
|
|
11
|
+
console.log(chalk_1.default.yellow('🚧 Feature under construction'));
|
|
12
|
+
console.log('This command will comparison the current YAML schema with the database and apply changes.');
|
|
13
|
+
console.log('For now, please use migration flows.');
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=database-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-push.js","sourceRoot":"","sources":["../../src/commands/database-push.ts"],"names":[],"mappings":";;;;;AAMA,sCAOC;AAbD,kDAA0B;AAMnB,KAAK,UAAU,aAAa,CAAC,OAAsB;IACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/commands/dev.d.ts
CHANGED
package/dist/commands/dev.js
CHANGED
|
@@ -1,23 +1,111 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.dev = dev;
|
|
7
40
|
const serve_1 = require("./serve");
|
|
41
|
+
const generate_1 = require("./generate");
|
|
8
42
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
9
45
|
/**
|
|
10
46
|
* Start development server with hot reload
|
|
11
47
|
* This is an enhanced version of the serve command for development workflow
|
|
12
48
|
*/
|
|
13
49
|
async function dev(options) {
|
|
14
|
-
console.log(chalk_1.default.cyan('🚀 Starting ObjectQL Development Server
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
50
|
+
console.log(chalk_1.default.cyan('🚀 Starting ObjectQL Development Server...'));
|
|
51
|
+
const sourceDir = path.resolve(process.cwd(), options.dir || '.');
|
|
52
|
+
// Output types to the source directory under 'generated' folder
|
|
53
|
+
const typeOutputDir = path.join(sourceDir, 'generated');
|
|
54
|
+
// 1. Initial Type Generation
|
|
55
|
+
try {
|
|
56
|
+
await (0, generate_1.generateTypes)(sourceDir, typeOutputDir);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.error(chalk_1.default.red('Initial type generation failed:'), e);
|
|
60
|
+
// Continue anyway, maybe it's just a starting project
|
|
61
|
+
}
|
|
62
|
+
// 2. Setup Watcher (Before serve, in case serve blocks)
|
|
18
63
|
if (options.watch !== false) {
|
|
19
|
-
|
|
20
|
-
|
|
64
|
+
startWatcher(sourceDir, typeOutputDir);
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk_1.default.blue(`\n🌐 Server context: ${sourceDir}`));
|
|
67
|
+
console.log(chalk_1.default.blue(`📁 Type output: ${typeOutputDir}`));
|
|
68
|
+
// 3. Start Server
|
|
69
|
+
await (0, serve_1.serve)({
|
|
70
|
+
port: options.port,
|
|
71
|
+
dir: options.dir,
|
|
72
|
+
config: options.config,
|
|
73
|
+
modules: options.modules
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
let debounceTimer = null;
|
|
77
|
+
function startWatcher(sourceDir, outputDir) {
|
|
78
|
+
console.log(chalk_1.default.yellow('👀 Watching for metadata changes...'));
|
|
79
|
+
try {
|
|
80
|
+
// Recursive watch
|
|
81
|
+
const watcher = fs.watch(sourceDir, { recursive: true }, (eventType, filename) => {
|
|
82
|
+
if (!filename)
|
|
83
|
+
return;
|
|
84
|
+
// Ignore generated directory to prevent loops if output is inside source
|
|
85
|
+
if (filename.includes('generated') || filename.includes('node_modules') || filename.includes('.git')) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Only care about YAML
|
|
89
|
+
if (filename.endsWith('.yml') || filename.endsWith('.yaml')) {
|
|
90
|
+
// Debounce
|
|
91
|
+
if (debounceTimer)
|
|
92
|
+
clearTimeout(debounceTimer);
|
|
93
|
+
debounceTimer = setTimeout(async () => {
|
|
94
|
+
console.log(chalk_1.default.gray(`\n📝 Change detected: ${filename}`));
|
|
95
|
+
try {
|
|
96
|
+
console.log(chalk_1.default.blue('⚡️ Regenerating types...'));
|
|
97
|
+
await (0, generate_1.generateTypes)(sourceDir, outputDir);
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.error(chalk_1.default.red('Type generation failed:'), e);
|
|
101
|
+
}
|
|
102
|
+
}, 500);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
watcher.on('error', (e) => console.error(chalk_1.default.red('Watcher error:'), e));
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
console.warn(chalk_1.default.yellow('Native recursive watch not supported or failed. Watching root only.'));
|
|
21
109
|
}
|
|
22
110
|
}
|
|
23
111
|
//# sourceMappingURL=dev.js.map
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.doctorCommand = doctorCommand;
|
|
7
|
+
exports.validateCommand = validateCommand;
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
async function doctorCommand() {
|
|
10
|
+
console.log(chalk_1.default.blue('🩺 ObjectQL Doctor'));
|
|
11
|
+
console.log(chalk_1.default.gray('Checking environment health...'));
|
|
12
|
+
// 1. Check Node Version
|
|
13
|
+
const nodeVersion = process.version;
|
|
14
|
+
console.log(`Node.js: ${chalk_1.default.green(nodeVersion)}`);
|
|
15
|
+
// 2. Check Configuration
|
|
16
|
+
try {
|
|
17
|
+
console.log('Configuration: Checking objectql.config.ts...');
|
|
18
|
+
// Mock check
|
|
19
|
+
console.log(chalk_1.default.green('OK'));
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
console.log(chalk_1.default.red('FAIL'));
|
|
23
|
+
}
|
|
24
|
+
// 3. Check Dependencies
|
|
25
|
+
// TODO: rigorous dependency check
|
|
26
|
+
console.log(chalk_1.default.green('\nEverything looks good!'));
|
|
27
|
+
}
|
|
28
|
+
async function validateCommand(options) {
|
|
29
|
+
console.log(chalk_1.default.blue('🔍 Validating Metadata...'));
|
|
30
|
+
// This would invoke the core validator
|
|
31
|
+
console.log(chalk_1.default.gray('Feature coming soon: Will validate all .object.yml files against schema.'));
|
|
32
|
+
}
|
|
33
|
+
async function loadObjectQLInstance(configPath) {
|
|
34
|
+
// Placeholder for actual loader logic if not exported from elsewhere
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":";;;;;AAEA,sCAqBC;AAED,0CAIC;AA7BD,kDAA0B;AAEnB,KAAK,UAAU,aAAa;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE1D,wBAAwB;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,YAAY,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAEpD,yBAAyB;IACzB,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,wBAAwB;IACxB,kCAAkC;IAElC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACzD,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAyB;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,uCAAuC;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAmB;IACnD,qEAAqE;IACrE,OAAO,EAAE,CAAC;AACd,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -44,14 +44,13 @@ const util_1 = require("util");
|
|
|
44
44
|
const chalk_1 = __importDefault(require("chalk"));
|
|
45
45
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
46
46
|
const TEMPLATES = {
|
|
47
|
-
|
|
48
|
-
'
|
|
49
|
-
enterprise: '@objectql/starter-enterprise'
|
|
47
|
+
'hello-world': 'hello-world',
|
|
48
|
+
'starter': 'project-tracker'
|
|
50
49
|
};
|
|
51
50
|
async function initProject(options) {
|
|
52
51
|
const projectName = options.name || 'my-objectql-project';
|
|
53
52
|
const targetDir = options.dir || path.join(process.cwd(), projectName);
|
|
54
|
-
const template = (options.template || '
|
|
53
|
+
const template = (options.template || 'starter');
|
|
55
54
|
if (!TEMPLATES[template]) {
|
|
56
55
|
console.error(chalk_1.default.red(`❌ Unknown template: ${template}`));
|
|
57
56
|
console.log(chalk_1.default.gray(`Available templates: ${Object.keys(TEMPLATES).join(', ')}`));
|
|
@@ -68,41 +67,43 @@ async function initProject(options) {
|
|
|
68
67
|
// Create project directory
|
|
69
68
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
70
69
|
try {
|
|
71
|
-
// Copy template
|
|
72
|
-
const
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// Try to use the published package
|
|
80
|
-
console.log(chalk_1.default.gray(`Installing template from npm: ${TEMPLATES[template]}...`));
|
|
81
|
-
await execAsync(`npm create ${TEMPLATES[template]} ${targetDir}`, {
|
|
82
|
-
cwd: process.cwd()
|
|
83
|
-
});
|
|
70
|
+
// Copy embedded template
|
|
71
|
+
const templateName = TEMPLATES[template];
|
|
72
|
+
// Must resolve relative to the dist/commands folder structure
|
|
73
|
+
const sourcePath = path.resolve(__dirname, '../../templates', templateName);
|
|
74
|
+
if (!fs.existsSync(sourcePath)) {
|
|
75
|
+
// Fallback for development (running directly from src)
|
|
76
|
+
// If running via ts-node in dev, structure might be different
|
|
77
|
+
throw new Error(`Template not found at ${sourcePath}. Please check your CLI installation.`);
|
|
84
78
|
}
|
|
79
|
+
console.log(chalk_1.default.cyan(`⬇️ Creating project from embedded template...`));
|
|
80
|
+
await copyDirectory(sourcePath, targetDir, ['node_modules', 'dist', '.git']);
|
|
81
|
+
console.log(chalk_1.default.green('✅ Template created successfully.'));
|
|
85
82
|
// Update package.json with project name
|
|
86
83
|
const pkgPath = path.join(targetDir, 'package.json');
|
|
87
84
|
if (fs.existsSync(pkgPath)) {
|
|
88
85
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
89
86
|
pkg.name = projectName;
|
|
90
87
|
pkg.version = '0.1.0';
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (pkg.devDependencies) {
|
|
100
|
-
for (const dep of Object.keys(pkg.devDependencies)) {
|
|
101
|
-
if (pkg.devDependencies[dep] === 'workspace:*') {
|
|
102
|
-
pkg.devDependencies[dep] = '^1.0.0';
|
|
88
|
+
// Note: Since we are using examples from the monorepo,
|
|
89
|
+
// they might have "workspace:*" protocols.
|
|
90
|
+
// We should replace them with "latest" or a specific version for end users.
|
|
91
|
+
const replaceWorkspaceVersion = (deps) => {
|
|
92
|
+
for (const dep of Object.keys(deps)) {
|
|
93
|
+
if (deps[dep] === 'workspace:*') {
|
|
94
|
+
// For public release, this should match the current CLI version or latest
|
|
95
|
+
deps[dep] = 'latest';
|
|
103
96
|
}
|
|
104
97
|
}
|
|
105
|
-
}
|
|
98
|
+
};
|
|
99
|
+
if (pkg.dependencies)
|
|
100
|
+
replaceWorkspaceVersion(pkg.dependencies);
|
|
101
|
+
if (pkg.devDependencies)
|
|
102
|
+
replaceWorkspaceVersion(pkg.devDependencies); // Often peerDeps in examples
|
|
103
|
+
// Make public for the user's new project
|
|
104
|
+
delete pkg.private;
|
|
105
|
+
// Reset repository field as it will be a new repo
|
|
106
|
+
delete pkg.repository;
|
|
106
107
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
|
|
107
108
|
}
|
|
108
109
|
// Initialize git repository
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/serve.d.ts
CHANGED
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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"}
|