@objectstack/cli 6.5.0 → 6.5.2

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.
@@ -1,12 +1,33 @@
1
1
  import { Command } from '@oclif/core';
2
+ export declare function getCliVersion(): string;
3
+ /**
4
+ * Convert an npm package name into a valid ObjectStack namespace identifier.
5
+ *
6
+ * Namespace rules (from `ManifestSchema` in `@objectstack/spec`):
7
+ * - 2-20 chars, `^[a-z][a-z0-9_]{1,19}$`
8
+ * - Reserved: `base`, `system`, `sys`
9
+ *
10
+ * npm names allow hyphens/dots/scopes (e.g. `@acme/my-app`); identifiers don't.
11
+ * We strip the scope, replace separators with `_`, lowercase, prefix a leading
12
+ * digit, truncate to 20, and pad short names so the result always satisfies
13
+ * the regex. Reserved names get a `_app` suffix.
14
+ */
15
+ export declare function sanitizeNamespace(name: string): string;
2
16
  export declare const TEMPLATES: Record<string, {
3
17
  description: string;
4
18
  dependencies: Record<string, string>;
5
19
  devDependencies: Record<string, string>;
6
20
  scripts: Record<string, string>;
7
- configContent: (name: string) => string;
8
- srcFiles: Record<string, (name: string) => string>;
21
+ configContent: (name: string, namespace: string) => string;
22
+ srcFiles: Record<string, (name: string, namespace: string) => string>;
9
23
  }>;
