@objectstack/cli 3.0.6 ā 3.0.7
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/.turbo/turbo-build.log +2 -26
- package/CHANGELOG.md +14 -0
- package/README.md +98 -54
- package/bin/run-dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/bin.d.ts +11 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +12 -3767
- package/dist/bin.js.map +1 -0
- package/dist/commands/codemod/v2-to-v3.d.ts +10 -0
- package/dist/commands/codemod/v2-to-v3.d.ts.map +1 -0
- package/dist/commands/codemod/v2-to-v3.js +145 -0
- package/dist/commands/codemod/v2-to-v3.js.map +1 -0
- package/dist/commands/compile.d.ts +13 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +91 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/create.d.ts +91 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +259 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dev.d.ts +14 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +67 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/diff.d.ts +16 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +239 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +532 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/explain.d.ts +12 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +368 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +833 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/info.d.ts +12 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +100 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +22 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +295 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +13 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +255 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/plugin/add.d.ts +22 -0
- package/dist/commands/plugin/add.d.ts.map +1 -0
- package/dist/commands/plugin/add.js +93 -0
- package/dist/commands/plugin/add.js.map +1 -0
- package/dist/commands/plugin/info.d.ts +10 -0
- package/dist/commands/plugin/info.d.ts.map +1 -0
- package/dist/commands/plugin/info.js +65 -0
- package/dist/commands/plugin/info.js.map +1 -0
- package/dist/commands/plugin/list.d.ts +13 -0
- package/dist/commands/plugin/list.d.ts.map +1 -0
- package/dist/commands/plugin/list.js +78 -0
- package/dist/commands/plugin/list.js.map +1 -0
- package/dist/commands/plugin/remove.d.ts +20 -0
- package/dist/commands/plugin/remove.d.ts.map +1 -0
- package/dist/commands/plugin/remove.js +79 -0
- package/dist/commands/plugin/remove.js.map +1 -0
- package/dist/commands/serve.d.ts +15 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +286 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/studio.d.ts +19 -0
- package/dist/commands/studio.d.ts.map +1 -0
- package/dist/commands/studio.js +43 -0
- package/dist/commands/studio.js.map +1 -0
- package/dist/commands/test.d.ts +13 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +120 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/validate.d.ts +13 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +115 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +15 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -2805
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +66 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/format.d.ts +52 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +202 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/plugin-helpers.d.ts +14 -0
- package/dist/utils/plugin-helpers.d.ts.map +1 -0
- package/dist/utils/plugin-helpers.js +40 -0
- package/dist/utils/plugin-helpers.js.map +1 -0
- package/dist/utils/studio.d.ts +58 -0
- package/dist/utils/studio.d.ts.map +1 -0
- package/dist/utils/studio.js +288 -0
- package/dist/utils/studio.js.map +1 -0
- package/package.json +33 -15
- package/src/bin.ts +11 -104
- package/src/commands/{codemod.ts ā codemod/v2-to-v3.ts} +21 -28
- package/src/commands/compile.ts +31 -22
- package/src/commands/create.ts +29 -19
- package/src/commands/dev.ts +21 -10
- package/src/commands/diff.ts +28 -19
- package/src/commands/doctor.ts +17 -10
- package/src/commands/explain.ts +20 -10
- package/src/commands/generate.ts +81 -90
- package/src/commands/info.ts +20 -11
- package/src/commands/init.ts +32 -20
- package/src/commands/lint.ts +24 -14
- package/src/commands/plugin/add.ts +112 -0
- package/src/commands/plugin/info.ts +79 -0
- package/src/commands/plugin/list.ts +93 -0
- package/src/commands/plugin/remove.ts +97 -0
- package/src/commands/serve.ts +30 -20
- package/src/commands/studio.ts +21 -11
- package/src/commands/test.ts +21 -10
- package/src/commands/validate.ts +32 -22
- package/src/index.ts +20 -12
- package/src/utils/plugin-helpers.ts +37 -0
- package/src/utils/studio.ts +0 -1
- package/test/commands.test.ts +76 -37
- package/test/plugin-commands.test.ts +42 -160
- package/test/plugin.test.ts +19 -23
- package/tsconfig.build.json +18 -0
- package/bin/objectstack.js +0 -2
- package/dist/chunk-T2YN4AB7.js +0 -249
- package/dist/chunk-XNACYTC5.js +0 -251
- package/dist/config-FOXDQ5F7.js +0 -10
- package/dist/config-GBR54FKL.js +0 -11
- package/src/commands/plugin.ts +0 -372
- package/src/utils/plugin-commands.ts +0 -163
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class V2ToV3 extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
dir: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=v2-to-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-to-v3.d.ts","sourceRoot":"","sources":["../../../src/commands/codemod/v2-to-v3.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AA8E7C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAAgD;IAE3E,OAAgB,KAAK;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkF3B"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { printHeader, printSuccess, printError, printInfo, printStep, createTimer } from '../../utils/format.js';
|
|
7
|
+
const V2_TO_V3_TRANSFORMS = [
|
|
8
|
+
{
|
|
9
|
+
pattern: /\bEnhancedObjectKernel\b/g,
|
|
10
|
+
replacement: 'ObjectKernel',
|
|
11
|
+
description: 'EnhancedObjectKernel ā ObjectKernel',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
pattern: /\bmax_length\b/g,
|
|
15
|
+
replacement: 'maxLength',
|
|
16
|
+
description: 'max_length ā maxLength',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
pattern: /\breference_filters\b/g,
|
|
20
|
+
replacement: 'referenceFilters',
|
|
21
|
+
description: 'reference_filters ā referenceFilters',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
pattern: /\bdefault_value\b/g,
|
|
25
|
+
replacement: 'defaultValue',
|
|
26
|
+
description: 'default_value ā defaultValue',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
pattern: /\bmin_length\b/g,
|
|
30
|
+
replacement: 'minLength',
|
|
31
|
+
description: 'min_length ā minLength',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
pattern: /\bunique_name\b/g,
|
|
35
|
+
replacement: 'uniqueName',
|
|
36
|
+
description: 'unique_name ā uniqueName',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
pattern: /from\s+['"]@objectstack\/core\/enhanced['"]/g,
|
|
40
|
+
replacement: "from '@objectstack/core'",
|
|
41
|
+
description: 'Update import from @objectstack/core/enhanced',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
pattern: /from\s+['"]@objectstack\/spec\/dist\/[^'"]+['"]/g,
|
|
45
|
+
replacement: "from '@objectstack/spec'",
|
|
46
|
+
description: 'Update deep import from @objectstack/spec/dist/',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
// āāā Helpers āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
50
|
+
function walkDir(dir, ext) {
|
|
51
|
+
const results = [];
|
|
52
|
+
if (!fs.existsSync(dir))
|
|
53
|
+
return results;
|
|
54
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
if (entry.name === 'node_modules')
|
|
57
|
+
continue;
|
|
58
|
+
const fullPath = path.join(dir, entry.name);
|
|
59
|
+
if (entry.isDirectory()) {
|
|
60
|
+
results.push(...walkDir(fullPath, ext));
|
|
61
|
+
}
|
|
62
|
+
else if (entry.name.endsWith(ext)) {
|
|
63
|
+
results.push(fullPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
// āāā Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
69
|
+
export default class V2ToV3 extends Command {
|
|
70
|
+
static description = 'Migrate ObjectStack v2 config to v3 format';
|
|
71
|
+
static flags = {
|
|
72
|
+
dir: Flags.string({ description: 'Directory to scan', default: 'src/' }),
|
|
73
|
+
'dry-run': Flags.boolean({ description: 'Show changes without writing files' }),
|
|
74
|
+
};
|
|
75
|
+
async run() {
|
|
76
|
+
const { flags } = await this.parse(V2ToV3);
|
|
77
|
+
printHeader('Codemod: v2 ā v3');
|
|
78
|
+
const timer = createTimer();
|
|
79
|
+
const dir = path.resolve(process.cwd(), flags.dir);
|
|
80
|
+
if (!fs.existsSync(dir)) {
|
|
81
|
+
printError(`Directory not found: ${dir}`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
console.log(` ${chalk.dim('Directory:')} ${chalk.white(flags.dir)}`);
|
|
85
|
+
console.log(` ${chalk.dim('Dry run:')} ${chalk.white(flags['dry-run'] ? 'yes' : 'no')}`);
|
|
86
|
+
console.log('');
|
|
87
|
+
printStep('Scanning TypeScript files...');
|
|
88
|
+
const files = walkDir(dir, '.ts');
|
|
89
|
+
if (files.length === 0) {
|
|
90
|
+
printInfo('No .ts files found in directory');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
printInfo(`Found ${files.length} TypeScript file(s)`);
|
|
94
|
+
console.log('');
|
|
95
|
+
let totalTransforms = 0;
|
|
96
|
+
let filesModified = 0;
|
|
97
|
+
const transformCounts = {};
|
|
98
|
+
for (const file of files) {
|
|
99
|
+
const original = fs.readFileSync(file, 'utf-8');
|
|
100
|
+
let content = original;
|
|
101
|
+
let fileTransforms = 0;
|
|
102
|
+
for (const transform of V2_TO_V3_TRANSFORMS) {
|
|
103
|
+
const matches = content.match(transform.pattern);
|
|
104
|
+
if (matches) {
|
|
105
|
+
const count = matches.length;
|
|
106
|
+
content = content.replace(transform.pattern, transform.replacement);
|
|
107
|
+
fileTransforms += count;
|
|
108
|
+
transformCounts[transform.description] = (transformCounts[transform.description] || 0) + count;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (fileTransforms > 0) {
|
|
112
|
+
const relPath = path.relative(process.cwd(), file);
|
|
113
|
+
filesModified++;
|
|
114
|
+
totalTransforms += fileTransforms;
|
|
115
|
+
if (flags['dry-run']) {
|
|
116
|
+
printInfo(`${relPath} ā ${fileTransforms} change(s)`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
fs.writeFileSync(file, content);
|
|
120
|
+
printSuccess(`${relPath} ā ${fileTransforms} change(s)`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
console.log('');
|
|
125
|
+
if (totalTransforms === 0) {
|
|
126
|
+
printSuccess('No v2 patterns found ā code is already v3 compatible');
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.log(chalk.bold(' Summary:'));
|
|
130
|
+
for (const [desc, count] of Object.entries(transformCounts)) {
|
|
131
|
+
console.log(` ${chalk.dim(desc)}: ${chalk.white(count)}`);
|
|
132
|
+
}
|
|
133
|
+
console.log('');
|
|
134
|
+
if (flags['dry-run']) {
|
|
135
|
+
printInfo(`Would modify ${filesModified} file(s) with ${totalTransforms} total change(s)`);
|
|
136
|
+
console.log(chalk.dim(' Run without --dry-run to apply changes'));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
printSuccess(`Modified ${filesModified} file(s) with ${totalTransforms} total change(s) (${timer.display()})`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
console.log('');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=v2-to-v3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2-to-v3.js","sourceRoot":"","sources":["../../../src/commands/codemod/v2-to-v3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Compile extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
config: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAmBnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAAwD;IAEnF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgF3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { ObjectStackDefinitionSchema, normalizeStackInput } from '@objectstack/spec';
|
|
7
|
+
import { loadConfig } from '../utils/config.js';
|
|
8
|
+
import { printHeader, printKV, printSuccess, printError, printStep, createTimer, formatZodErrors, collectMetadataStats, printMetadataStats, } from '../utils/format.js';
|
|
9
|
+
export default class Compile extends Command {
|
|
10
|
+
static description = 'Compile ObjectStack configuration to JSON artifact';
|
|
11
|
+
static args = {
|
|
12
|
+
config: Args.string({ description: 'Source configuration file', required: false }),
|
|
13
|
+
};
|
|
14
|
+
static flags = {
|
|
15
|
+
output: Flags.string({ char: 'o', description: 'Output JSON file', default: 'dist/objectstack.json' }),
|
|
16
|
+
json: Flags.boolean({ description: 'Output compile result as JSON (for CI)' }),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { args, flags } = await this.parse(Compile);
|
|
20
|
+
const timer = createTimer();
|
|
21
|
+
if (!flags.json) {
|
|
22
|
+
printHeader('Compile');
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
// 1. Load Configuration
|
|
26
|
+
if (!flags.json)
|
|
27
|
+
printStep('Loading configuration...');
|
|
28
|
+
const { config, absolutePath, duration } = await loadConfig(args.config);
|
|
29
|
+
if (!flags.json) {
|
|
30
|
+
printKV('Config', path.relative(process.cwd(), absolutePath));
|
|
31
|
+
printKV('Load time', `${duration}ms`);
|
|
32
|
+
}
|
|
33
|
+
// 2. Normalize map-formatted stack definition and validate against Protocol
|
|
34
|
+
if (!flags.json)
|
|
35
|
+
printStep('Validating protocol compliance...');
|
|
36
|
+
const normalized = normalizeStackInput(config);
|
|
37
|
+
const result = ObjectStackDefinitionSchema.safeParse(normalized);
|
|
38
|
+
if (!result.success) {
|
|
39
|
+
if (flags.json) {
|
|
40
|
+
console.log(JSON.stringify({ success: false, errors: result.error.issues }));
|
|
41
|
+
this.exit(1);
|
|
42
|
+
}
|
|
43
|
+
console.log('');
|
|
44
|
+
printError('Validation failed');
|
|
45
|
+
formatZodErrors(result.error);
|
|
46
|
+
this.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// 3. Generate Artifact
|
|
49
|
+
if (!flags.json)
|
|
50
|
+
printStep('Writing artifact...');
|
|
51
|
+
const output = flags.output;
|
|
52
|
+
const artifactPath = path.resolve(process.cwd(), output);
|
|
53
|
+
const artifactDir = path.dirname(artifactPath);
|
|
54
|
+
if (!fs.existsSync(artifactDir)) {
|
|
55
|
+
fs.mkdirSync(artifactDir, { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
const jsonContent = JSON.stringify(result.data, null, 2);
|
|
58
|
+
fs.writeFileSync(artifactPath, jsonContent);
|
|
59
|
+
const sizeKB = (jsonContent.length / 1024).toFixed(1);
|
|
60
|
+
const stats = collectMetadataStats(config);
|
|
61
|
+
if (flags.json) {
|
|
62
|
+
console.log(JSON.stringify({
|
|
63
|
+
success: true,
|
|
64
|
+
output: artifactPath,
|
|
65
|
+
size: jsonContent.length,
|
|
66
|
+
stats,
|
|
67
|
+
duration: timer.elapsed(),
|
|
68
|
+
}));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// 4. Summary
|
|
72
|
+
console.log('');
|
|
73
|
+
printSuccess(`Build complete ${chalk.dim(`(${timer.display()})`)}`);
|
|
74
|
+
console.log('');
|
|
75
|
+
printMetadataStats(stats);
|
|
76
|
+
console.log('');
|
|
77
|
+
printKV('Artifact', `${output} ${chalk.dim(`(${sizeKB} KB`)})`);
|
|
78
|
+
console.log('');
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (flags.json) {
|
|
82
|
+
console.log(JSON.stringify({ success: false, error: error.message }));
|
|
83
|
+
this.exit(1);
|
|
84
|
+
}
|
|
85
|
+
console.log('');
|
|
86
|
+
printError(error.message || String(error));
|
|
87
|
+
this.error(error.message || String(error));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export declare const templates: {
|
|
3
|
+
plugin: {
|
|
4
|
+
description: string;
|
|
5
|
+
files: {
|
|
6
|
+
'package.json': (name: string) => {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
description: string;
|
|
10
|
+
main: string;
|
|
11
|
+
types: string;
|
|
12
|
+
scripts: {
|
|
13
|
+
build: string;
|
|
14
|
+
dev: string;
|
|
15
|
+
test: string;
|
|
16
|
+
};
|
|
17
|
+
keywords: string[];
|
|
18
|
+
author: string;
|
|
19
|
+
license: string;
|
|
20
|
+
dependencies: {
|
|
21
|
+
'@objectstack/spec': string;
|
|
22
|
+
zod: string;
|
|
23
|
+
};
|
|
24
|
+
devDependencies: {
|
|
25
|
+
'@types/node': string;
|
|
26
|
+
typescript: string;
|
|
27
|
+
vitest: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
'tsconfig.json': () => {
|
|
31
|
+
extends: string;
|
|
32
|
+
compilerOptions: {
|
|
33
|
+
outDir: string;
|
|
34
|
+
rootDir: string;
|
|
35
|
+
};
|
|
36
|
+
include: string[];
|
|
37
|
+
};
|
|
38
|
+
'src/index.ts': (name: string) => string;
|
|
39
|
+
'README.md': (name: string) => string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
example: {
|
|
43
|
+
description: string;
|
|
44
|
+
files: {
|
|
45
|
+
'package.json': (name: string) => {
|
|
46
|
+
name: string;
|
|
47
|
+
version: string;
|
|
48
|
+
private: boolean;
|
|
49
|
+
description: string;
|
|
50
|
+
scripts: {
|
|
51
|
+
build: string;
|
|
52
|
+
dev: string;
|
|
53
|
+
test: string;
|
|
54
|
+
};
|
|
55
|
+
dependencies: {
|
|
56
|
+
'@objectstack/spec': string;
|
|
57
|
+
'@objectstack/cli': string;
|
|
58
|
+
zod: string;
|
|
59
|
+
};
|
|
60
|
+
devDependencies: {
|
|
61
|
+
'@types/node': string;
|
|
62
|
+
tsx: string;
|
|
63
|
+
typescript: string;
|
|
64
|
+
vitest: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
'objectstack.config.ts': (name: string) => string;
|
|
68
|
+
'README.md': (name: string) => string;
|
|
69
|
+
'tsconfig.json': () => {
|
|
70
|
+
extends: string;
|
|
71
|
+
compilerOptions: {
|
|
72
|
+
outDir: string;
|
|
73
|
+
rootDir: string;
|
|
74
|
+
};
|
|
75
|
+
include: string[];
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
export default class Create extends Command {
|
|
81
|
+
static description: string;
|
|
82
|
+
static args: {
|
|
83
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
84
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
85
|
+
};
|
|
86
|
+
static flags: {
|
|
87
|
+
dir: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
88
|
+
};
|
|
89
|
+
run(): Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAMnD,eAAO,MAAM,SAAS;;;;mCAIO,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAgCN,MAAM;gCAsBT,MAAM;;;;;;mCAiCH,MAAM;;;;;;;;;;;;;;;;;;;;;;4CAsBG,MAAM;gCAuBlB,MAAM;;;;;;;;;;;CAkC/B,CAAC;AAMF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAA4D;IAEvF,OAAgB,IAAI;;;MAGlB;IAEF,OAAgB,KAAK;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoF3B"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
export const templates = {
|
|
7
|
+
plugin: {
|
|
8
|
+
description: 'Create a new ObjectStack plugin',
|
|
9
|
+
files: {
|
|
10
|
+
'package.json': (name) => ({
|
|
11
|
+
name: `@objectstack/plugin-${name}`,
|
|
12
|
+
version: '0.1.0',
|
|
13
|
+
description: `ObjectStack Plugin: ${name}`,
|
|
14
|
+
main: 'dist/index.js',
|
|
15
|
+
types: 'dist/index.d.ts',
|
|
16
|
+
scripts: {
|
|
17
|
+
build: 'tsc',
|
|
18
|
+
dev: 'tsc --watch',
|
|
19
|
+
test: 'vitest',
|
|
20
|
+
},
|
|
21
|
+
keywords: ['objectstack', 'plugin', name],
|
|
22
|
+
author: '',
|
|
23
|
+
license: 'MIT',
|
|
24
|
+
dependencies: {
|
|
25
|
+
'@objectstack/spec': 'workspace:*',
|
|
26
|
+
zod: '^4.3.6',
|
|
27
|
+
},
|
|
28
|
+
devDependencies: {
|
|
29
|
+
'@types/node': '^22.0.0',
|
|
30
|
+
typescript: '^5.8.0',
|
|
31
|
+
vitest: '^4.0.0',
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
'tsconfig.json': () => ({
|
|
35
|
+
extends: '../../tsconfig.json',
|
|
36
|
+
compilerOptions: {
|
|
37
|
+
outDir: 'dist',
|
|
38
|
+
rootDir: 'src',
|
|
39
|
+
},
|
|
40
|
+
include: ['src/**/*'],
|
|
41
|
+
}),
|
|
42
|
+
'src/index.ts': (name) => `import type { Plugin } from '@objectstack/spec';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* ${name} Plugin for ObjectStack
|
|
46
|
+
*/
|
|
47
|
+
export const ${toCamelCase(name)}Plugin: Plugin = {
|
|
48
|
+
name: '${name}',
|
|
49
|
+
version: '0.1.0',
|
|
50
|
+
|
|
51
|
+
async initialize(context) {
|
|
52
|
+
console.log('Initializing ${name} plugin...');
|
|
53
|
+
// Plugin initialization logic
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
async destroy() {
|
|
57
|
+
console.log('Destroying ${name} plugin...');
|
|
58
|
+
// Plugin cleanup logic
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default ${toCamelCase(name)}Plugin;
|
|
63
|
+
`,
|
|
64
|
+
'README.md': (name) => `# @objectstack/plugin-${name}
|
|
65
|
+
|
|
66
|
+
ObjectStack Plugin: ${name}
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
\`\`\`bash
|
|
71
|
+
pnpm add @objectstack/plugin-${name}
|
|
72
|
+
\`\`\`
|
|
73
|
+
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
\`\`\`typescript
|
|
77
|
+
import { ${toCamelCase(name)}Plugin } from '@objectstack/plugin-${name}';
|
|
78
|
+
|
|
79
|
+
// Use the plugin in your ObjectStack configuration
|
|
80
|
+
export default {
|
|
81
|
+
plugins: [
|
|
82
|
+
${toCamelCase(name)}Plugin,
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
MIT
|
|
90
|
+
`,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
example: {
|
|
94
|
+
description: 'Create a new ObjectStack example application',
|
|
95
|
+
files: {
|
|
96
|
+
'package.json': (name) => ({
|
|
97
|
+
name: `@example/${name}`,
|
|
98
|
+
version: '0.1.0',
|
|
99
|
+
private: true,
|
|
100
|
+
description: `ObjectStack Example: ${name}`,
|
|
101
|
+
scripts: {
|
|
102
|
+
build: 'objectstack compile',
|
|
103
|
+
dev: 'objectstack dev',
|
|
104
|
+
test: 'vitest',
|
|
105
|
+
},
|
|
106
|
+
dependencies: {
|
|
107
|
+
'@objectstack/spec': 'workspace:*',
|
|
108
|
+
'@objectstack/cli': 'workspace:*',
|
|
109
|
+
zod: '^4.3.6',
|
|
110
|
+
},
|
|
111
|
+
devDependencies: {
|
|
112
|
+
'@types/node': '^22.0.0',
|
|
113
|
+
tsx: '^4.21.0',
|
|
114
|
+
typescript: '^5.8.0',
|
|
115
|
+
vitest: '^4.0.0',
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
118
|
+
'objectstack.config.ts': (name) => `import { defineStack } from '@objectstack/spec';
|
|
119
|
+
|
|
120
|
+
// Barrel imports ā add more as you create new type folders
|
|
121
|
+
// import * as objects from './src/objects';
|
|
122
|
+
// import * as actions from './src/actions';
|
|
123
|
+
// import * as apps from './src/apps';
|
|
124
|
+
|
|
125
|
+
export default defineStack({
|
|
126
|
+
manifest: {
|
|
127
|
+
name: '${name}',
|
|
128
|
+
version: '0.1.0',
|
|
129
|
+
description: '${name} example application',
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
objects: [
|
|
133
|
+
// Object.values(objects), // Uncomment after creating src/objects/index.ts
|
|
134
|
+
],
|
|
135
|
+
|
|
136
|
+
apps: [
|
|
137
|
+
// Object.values(apps), // Uncomment after creating src/apps/index.ts
|
|
138
|
+
],
|
|
139
|
+
});
|
|
140
|
+
`,
|
|
141
|
+
'README.md': (name) => `# ${name} Example
|
|
142
|
+
|
|
143
|
+
ObjectStack example application: ${name}
|
|
144
|
+
|
|
145
|
+
## Quick Start
|
|
146
|
+
|
|
147
|
+
\`\`\`bash
|
|
148
|
+
# Build the configuration
|
|
149
|
+
pnpm build
|
|
150
|
+
|
|
151
|
+
# Run in development mode
|
|
152
|
+
pnpm dev
|
|
153
|
+
\`\`\`
|
|
154
|
+
|
|
155
|
+
## Structure
|
|
156
|
+
|
|
157
|
+
- \`objectstack.config.ts\` - Main configuration file
|
|
158
|
+
- \`dist/objectstack.json\` - Compiled artifact
|
|
159
|
+
|
|
160
|
+
## Learn More
|
|
161
|
+
|
|
162
|
+
- [ObjectStack Documentation](../../content/docs)
|
|
163
|
+
- [Examples](../)
|
|
164
|
+
`,
|
|
165
|
+
'tsconfig.json': () => ({
|
|
166
|
+
extends: '../../tsconfig.json',
|
|
167
|
+
compilerOptions: {
|
|
168
|
+
outDir: 'dist',
|
|
169
|
+
rootDir: '.',
|
|
170
|
+
},
|
|
171
|
+
include: ['*.ts', 'src/**/*'],
|
|
172
|
+
}),
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
function toCamelCase(str) {
|
|
177
|
+
return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
|
|
178
|
+
}
|
|
179
|
+
export default class Create extends Command {
|
|
180
|
+
static description = 'Create a new package, plugin, or example from template';
|
|
181
|
+
static args = {
|
|
182
|
+
type: Args.string({ description: 'Type of project to create (plugin, example)', required: true }),
|
|
183
|
+
name: Args.string({ description: 'Name of the project', required: false }),
|
|
184
|
+
};
|
|
185
|
+
static flags = {
|
|
186
|
+
dir: Flags.string({ char: 'd', description: 'Target directory' }),
|
|
187
|
+
};
|
|
188
|
+
async run() {
|
|
189
|
+
const { args, flags } = await this.parse(Create);
|
|
190
|
+
console.log(chalk.bold(`\nš¦ ObjectStack Project Creator`));
|
|
191
|
+
console.log(chalk.dim(`-------------------------------`));
|
|
192
|
+
if (!templates[args.type]) {
|
|
193
|
+
console.error(chalk.red(`\nā Unknown type: ${args.type}`));
|
|
194
|
+
console.log(chalk.dim('Available types: plugin, example'));
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
if (!args.name) {
|
|
198
|
+
console.error(chalk.red('\nā Project name is required'));
|
|
199
|
+
console.log(chalk.dim(`Usage: objectstack create ${args.type} <name>`));
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
const template = templates[args.type];
|
|
203
|
+
const cwd = process.cwd();
|
|
204
|
+
// Determine target directory
|
|
205
|
+
let targetDir;
|
|
206
|
+
if (flags.dir) {
|
|
207
|
+
targetDir = path.resolve(cwd, flags.dir);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const baseDir = args.type === 'plugin' ? 'packages/plugins' : 'examples';
|
|
211
|
+
const projectName = args.type === 'plugin' ? `plugin-${args.name}` : args.name;
|
|
212
|
+
targetDir = path.join(cwd, baseDir, projectName);
|
|
213
|
+
}
|
|
214
|
+
// Check if directory already exists
|
|
215
|
+
if (fs.existsSync(targetDir)) {
|
|
216
|
+
console.error(chalk.red(`\nā Directory already exists: ${targetDir}`));
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
console.log(`š Creating ${args.type}: ${chalk.blue(args.name)}`);
|
|
220
|
+
console.log(`š Location: ${chalk.dim(targetDir)}`);
|
|
221
|
+
console.log('');
|
|
222
|
+
try {
|
|
223
|
+
// Create directory
|
|
224
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
225
|
+
// Create files from template
|
|
226
|
+
for (const [filePath, contentFn] of Object.entries(template.files)) {
|
|
227
|
+
const fullPath = path.join(targetDir, filePath);
|
|
228
|
+
const dir = path.dirname(fullPath);
|
|
229
|
+
if (!fs.existsSync(dir)) {
|
|
230
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
231
|
+
}
|
|
232
|
+
const content = contentFn(args.name);
|
|
233
|
+
const fileContent = typeof content === 'string'
|
|
234
|
+
? content
|
|
235
|
+
: JSON.stringify(content, null, 2);
|
|
236
|
+
fs.writeFileSync(fullPath, fileContent);
|
|
237
|
+
console.log(chalk.green(`ā Created ${filePath}`));
|
|
238
|
+
}
|
|
239
|
+
console.log('');
|
|
240
|
+
console.log(chalk.green('ā
Project created successfully!'));
|
|
241
|
+
console.log('');
|
|
242
|
+
console.log(chalk.bold('Next steps:'));
|
|
243
|
+
console.log(chalk.dim(` cd ${path.relative(cwd, targetDir)}`));
|
|
244
|
+
console.log(chalk.dim(' pnpm install'));
|
|
245
|
+
console.log(chalk.dim(' pnpm build'));
|
|
246
|
+
console.log('');
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
console.error(chalk.red('\nā Failed to create project:'));
|
|
250
|
+
console.error(error.message || error);
|
|
251
|
+
// Clean up on error
|
|
252
|
+
if (fs.existsSync(targetDir)) {
|
|
253
|
+
fs.rmSync(targetDir, { recursive: true });
|
|
254
|
+
}
|
|
255
|
+
process.exit(1);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|