@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 +13 -0
- package/dist/bin.d.ts +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +51 -5
- package/dist/bin.js.map +1 -1
- package/package.json +6 -2
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
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
|
-
|
|
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
|
-
'
|
|
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
|
-
|
|
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":";AACA,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAC9E,iDAAiD;AACjD,gEAAgE;AAChE,wCAAwC;AACxC,2DAA2D;AAC3D,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,0CAA0C;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAC9E,iDAAiD;AACjD,gEAAgE;AAChE,wCAAwC;AACxC,2DAA2D;AAC3D,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,0CAA0C;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;YACpD,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB;IAC7B,IAAI,CAAC;QACH,qEAAqE;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,yEAAyE;QACzE,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;YAC9C,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,EAAE;wBACtD,GAAG;wBACH,KAAK,EAAE,SAAS;wBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;wBACtD,OAAO,CAAC,QAAQ,GAAI,GAA0B,CAAC,MAAM,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YACD,sEAAsE;QACxE,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oEAAoE;YACpE,IAAI;YACJ,gCAAgC;YAChC,kBAAkB;YAClB,IAAI;YACJ,iBAAiB,cAAc,IAAI,CACpC,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAG,yBAAyB,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC;QACvD,uEAAuE;IACzE,CAAC;IAED,mEAAmE;IACnE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,UAAU,IAAI;YAC3E,oCAAoC;YACpC,IAAI;YACJ,yEAAyE;YACzE,6DAA6D,CAC9D,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE;YACxD,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,6DAA6D;QAC7D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAI,GAA0B,CAAC,MAAM,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;IAC/D,IAAI,EAAE,CAAC;AACT,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prodara/cli",
|
|
3
|
-
"version": "0.1.
|
|
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
|
-
"
|
|
46
|
+
"@vitest/coverage-v8": "^2.0.0",
|
|
47
|
+
"typescript": "^5.5.0",
|
|
48
|
+
"vitest": "^2.0.0"
|
|
45
49
|
}
|
|
46
50
|
}
|