24
+ /**
25
+ * Detect the package manager that invoked this CLI by inspecting
26
+ * `npm_config_user_agent` (set by every modern PM). Falls back to `npm`,
27
+ * which is universally available and the safest default for `npx`-style
28
+ * invocations.
29
+ */
30
+ export declare function detectPackageManager(env?: NodeJS.ProcessEnv): 'npm' | 'pnpm' | 'yarn' | 'bun';
10
31
  export default class Init extends Command {
11
32
  static id: string;
12
33
  static description: string;
@@ -16,6 +37,7 @@ export default class Init extends Command {
16
37
  static flags: {
17
38
  template: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
39
  install: import("@oclif/core/interfaces").BooleanFlag<boolean>;
40
+ 'package-manager': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
41
  };
20
42
  run(): Promise<void>;
21
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAMnD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CACpD,CA4JA,CAAC;AAcF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,EAAE,SAAU;IAE5B,OAAgB,WAAW,SAAmE;IAE9F,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+H3B"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAiBnD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CACvE,CA0KA,CAAC;AAcF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAM1G;AAmBD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,EAAE,SAAU;IAE5B,OAAgB,WAAW,SAA0C;IAErE,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;MAQnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoO3B"}
@@ -3,19 +3,81 @@ import { Args, Command, Flags } from '@oclif/core';
3
3
  import chalk from 'chalk';
4
4
  import fs from 'fs';
5
5
  import path from 'path';
6
+ import { fileURLToPath } from 'url';
6
7
  import { printHeader, printSuccess, printError, printStep, printKV, printInfo } from '../utils/format.js';
8
+ // ─── Version resolution ──────────────────────────────────────────────
9
+ //
10
+ // The CLI is published to npm together with every other `@objectstack/*`
11
+ // package in this monorepo, so they all share the same release version.
12
+ // We pin scaffolded dependencies to whatever version of the CLI is
13
+ // running, which guarantees the generated `package.json` resolves
14
+ // outside the workspace (and pins a tested, compatible matrix).
15
+ let cachedCliVersion = null;
16
+ export function getCliVersion() {
17
+ if (cachedCliVersion)
18
+ return cachedCliVersion;
19
+ try {
20
+ const here = path.dirname(fileURLToPath(import.meta.url));
21
+ // dist/commands/init.js → ../../package.json (built layout)
22
+ // src/commands/init.ts → ../../package.json (source layout, used by tests)
23
+ const pkgPath = path.resolve(here, '..', '..', 'package.json');
24
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
25
+ cachedCliVersion = String(pkg.version || '0.0.0');
26
+ }
27
+ catch {
28
+ cachedCliVersion = '0.0.0';
29
+ }
30
+ return cachedCliVersion;
31
+ }
32
+ /** Caret-pinned to the CLI's own version (e.g. `^6.5.0`). */
33
+ function pkgVersion() {
34
+ return `^${getCliVersion()}`;
35
+ }
36
+ /**
37
+ * Convert an npm package name into a valid ObjectStack namespace identifier.
38
+ *
39
+ * Namespace rules (from `ManifestSchema` in `@objectstack/spec`):
40
+ * - 2-20 chars, `^[a-z][a-z0-9_]{1,19}$`
41
+ * - Reserved: `base`, `system`, `sys`
42
+ *
43
+ * npm names allow hyphens/dots/scopes (e.g. `@acme/my-app`); identifiers don't.
44
+ * We strip the scope, replace separators with `_`, lowercase, prefix a leading
45
+ * digit, truncate to 20, and pad short names so the result always satisfies
46
+ * the regex. Reserved names get a `_app` suffix.
47
+ */
48
+ export function sanitizeNamespace(name) {
49
+ let s = name.replace(/^@[^/]+\//, ''); // drop npm scope
50
+ s = s.toLowerCase().replace(/[^a-z0-9]+/g, '_'); // separators → _
51
+ s = s.replace(/^_+|_+$/g, ''); // trim underscores
52
+ if (!s)
53
+ s = 'app';
54
+ if (/^[0-9]/.test(s))
55
+ s = 'a' + s; // must start with a letter
56
+ if (s.length < 2)
57
+ s = (s + '_app').slice(0, 20);
58
+ if (s.length > 20)
59
+ s = s.slice(0, 20).replace(/_+$/, '');
60
+ if (['base', 'system', 'sys'].includes(s))
61
+ s = (s + '_app').slice(0, 20);
62
+ return s;
63
+ }
7
64
  export const TEMPLATES = {
8
65
  app: {
9
66
  description: 'Full application with objects, views, and actions',
10
- dependencies: {
11
- '@objectstack/spec': 'workspace:*',
12
- '@objectstack/runtime': 'workspace:^',
13
- '@objectstack/objectql': 'workspace:^',
14
- '@objectstack/driver-memory': 'workspace:^',
67
+ get dependencies() {
68
+ const v = pkgVersion();
69
+ return {
70
+ '@objectstack/spec': v,
71
+ '@objectstack/runtime': v,
72
+ '@objectstack/objectql': v,
73
+ '@objectstack/driver-memory': v,
74
+ };
15
75
  },
16
- devDependencies: {
17
- '@objectstack/cli': 'workspace:*',
18
- 'typescript': '^5.3.0',
76
+ get devDependencies() {
77
+ return {
78
+ '@objectstack/cli': pkgVersion(),
79
+ 'typescript': '^5.3.0',
80
+ };
19
81
  },
20
82
  scripts: {
21
83
  dev: 'objectstack dev',
@@ -24,13 +86,13 @@ export const TEMPLATES = {
24
86
  validate: 'objectstack validate',
25
87
  typecheck: 'tsc --noEmit',
26
88
  },
27
- configContent: (name) => `import { defineStack } from '@objectstack/spec';
89
+ configContent: (name, namespace) => `import { defineStack } from '@objectstack/spec';
28
90
  import * as objects from './src/objects';
29
91
 
30
92
  export default defineStack({
31
93
  manifest: {
32
- id: 'com.example.${name}',
33
- namespace: '${name}',
94
+ id: 'com.example.${namespace}',
95
+ namespace: '${namespace}',
34
96
  version: '0.1.0',
35
97
  type: 'app',
36
98
  name: '${toTitleCase(name)}',
@@ -41,13 +103,13 @@ export default defineStack({
41
103
  });
42
104
  `,
43
105
  srcFiles: {
44
- 'src/objects/index.ts': (name) => `export { default as ${toCamelCase(name)} } from './${name}';
106
+ 'src/objects/index.ts': (_name, namespace) => `export { default as ${toCamelCase(namespace)}Item } from './${namespace}_item';
45
107
  `,
46
- 'src/objects/__name__.ts': (name) => `import * as Data from '@objectstack/spec/data';
108
+ 'src/objects/__name___item.ts': (_name, namespace) => `import * as Data from '@objectstack/spec/data';
47
109
 
48
- const ${toCamelCase(name)}: Data.Object = {
49
- name: '${name}',
50
- label: '${toTitleCase(name)}',
110
+ const ${toCamelCase(namespace)}Item: Data.Object = {
111
+ name: '${namespace}_item',
112
+ label: '${toTitleCase(namespace)} Item',
51
113
  ownership: 'own',
52
114
  fields: {
53
115
  name: {
@@ -72,18 +134,23 @@ const ${toCamelCase(name)}: Data.Object = {
72
134
  },
73
135
  };
74
136
 
75
- export default ${toCamelCase(name)};
137
+ export default ${toCamelCase(namespace)}Item;
76
138
  `,
77
139
  },
78
140
  },
79
141
  plugin: {
80
142
  description: 'Reusable plugin with objects and extensions',
81
- dependencies: {
82
- '@objectstack/spec': 'workspace:*',
143
+ get dependencies() {
144
+ return {
145
+ '@objectstack/spec': pkgVersion(),
146
+ };
83
147
  },
84
- devDependencies: {
85
- 'typescript': '^5.3.0',
86
- 'vitest': '^4.0.18',
148
+ get devDependencies() {
149
+ return {
150
+ '@objectstack/cli': pkgVersion(),
151
+ 'typescript': '^5.3.0',
152
+ 'vitest': '^4.0.18',
153
+ };
87
154
  },
88
155
  scripts: {
89
156
  build: 'objectstack compile',
@@ -91,13 +158,13 @@ export default ${toCamelCase(name)};
91
158
  test: 'vitest run',
92
159
  typecheck: 'tsc --noEmit',
93
160
  },
94
- configContent: (name) => `import { defineStack } from '@objectstack/spec';
161
+ configContent: (name, namespace) => `import { defineStack } from '@objectstack/spec';
95
162
  import * as objects from './src/objects';
96
163
 
97
164
  export default defineStack({
98
165
  manifest: {
99
166
  id: 'com.objectstack.plugin-${name}',
100
- namespace: 'plugin_${name}',
167
+ namespace: '${namespace}',
101
168
  version: '0.1.0',
102
169
  type: 'plugin',
103
170
  name: '${toTitleCase(name)} Plugin',
@@ -108,13 +175,13 @@ export default defineStack({
108
175
  });
109
176
  `,
110
177
  srcFiles: {
111
- 'src/objects/index.ts': (name) => `export { default as ${toCamelCase(name)} } from './${name}';
178
+ 'src/objects/index.ts': (_name, namespace) => `export { default as ${toCamelCase(namespace)}Item } from './${namespace}_item';
112
179
  `,
113
- 'src/objects/__name__.ts': (name) => `import * as Data from '@objectstack/spec/data';
180
+ 'src/objects/__name___item.ts': (_name, namespace) => `import * as Data from '@objectstack/spec/data';
114
181
 
115
- const ${toCamelCase(name)}: Data.Object = {
116
- name: '${name}',
117
- label: '${toTitleCase(name)}',
182
+ const ${toCamelCase(namespace)}Item: Data.Object = {
183
+ name: '${namespace}_item',
184
+ label: '${toTitleCase(namespace)} Item',
118
185
  ownership: 'own',
119
186
  fields: {
120
187
  name: {
@@ -125,30 +192,34 @@ const ${toCamelCase(name)}: Data.Object = {
125
192
  },
126
193
  };
127
194
 
128
- export default ${toCamelCase(name)};
195
+ export default ${toCamelCase(namespace)}Item;
129
196
  `,
130
197
  },
131
198
  },
132
199
  empty: {
133
200
  description: 'Minimal project with just a config file',
134
- dependencies: {
135
- '@objectstack/spec': 'workspace:*',
201
+ get dependencies() {
202
+ return {
203
+ '@objectstack/spec': pkgVersion(),
204
+ };
136
205
  },
137
- devDependencies: {
138
- '@objectstack/cli': 'workspace:*',
139
- 'typescript': '^5.3.0',
206
+ get devDependencies() {
207
+ return {
208
+ '@objectstack/cli': pkgVersion(),
209
+ 'typescript': '^5.3.0',
210
+ };
140
211
  },
141
212
  scripts: {
142
213
  build: 'objectstack compile',
143
214
  validate: 'objectstack validate',
144
215
  typecheck: 'tsc --noEmit',
145
216
  },
146
- configContent: (name) => `import { defineStack } from '@objectstack/spec';
217
+ configContent: (name, namespace) => `import { defineStack } from '@objectstack/spec';
147
218
 
148
219
  export default defineStack({
149
220
  manifest: {
150
- id: 'com.example.${name}',
151
- namespace: '${name}',
221
+ id: 'com.example.${namespace}',
222
+ namespace: '${namespace}',
152
223
  version: '0.1.0',
153
224
  type: 'app',
154
225
  name: '${toTitleCase(name)}',
@@ -168,41 +239,134 @@ function toTitleCase(str) {
168
239
  function printWarning(msg) {
169
240
  console.log(chalk.yellow(` ⚠ ${msg}`));
170
241
  }
242
+ /**
243
+ * Detect the package manager that invoked this CLI by inspecting
244
+ * `npm_config_user_agent` (set by every modern PM). Falls back to `npm`,
245
+ * which is universally available and the safest default for `npx`-style
246
+ * invocations.
247
+ */
248
+ export function detectPackageManager(env = process.env) {
249
+ const ua = env.npm_config_user_agent || '';
250
+ if (ua.startsWith('pnpm'))
251
+ return 'pnpm';
252
+ if (ua.startsWith('yarn'))
253
+ return 'yarn';
254
+ if (ua.startsWith('bun'))
255
+ return 'bun';
256
+ return 'npm';
257
+ }
258
+ /**
259
+ * Validate that `name` is a usable npm package name AND a safe directory
260
+ * segment. Mirrors the subset of rules used by `npm init`/`create-vite`.
261
+ */
262
+ function validateProjectName(name) {
263
+ if (!name)
264
+ return 'Project name is required';
265
+ if (name.length > 214)
266
+ return 'Project name must be ≤ 214 characters';
267
+ if (/[A-Z]/.test(name))
268
+ return 'Project name must be lowercase';
269
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(name)) {
270
+ return 'Project name must start with a lowercase letter or digit and contain only [a-z0-9._-]';
271
+ }
272
+ if (name.includes('/') || name.includes('\\') || name === '.' || name === '..') {
273
+ return 'Project name must not contain path separators';
274
+ }
275
+ return null;
276
+ }
171
277
  export default class Init extends Command {
172
278
  static id = 'init';
173
- static description = 'Initialize a new ObjectStack project in the current directory';
279
+ static description = 'Initialize a new ObjectStack project';
174
280
  static args = {
175
- name: Args.string({ description: 'Project name (defaults to directory name)', required: false }),
281
+ name: Args.string({
282
+ description: 'Project name. When provided, a new directory with this name is created; otherwise the current directory is used.',
283
+ required: false,
284
+ }),
176
285
  };
177
286
  static flags = {
178
287
  template: Flags.string({ char: 't', description: 'Template: app, plugin, empty', default: 'app' }),
179
288
  install: Flags.boolean({ description: 'Install dependencies', default: true, allowNo: true }),
289
+ 'package-manager': Flags.string({
290
+ char: 'p',
291
+ description: 'Package manager to use for install (auto-detected from npm_config_user_agent)',
292
+ options: ['npm', 'pnpm', 'yarn', 'bun'],
293
+ }),
180
294
  };
181
295
  async run() {
182
296
  const { args, flags } = await this.parse(Init);
183
297
  printHeader('Init');
184
- const cwd = process.cwd();
185
- const projectName = args.name || path.basename(cwd);
298
+ const startCwd = process.cwd();
186
299
  const template = TEMPLATES[flags.template];
187
300
  if (!template) {
188
301
  printError(`Unknown template: ${flags.template}`);
189
302
  console.log(chalk.dim(` Available: ${Object.keys(TEMPLATES).join(', ')}`));
190
303
  this.error(`Unknown template: ${flags.template}`);
191
304
  }
305
+ // Resolve target directory + project name.
306
+ //
307
+ // If a name is supplied, scaffold into ./<name>/ (created if missing).
308
+ // This matches `npm create`, `pnpm create`, `vite`, etc. — the user's
309
+ // confusion in the bug report came from `init my-app` overwriting the
310
+ // current directory while the printed summary said "Project: my-app".
311
+ //
312
+ // If no name is supplied, scaffold into the current directory and use
313
+ // its basename as the project name.
314
+ let targetDir;
315
+ let projectName;
316
+ if (args.name) {
317
+ const nameError = validateProjectName(args.name);
318
+ if (nameError) {
319
+ printError(nameError);
320
+ this.error(nameError);
321
+ }
322
+ projectName = args.name;
323
+ targetDir = path.resolve(startCwd, args.name);
324
+ if (fs.existsSync(targetDir)) {
325
+ const entries = fs.readdirSync(targetDir).filter((e) => e !== '.git');
326
+ if (entries.length > 0) {
327
+ const msg = `Target directory ${targetDir} is not empty`;
328
+ printError(msg);
329
+ console.log(chalk.dim(' Choose a different name or remove the existing directory first.'));
330
+ this.error(msg);
331
+ }
332
+ }
333
+ else {
334
+ fs.mkdirSync(targetDir, { recursive: true });
335
+ }
336
+ }
337
+ else {
338
+ targetDir = startCwd;
339
+ projectName = path.basename(startCwd);
340
+ const nameError = validateProjectName(projectName);
341
+ if (nameError) {
342
+ printError(`Current directory name "${projectName}" is not a valid project name. ${nameError}`);
343
+ console.log(chalk.dim(' Re-run with an explicit name: `objectstack init my-app`'));
344
+ this.error(nameError);
345
+ }
346
+ }
192
347
  // Check for existing config
193
- if (fs.existsSync(path.join(cwd, 'objectstack.config.ts'))) {
194
- printError('objectstack.config.ts already exists in this directory');
348
+ if (fs.existsSync(path.join(targetDir, 'objectstack.config.ts'))) {
349
+ printError(`objectstack.config.ts already exists in ${targetDir}`);
195
350
  console.log(chalk.dim(' Use `objectstack generate` to add metadata to an existing project'));
196
- this.error('objectstack.config.ts already exists in this directory');
351
+ this.error('objectstack.config.ts already exists');
197
352
  }
353
+ // Convert the npm-name (which allows hyphens, dots, scopes) into a
354
+ // valid ObjectStack namespace identifier. Threaded into every template
355
+ // function so object names use `${namespace}_${shortName}` form and
356
+ // satisfy `defineStack()` validation.
357
+ const namespace = sanitizeNamespace(projectName);
198
358
  printKV('Project', projectName);
359
+ printKV('Namespace', namespace);
199
360
  printKV('Template', `${flags.template} — ${template.description}`);
200
- printKV('Directory', cwd);
361
+ printKV('Directory', targetDir);
201
362
  console.log('');
202
363
  const createdFiles = [];
364
+ let installSucceeded = false;
365
+ let installAttempted = false;
366
+ let chosenPm = 'npm';
203
367
  try {
204
368
  // 1. Create package.json if missing
205
- const pkgPath = path.join(cwd, 'package.json');
369
+ const pkgPath = path.join(targetDir, 'package.json');
206
370
  if (!fs.existsSync(pkgPath)) {
207
371
  const pkg = {
208
372
  name: projectName,
@@ -220,11 +384,11 @@ export default class Init extends Command {
220
384
  printInfo('package.json already exists, skipping');
221
385
  }
222
386
  // 2. Create objectstack.config.ts
223
- const configContent = template.configContent(projectName);
224
- fs.writeFileSync(path.join(cwd, 'objectstack.config.ts'), configContent);
387
+ const configContent = template.configContent(projectName, namespace);
388
+ fs.writeFileSync(path.join(targetDir, 'objectstack.config.ts'), configContent);
225
389
  createdFiles.push('objectstack.config.ts');
226
390
  // 3. Create tsconfig.json if missing
227
- const tsconfigPath = path.join(cwd, 'tsconfig.json');
391
+ const tsconfigPath = path.join(targetDir, 'tsconfig.json');
228
392
  if (!fs.existsSync(tsconfigPath)) {
229
393
  const tsconfig = {
230
394
  compilerOptions: {
@@ -244,19 +408,22 @@ export default class Init extends Command {
244
408
  fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2) + '\n');
245
409
  createdFiles.push('tsconfig.json');
246
410
  }
247
- // 4. Create src files
411
+ // 4. Create src files. File paths use `__name__` as a placeholder for
412
+ // the namespace (NOT the npm name) so generated identifiers stay snake
413
+ // _case even when the project name contains hyphens (e.g. `my-app` →
414
+ // namespace `my_app` → `src/objects/my_app_item.ts`).
248
415
  for (const [filePath, contentFn] of Object.entries(template.srcFiles)) {
249
- const resolvedPath = filePath.replace('__name__', projectName);
250
- const fullPath = path.join(cwd, resolvedPath);
416
+ const resolvedPath = filePath.replace(/__name__/g, namespace);
417
+ const fullPath = path.join(targetDir, resolvedPath);
251
418
  const dir = path.dirname(fullPath);
252
419
  if (!fs.existsSync(dir)) {
253
420
  fs.mkdirSync(dir, { recursive: true });
254
421
  }
255
- fs.writeFileSync(fullPath, contentFn(projectName));
422
+ fs.writeFileSync(fullPath, contentFn(projectName, namespace));
256
423
  createdFiles.push(resolvedPath);
257
424
  }
258
425
  // 5. Create .gitignore if missing
259
- const gitignorePath = path.join(cwd, '.gitignore');
426
+ const gitignorePath = path.join(targetDir, '.gitignore');
260
427
  if (!fs.existsSync(gitignorePath)) {
261
428
  fs.writeFileSync(gitignorePath, `node_modules/\ndist/\n*.tsbuildinfo\n`);
262
429
  createdFiles.push('.gitignore');
@@ -269,22 +436,70 @@ export default class Init extends Command {
269
436
  console.log('');
270
437
  // Install dependencies
271
438
  if (flags.install) {
272
- printStep('Installing dependencies...');
439
+ chosenPm = flags['package-manager'] ?? detectPackageManager();
440
+ printStep(`Installing dependencies with ${chosenPm}...`);
441
+ installAttempted = true;
273
442
  const { execSync } = await import('child_process');
274
443
  try {
275
- execSync('pnpm install', { stdio: 'inherit', cwd });
444
+ execSync(`${chosenPm} install`, { stdio: 'inherit', cwd: targetDir });
445
+ installSucceeded = true;
276
446
  }
277
447
  catch {
278
- printWarning('Dependency installation failed. Run `pnpm install` manually.');
448
+ printWarning(`Dependency installation with ${chosenPm} failed. Run \`${chosenPm} install\` manually in ${targetDir}.`);
279
449
  }
280
450
  }
281
- printSuccess('Project initialized!');
282
- console.log('');
283
- console.log(chalk.bold(' Next steps:'));
284
- console.log(chalk.dim(' objectstack validate # Check configuration'));
285
- console.log(chalk.dim(' objectstack dev # Start development server'));
286
- console.log(chalk.dim(' objectstack generate # Add objects, views, etc.'));
287
- console.log('');
451
+ // Self-test the scaffold so we catch template regressions (e.g. an
452
+ // invalid namespace or object name) before the user discovers them by
453
+ // running `objectstack dev`. Only runs when deps are present —
454
+ // `defineStack()` validation lives in `@objectstack/spec`.
455
+ if (installSucceeded) {
456
+ printStep('Validating scaffold...');
457
+ try {
458
+ const { bundleRequire } = await import('bundle-require');
459
+ const { mod } = await bundleRequire({
460
+ filepath: path.join(targetDir, 'objectstack.config.ts'),
461
+ cwd: targetDir,
462
+ });
463
+ const stack = mod.default ?? mod;
464
+ if (!stack?.manifest?.namespace) {
465
+ throw new Error('Rendered config has no manifest.namespace');
466
+ }
467
+ printSuccess(`Scaffold validated (namespace: ${stack.manifest.namespace})`);
468
+ }
469
+ catch (err) {
470
+ printError(`Scaffold validation failed: ${err.message || err}`);
471
+ console.log(chalk.dim(' This is a CLI bug — please report it at https://github.com/objectstack-ai/framework/issues'));
472
+ this.error('Scaffold validation failed');
473
+ }
474
+ }
475
+ if (!installAttempted || installSucceeded) {
476
+ printSuccess('Project initialized!');
477
+ console.log('');
478
+ console.log(chalk.bold(' Next steps:'));
479
+ if (targetDir !== startCwd) {
480
+ console.log(chalk.dim(` cd ${path.relative(startCwd, targetDir) || '.'}`));
481
+ }
482
+ const runCmd = chosenPm === 'npm' ? 'npx objectstack' : `${chosenPm} exec objectstack`;
483
+ if (!installAttempted) {
484
+ console.log(chalk.dim(` ${chosenPm} install # Install dependencies`));
485
+ }
486
+ console.log(chalk.dim(` ${runCmd} validate # Check configuration`));
487
+ console.log(chalk.dim(` ${runCmd} dev # Start development server`));
488
+ console.log(chalk.dim(` ${runCmd} generate # Add objects, views, etc.`));
489
+ console.log('');
490
+ }
491
+ else {
492
+ // Install failed — surface clear remediation instead of pretending success.
493
+ printError('Project scaffolded, but dependency installation failed.');
494
+ console.log('');
495
+ console.log(chalk.bold(' To finish setup:'));
496
+ if (targetDir !== startCwd) {
497
+ console.log(chalk.dim(` cd ${path.relative(startCwd, targetDir) || '.'}`));
498
+ }
499
+ console.log(chalk.dim(` ${chosenPm} install`));
500
+ console.log('');
501
+ this.error('Dependency installation failed');
502
+ }
288
503
  }
289
504
  catch (error) {
290
505
  printError(error.message || String(error));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/cli",
3
- "version": "6.5.0",
3
+ "version": "6.5.2",
4
4
  "description": "Command Line Interface for ObjectStack Protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,8 +34,8 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@ai-sdk/gateway": "^3.0.120",
37
- "@object-ui/console": "^6.0.1",
38
- "@object-ui/studio": "^6.0.1",
37
+ "@object-ui/console": "^6.0.4",
38
+ "@object-ui/studio": "^6.0.4",
39
39
  "@oclif/core": "^4.11.4",
40
40
  "bundle-require": "^5.1.0",
41
41
  "chalk": "^5.6.2",
@@ -46,42 +46,42 @@
46
46
  "tsx": "^4.22.3",
47
47
  "yaml": "^2.9.0",
48
48
  "zod": "^4.4.3",
49
- "@objectstack/client": "6.5.0",
50
- "@objectstack/core": "6.5.0",
51
- "@objectstack/driver-memory": "^6.5.0",
52
- "@objectstack/driver-mongodb": "^6.5.0",
53
- "@objectstack/driver-sql": "^6.5.0",
54
- "@objectstack/driver-sqlite-wasm": "^6.5.0",
55
- "@objectstack/driver-turso": "^6.5.0",
56
- "@objectstack/objectql": "^6.5.0",
57
- "@objectstack/observability": "^6.5.0",
58
- "@objectstack/plugin-approvals": "6.5.0",
59
- "@objectstack/plugin-audit": "6.5.0",
60
- "@objectstack/plugin-auth": "6.5.0",
61
- "@objectstack/plugin-email": "6.5.0",
62
- "@objectstack/plugin-hono-server": "6.5.0",
63
- "@objectstack/plugin-mcp-server": "6.5.0",
64
- "@objectstack/plugin-reports": "6.5.0",
65
- "@objectstack/plugin-security": "6.5.0",
66
- "@objectstack/plugin-sharing": "6.5.0",
67
- "@objectstack/plugin-webhooks": "6.5.0",
68
- "@objectstack/rest": "6.5.0",
69
- "@objectstack/runtime": "^6.5.0",
70
- "@objectstack/service-ai": "6.5.0",
71
- "@objectstack/service-analytics": "6.5.0",
72
- "@objectstack/service-automation": "6.5.0",
73
- "@objectstack/service-cache": "6.5.0",
74
- "@objectstack/service-feed": "6.5.0",
75
- "@objectstack/service-job": "6.5.0",
76
- "@objectstack/service-package": "6.5.0",
77
- "@objectstack/service-queue": "6.5.0",
78
- "@objectstack/service-realtime": "6.5.0",
79
- "@objectstack/service-settings": "6.5.0",
80
- "@objectstack/service-storage": "6.5.0",
81
- "@objectstack/spec": "6.5.0"
49
+ "@objectstack/client": "6.5.1",
50
+ "@objectstack/driver-memory": "^6.5.1",
51
+ "@objectstack/driver-mongodb": "^6.5.1",
52
+ "@objectstack/driver-sql": "^6.5.1",
53
+ "@objectstack/core": "6.5.1",
54
+ "@objectstack/driver-sqlite-wasm": "^6.5.1",
55
+ "@objectstack/observability": "^6.5.1",
56
+ "@objectstack/driver-turso": "^6.5.1",
57
+ "@objectstack/objectql": "^6.5.1",
58
+ "@objectstack/plugin-approvals": "6.5.1",
59
+ "@objectstack/plugin-audit": "6.5.1",
60
+ "@objectstack/plugin-auth": "6.5.1",
61
+ "@objectstack/plugin-email": "6.5.1",
62
+ "@objectstack/plugin-hono-server": "6.5.1",
63
+ "@objectstack/plugin-mcp-server": "6.5.1",
64
+ "@objectstack/plugin-security": "6.5.1",
65
+ "@objectstack/plugin-sharing": "6.5.1",
66
+ "@objectstack/plugin-reports": "6.5.1",
67
+ "@objectstack/runtime": "^6.5.1",
68
+ "@objectstack/plugin-webhooks": "6.5.1",
69
+ "@objectstack/service-ai": "6.5.1",
70
+ "@objectstack/rest": "6.5.1",
71
+ "@objectstack/service-analytics": "6.5.1",
72
+ "@objectstack/service-automation": "6.5.1",
73
+ "@objectstack/service-cache": "6.5.1",
74
+ "@objectstack/service-feed": "6.5.1",
75
+ "@objectstack/service-job": "6.5.1",
76
+ "@objectstack/service-package": "6.5.1",
77
+ "@objectstack/service-queue": "6.5.1",
78
+ "@objectstack/service-realtime": "6.5.1",
79
+ "@objectstack/service-settings": "6.5.1",
80
+ "@objectstack/service-storage": "6.5.1",
81
+ "@objectstack/spec": "6.5.1"
82
82
  },
83
83
  "peerDependencies": {
84
- "@objectstack/core": "^6.5.0"
84
+ "@objectstack/core": "^6.5.1"
85
85
  },
86
86
  "devDependencies": {
87
87
  "@oclif/plugin-help": "^6.2.49",