@prodara/cli 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -19,6 +19,9 @@ This ensures you always run the compiler version pinned in your project's `packa
19
19
  ## Usage
20
20
 
21
21
  ```bash
22
+ # Create a new project — automatically installs @prodara/compiler
23
+ prodara init my-project
24
+
22
25
  # In a project with @prodara/compiler installed locally
23
26
  prodara build
24
27
  prodara validate
@@ -28,6 +31,16 @@ prodara test
28
31
  prodara doctor
29
32
  ```
30
33
 
34
+ ### Automatic Setup
35
+
36
+ `prodara init` handles project setup automatically:
37
+
38
+ 1. Runs `npm init -y` if no `package.json` exists
39
+ 2. Installs `@prodara/compiler` as a dev dependency
40
+ 3. Scaffolds the `.prd` project structure
41
+
42
+ Use `--skip-install` to skip the npm init and compiler installation steps.
43
+
31
44
  If no local compiler is found, the CLI prints installation instructions.
32
45
 
33
46
  ## License
package/dist/bin.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ export declare function main(): void;
3
3
  //# sourceMappingURL=bin.d.ts.map
package/dist/bin.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAsDA,wBAAgB,IAAI,IAAI,IAAI,CA+E3B"}
package/dist/bin.js CHANGED
@@ -14,9 +14,11 @@ import { execFileSync } from 'node:child_process';
14
14
  import { readFileSync, existsSync } from 'node:fs';
15
15
  import { resolve, dirname } from 'node:path';
16
16
  import { fileURLToPath } from 'node:url';
17
+ import { createRequire } from 'node:module';
17
18
  import { resolveLocal, checkVersionCompatibility } from './resolve.js';
18
19
  const __filename = fileURLToPath(import.meta.url);
19
20
  const __dirname = dirname(__filename);
21
+ const require = createRequire(import.meta.url);
20
22
  function getWrapperVersion() {
21
23
  const pkgPath = resolve(__dirname, '..', 'package.json');
22
24
  if (existsSync(pkgPath)) {
@@ -31,16 +33,58 @@ function getWrapperVersion() {
31
33
  }
32
34
  return '0.0.0';
33
35
  }
34
- function main() {
36
+ /**
37
+ * Resolve the CLI entry from the compiler bundled inside @prodara/cli's own
38
+ * node_modules. Uses createRequire for maximum Node.js compatibility.
39
+ */
40
+ function resolveBundledCompiler() {
41
+ try {
42
+ // Resolve the compiler package.json first, then derive the CLI entry
43
+ const pkgPath = require.resolve('@prodara/compiler/package.json');
44
+ const entry = resolve(dirname(pkgPath), 'dist', 'cli', 'main.js');
45
+ if (existsSync(entry))
46
+ return entry;
47
+ return null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ export function main() {
35
54
  const cwd = process.cwd();
36
55
  const local = resolveLocal(cwd);
37
56
  const wrapperVersion = getWrapperVersion();
57
+ const args = process.argv.slice(2);
38
58
  if (!local) {
59
+ // Special-case: `prodara init` bootstraps a project even without a local
60
+ // compiler by delegating to the compiler bundled inside @prodara/cli's
61
+ // own node_modules (it's a production dependency).
62
+ if (args[0] === 'init') {
63
+ const bundledEntry = resolveBundledCompiler();
64
+ if (bundledEntry) {
65
+ try {
66
+ execFileSync(process.execPath, [bundledEntry, ...args], {
67
+ cwd,
68
+ stdio: 'inherit',
69
+ env: process.env,
70
+ });
71
+ }
72
+ catch (err) {
73
+ if (err && typeof err === 'object' && 'status' in err) {
74
+ process.exitCode = err.status;
75
+ }
76
+ else {
77
+ process.exitCode = 1;
78
+ }
79
+ }
80
+ return;
81
+ }
82
+ // Bundled compiler missing (shouldn't happen) — fall through to error
83
+ }
39
84
  process.stderr.write('Error: Could not find a local installation of @prodara/compiler.\n' +
40
85
  '\n' +
41
86
  'To set up a Prodara project:\n' +
42
- ' npm install --save-dev @prodara/compiler\n' +
43
- ' npx prodara init\n' +
87
+ ' prodara init\n' +
44
88
  '\n' +
45
89
  `@prodara/cli v${wrapperVersion}\n`);
46
90
  process.exitCode = 1;
@@ -63,7 +107,6 @@ function main() {
63
107
  return;
64
108
  }
65
109
  // Delegate to the local compiler CLI
66
- const args = process.argv.slice(2);
67
110
  try {
68
111
  execFileSync(process.execPath, [local.cliEntry, ...args], {
69
112
  cwd,
@@ -81,5 +124,8 @@ function main() {
81
124
  }
82
125
  }
83
126
  }
84
- main();
127
+ /* v8 ignore next 3 -- auto-invoked entry point */
128
+ if (process.argv[1] && resolve(process.argv[1]) === __filename) {
129
+ main();
130
+ }
85
131
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prodara/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Prodara CLI — thin wrapper that delegates to the project-local @prodara/compiler",
5
5
  "author": "Prodara Contributors",
6
6
  "repository": {
@@ -24,6 +24,8 @@
24
24
  "scripts": {
25
25
  "build": "tsc -p tsconfig.build.json",
26
26
  "typecheck": "tsc --noEmit",
27
+ "test": "vitest run",
28
+ "test:coverage": "vitest run --coverage",
27
29
  "clean": "rm -rf dist",
28
30
  "prepublishOnly": "npm run clean && npm run build"
29
31
  },
@@ -41,6 +43,8 @@
41
43
  },
42
44
  "devDependencies": {
43
45
  "@types/node": "^20.14.0",
44
- "typescript": "^5.5.0"
46
+ "@vitest/coverage-v8": "^2.0.0",
47
+ "typescript": "^5.5.0",
48
+ "vitest": "^2.0.0"
45
49
  }
46
50
  }