@pie-element/cli 0.1.1
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/.compatibility/report.json +2491 -0
- package/.turbo/turbo-build.log +1 -0
- package/CHANGELOG.md +8 -0
- package/README.md +240 -0
- package/REFACTORING.md +131 -0
- package/bin/dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/commands/dev/demo/index.d.ts +33 -0
- package/dist/commands/dev/demo/index.d.ts.map +1 -0
- package/dist/commands/dev/demo/index.js +274 -0
- package/dist/commands/dev/demo/index.js.map +1 -0
- package/dist/commands/dev/test-bundler.d.ts +18 -0
- package/dist/commands/dev/test-bundler.d.ts.map +1 -0
- package/dist/commands/dev/test-bundler.js +284 -0
- package/dist/commands/dev/test-bundler.js.map +1 -0
- package/dist/commands/mathquill/migrate.d.ts +20 -0
- package/dist/commands/mathquill/migrate.d.ts.map +1 -0
- package/dist/commands/mathquill/migrate.js +240 -0
- package/dist/commands/mathquill/migrate.js.map +1 -0
- package/dist/commands/mathquill/status.d.ts +20 -0
- package/dist/commands/mathquill/status.d.ts.map +1 -0
- package/dist/commands/mathquill/status.js +231 -0
- package/dist/commands/mathquill/status.js.map +1 -0
- package/dist/commands/packages/create-controllers.d.ts +13 -0
- package/dist/commands/packages/create-controllers.d.ts.map +1 -0
- package/dist/commands/packages/create-controllers.js +103 -0
- package/dist/commands/packages/create-controllers.js.map +1 -0
- package/dist/commands/packages/create-lib-react.d.ts +17 -0
- package/dist/commands/packages/create-lib-react.d.ts.map +1 -0
- package/dist/commands/packages/create-lib-react.js +228 -0
- package/dist/commands/packages/create-lib-react.js.map +1 -0
- package/dist/commands/packages/create-react-elements.d.ts +16 -0
- package/dist/commands/packages/create-react-elements.d.ts.map +1 -0
- package/dist/commands/packages/create-react-elements.js +259 -0
- package/dist/commands/packages/create-react-elements.js.map +1 -0
- package/dist/commands/packages/enable-publishing.d.ts +11 -0
- package/dist/commands/packages/enable-publishing.d.ts.map +1 -0
- package/dist/commands/packages/enable-publishing.js +117 -0
- package/dist/commands/packages/enable-publishing.js.map +1 -0
- package/dist/commands/packages/init-synced-elements.d.ts +16 -0
- package/dist/commands/packages/init-synced-elements.d.ts.map +1 -0
- package/dist/commands/packages/init-synced-elements.js +204 -0
- package/dist/commands/packages/init-synced-elements.js.map +1 -0
- package/dist/commands/upstream/analyze-esm.d.ts +59 -0
- package/dist/commands/upstream/analyze-esm.d.ts.map +1 -0
- package/dist/commands/upstream/analyze-esm.js +1481 -0
- package/dist/commands/upstream/analyze-esm.js.map +1 -0
- package/dist/commands/upstream/check.d.ts +15 -0
- package/dist/commands/upstream/check.d.ts.map +1 -0
- package/dist/commands/upstream/check.js +165 -0
- package/dist/commands/upstream/check.js.map +1 -0
- package/dist/commands/upstream/deps.d.ts +15 -0
- package/dist/commands/upstream/deps.d.ts.map +1 -0
- package/dist/commands/upstream/deps.js +174 -0
- package/dist/commands/upstream/deps.js.map +1 -0
- package/dist/commands/upstream/sync-mathquill.d.ts +12 -0
- package/dist/commands/upstream/sync-mathquill.d.ts.map +1 -0
- package/dist/commands/upstream/sync-mathquill.js +97 -0
- package/dist/commands/upstream/sync-mathquill.js.map +1 -0
- package/dist/commands/upstream/sync.d.ts +25 -0
- package/dist/commands/upstream/sync.d.ts.map +1 -0
- package/dist/commands/upstream/sync.js +552 -0
- package/dist/commands/upstream/sync.js.map +1 -0
- package/dist/commands/upstream/track.d.ts +15 -0
- package/dist/commands/upstream/track.d.ts.map +1 -0
- package/dist/commands/upstream/track.js +115 -0
- package/dist/commands/upstream/track.js.map +1 -0
- package/dist/commands/upstream/update.d.ts +15 -0
- package/dist/commands/upstream/update.d.ts.map +1 -0
- package/dist/commands/upstream/update.js +98 -0
- package/dist/commands/upstream/update.js.map +1 -0
- package/dist/commands/verify/controllers.d.ts +12 -0
- package/dist/commands/verify/controllers.d.ts.map +1 -0
- package/dist/commands/verify/controllers.js +138 -0
- package/dist/commands/verify/controllers.js.map +1 -0
- package/dist/commands/verify/react-build.d.ts +13 -0
- package/dist/commands/verify/react-build.d.ts.map +1 -0
- package/dist/commands/verify/react-build.js +135 -0
- package/dist/commands/verify/react-build.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/mathquill/extension-generator.d.ts +9 -0
- package/dist/lib/mathquill/extension-generator.d.ts.map +1 -0
- package/dist/lib/mathquill/extension-generator.js +107 -0
- package/dist/lib/mathquill/extension-generator.js.map +1 -0
- package/dist/lib/mathquill/khan-extractor.d.ts +16 -0
- package/dist/lib/mathquill/khan-extractor.d.ts.map +1 -0
- package/dist/lib/mathquill/khan-extractor.js +148 -0
- package/dist/lib/mathquill/khan-extractor.js.map +1 -0
- package/dist/lib/mathquill/learnosity-extractor.d.ts +15 -0
- package/dist/lib/mathquill/learnosity-extractor.d.ts.map +1 -0
- package/dist/lib/mathquill/learnosity-extractor.js +170 -0
- package/dist/lib/mathquill/learnosity-extractor.js.map +1 -0
- package/dist/lib/mathquill/migration-orchestrator.d.ts +77 -0
- package/dist/lib/mathquill/migration-orchestrator.d.ts.map +1 -0
- package/dist/lib/mathquill/migration-orchestrator.js +391 -0
- package/dist/lib/mathquill/migration-orchestrator.js.map +1 -0
- package/dist/lib/mathquill/package-updater.d.ts +9 -0
- package/dist/lib/mathquill/package-updater.d.ts.map +1 -0
- package/dist/lib/mathquill/package-updater.js +103 -0
- package/dist/lib/mathquill/package-updater.js.map +1 -0
- package/dist/lib/mathquill/pie-extractor.d.ts +14 -0
- package/dist/lib/mathquill/pie-extractor.d.ts.map +1 -0
- package/dist/lib/mathquill/pie-extractor.js +167 -0
- package/dist/lib/mathquill/pie-extractor.js.map +1 -0
- package/dist/lib/upstream/repo-utils.d.ts +9 -0
- package/dist/lib/upstream/repo-utils.d.ts.map +1 -0
- package/dist/lib/upstream/repo-utils.js +10 -0
- package/dist/lib/upstream/repo-utils.js.map +1 -0
- package/dist/lib/upstream/sync-compatibility.d.ts +29 -0
- package/dist/lib/upstream/sync-compatibility.d.ts.map +1 -0
- package/dist/lib/upstream/sync-compatibility.js +70 -0
- package/dist/lib/upstream/sync-compatibility.js.map +1 -0
- package/dist/lib/upstream/sync-constants.d.ts +50 -0
- package/dist/lib/upstream/sync-constants.d.ts.map +1 -0
- package/dist/lib/upstream/sync-constants.js +66 -0
- package/dist/lib/upstream/sync-constants.js.map +1 -0
- package/dist/lib/upstream/sync-controllers-strategy.d.ts +18 -0
- package/dist/lib/upstream/sync-controllers-strategy.d.ts.map +1 -0
- package/dist/lib/upstream/sync-controllers-strategy.js +243 -0
- package/dist/lib/upstream/sync-controllers-strategy.js.map +1 -0
- package/dist/lib/upstream/sync-demo-metadata.d.ts +15 -0
- package/dist/lib/upstream/sync-demo-metadata.d.ts.map +1 -0
- package/dist/lib/upstream/sync-demo-metadata.js +165 -0
- package/dist/lib/upstream/sync-demo-metadata.js.map +1 -0
- package/dist/lib/upstream/sync-dev-exports.d.ts +13 -0
- package/dist/lib/upstream/sync-dev-exports.d.ts.map +1 -0
- package/dist/lib/upstream/sync-dev-exports.js +115 -0
- package/dist/lib/upstream/sync-dev-exports.js.map +1 -0
- package/dist/lib/upstream/sync-externals.d.ts +29 -0
- package/dist/lib/upstream/sync-externals.d.ts.map +1 -0
- package/dist/lib/upstream/sync-externals.js +164 -0
- package/dist/lib/upstream/sync-externals.js.map +1 -0
- package/dist/lib/upstream/sync-filesystem.d.ts +21 -0
- package/dist/lib/upstream/sync-filesystem.d.ts.map +1 -0
- package/dist/lib/upstream/sync-filesystem.js +64 -0
- package/dist/lib/upstream/sync-filesystem.js.map +1 -0
- package/dist/lib/upstream/sync-imports.d.ts +284 -0
- package/dist/lib/upstream/sync-imports.d.ts.map +1 -0
- package/dist/lib/upstream/sync-imports.js +816 -0
- package/dist/lib/upstream/sync-imports.js.map +1 -0
- package/dist/lib/upstream/sync-mathquill.d.ts +19 -0
- package/dist/lib/upstream/sync-mathquill.d.ts.map +1 -0
- package/dist/lib/upstream/sync-mathquill.js +160 -0
- package/dist/lib/upstream/sync-mathquill.js.map +1 -0
- package/dist/lib/upstream/sync-package-json.d.ts +28 -0
- package/dist/lib/upstream/sync-package-json.d.ts.map +1 -0
- package/dist/lib/upstream/sync-package-json.js +66 -0
- package/dist/lib/upstream/sync-package-json.js.map +1 -0
- package/dist/lib/upstream/sync-package-manager.d.ts +50 -0
- package/dist/lib/upstream/sync-package-manager.d.ts.map +1 -0
- package/dist/lib/upstream/sync-package-manager.js +570 -0
- package/dist/lib/upstream/sync-package-manager.js.map +1 -0
- package/dist/lib/upstream/sync-pielib-strategy.d.ts +26 -0
- package/dist/lib/upstream/sync-pielib-strategy.d.ts.map +1 -0
- package/dist/lib/upstream/sync-pielib-strategy.js +345 -0
- package/dist/lib/upstream/sync-pielib-strategy.js.map +1 -0
- package/dist/lib/upstream/sync-react-strategy.d.ts +54 -0
- package/dist/lib/upstream/sync-react-strategy.d.ts.map +1 -0
- package/dist/lib/upstream/sync-react-strategy.js +733 -0
- package/dist/lib/upstream/sync-react-strategy.js.map +1 -0
- package/dist/lib/upstream/sync-strategy.d.ts +49 -0
- package/dist/lib/upstream/sync-strategy.d.ts.map +1 -0
- package/dist/lib/upstream/sync-strategy.js +2 -0
- package/dist/lib/upstream/sync-strategy.js.map +1 -0
- package/dist/lib/upstream/sync-summary.d.ts +20 -0
- package/dist/lib/upstream/sync-summary.d.ts.map +1 -0
- package/dist/lib/upstream/sync-summary.js +157 -0
- package/dist/lib/upstream/sync-summary.js.map +1 -0
- package/dist/lib/upstream/sync-transforms.d.ts +60 -0
- package/dist/lib/upstream/sync-transforms.d.ts.map +1 -0
- package/dist/lib/upstream/sync-transforms.js +97 -0
- package/dist/lib/upstream/sync-transforms.js.map +1 -0
- package/dist/lib/upstream/sync-vite-config.d.ts +13 -0
- package/dist/lib/upstream/sync-vite-config.d.ts.map +1 -0
- package/dist/lib/upstream/sync-vite-config.js +231 -0
- package/dist/lib/upstream/sync-vite-config.js.map +1 -0
- package/dist/utils/compatibility.d.ts +129 -0
- package/dist/utils/compatibility.d.ts.map +1 -0
- package/dist/utils/compatibility.js +44 -0
- package/dist/utils/compatibility.js.map +1 -0
- package/dist/utils/conversion.d.ts +25 -0
- package/dist/utils/conversion.d.ts.map +1 -0
- package/dist/utils/conversion.js +123 -0
- package/dist/utils/conversion.js.map +1 -0
- package/dist/utils/git.d.ts +7 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +63 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +29 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-json.d.ts +12 -0
- package/dist/utils/package-json.d.ts.map +1 -0
- package/dist/utils/package-json.js +29 -0
- package/dist/utils/package-json.js.map +1 -0
- package/package.json +59 -0
- package/packages/cli/bin/dev.js +5 -0
- package/packages/cli/bin/run.js +5 -0
- package/src/commands/dev/demo/index.ts +313 -0
- package/src/commands/dev/test-bundler.ts +345 -0
- package/src/commands/mathquill/migrate.ts +269 -0
- package/src/commands/mathquill/status.ts +267 -0
- package/src/commands/packages/create-controllers.ts +127 -0
- package/src/commands/packages/create-lib-react.ts +279 -0
- package/src/commands/packages/create-react-elements.ts +306 -0
- package/src/commands/packages/enable-publishing.ts +161 -0
- package/src/commands/packages/init-synced-elements.ts +259 -0
- package/src/commands/upstream/README.md +444 -0
- package/src/commands/upstream/analyze-esm.ts +1973 -0
- package/src/commands/upstream/check.ts +228 -0
- package/src/commands/upstream/deps.ts +222 -0
- package/src/commands/upstream/sync-mathquill.ts +108 -0
- package/src/commands/upstream/sync.ts +687 -0
- package/src/commands/upstream/track.ts +145 -0
- package/src/commands/upstream/update.ts +110 -0
- package/src/commands/verify/controllers.ts +166 -0
- package/src/commands/verify/react-build.ts +171 -0
- package/src/index.ts +1 -0
- package/src/lib/mathquill/extension-generator.ts +111 -0
- package/src/lib/mathquill/khan-extractor.ts +175 -0
- package/src/lib/mathquill/learnosity-extractor.ts +198 -0
- package/src/lib/mathquill/migration-orchestrator.ts +513 -0
- package/src/lib/mathquill/package-updater.ts +120 -0
- package/src/lib/mathquill/pie-extractor.ts +194 -0
- package/src/lib/upstream/repo-utils.ts +18 -0
- package/src/lib/upstream/sync-compatibility.ts +89 -0
- package/src/lib/upstream/sync-constants.ts +77 -0
- package/src/lib/upstream/sync-controllers-strategy.ts +291 -0
- package/src/lib/upstream/sync-demo-metadata.ts +199 -0
- package/src/lib/upstream/sync-dev-exports.ts +151 -0
- package/src/lib/upstream/sync-externals.ts +159 -0
- package/src/lib/upstream/sync-filesystem.ts +87 -0
- package/src/lib/upstream/sync-imports.ts +992 -0
- package/src/lib/upstream/sync-mathquill.ts +194 -0
- package/src/lib/upstream/sync-package-json.ts +86 -0
- package/src/lib/upstream/sync-package-manager.ts +694 -0
- package/src/lib/upstream/sync-pielib-strategy.ts +441 -0
- package/src/lib/upstream/sync-react-strategy.ts +945 -0
- package/src/lib/upstream/sync-strategy.ts +61 -0
- package/src/lib/upstream/sync-summary.ts +194 -0
- package/src/lib/upstream/sync-transforms.ts +154 -0
- package/src/lib/upstream/sync-vite-config.ts +243 -0
- package/src/types/es-module-lexer.d.ts +4 -0
- package/src/utils/compatibility.ts +182 -0
- package/src/utils/conversion.ts +153 -0
- package/src/utils/git.ts +63 -0
- package/src/utils/logger.ts +69 -0
- package/src/utils/package-json.ts +43 -0
- package/tests/sync-package-manager.test.ts +112 -0
- package/tests/transform-assign-props.test.ts +101 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare class Logger {
|
|
2
|
+
private verbose;
|
|
3
|
+
constructor(verbose?: boolean);
|
|
4
|
+
isVerbose(): boolean;
|
|
5
|
+
info(message: string): void;
|
|
6
|
+
debug(message: string): void;
|
|
7
|
+
warn(message: string): void;
|
|
8
|
+
error(message: string): void;
|
|
9
|
+
success(message: string): void;
|
|
10
|
+
section(title: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* Show a progress message (only in verbose mode)
|
|
13
|
+
* In non-verbose mode, use progressStart/progressComplete instead
|
|
14
|
+
*/
|
|
15
|
+
progress(message: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Show start of an operation (always shown)
|
|
18
|
+
*/
|
|
19
|
+
progressStart(message: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Complete a progress operation with success
|
|
22
|
+
*/
|
|
23
|
+
progressComplete(details?: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Complete a progress operation with a count
|
|
26
|
+
*/
|
|
27
|
+
progressCompleteWithCount(count: number, label: string): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,qBAAa,MAAM;IACL,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,OAAe;IAE5C,SAAS,IAAI,OAAO;IAIpB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAG9D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export class Logger {
|
|
2
|
+
verbose;
|
|
3
|
+
constructor(verbose = false) {
|
|
4
|
+
this.verbose = verbose;
|
|
5
|
+
}
|
|
6
|
+
isVerbose() {
|
|
7
|
+
return this.verbose;
|
|
8
|
+
}
|
|
9
|
+
info(message) {
|
|
10
|
+
console.log(message);
|
|
11
|
+
}
|
|
12
|
+
debug(message) {
|
|
13
|
+
if (this.verbose) {
|
|
14
|
+
console.log(message);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
warn(message) {
|
|
18
|
+
console.warn(`⚠️ ${message}`);
|
|
19
|
+
}
|
|
20
|
+
error(message) {
|
|
21
|
+
console.error(`❌ ${message}`);
|
|
22
|
+
}
|
|
23
|
+
success(message) {
|
|
24
|
+
console.log(`✅ ${message}`);
|
|
25
|
+
}
|
|
26
|
+
section(title) {
|
|
27
|
+
console.log(`\n${title}`);
|
|
28
|
+
console.log('='.repeat(title.length));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Show a progress message (only in verbose mode)
|
|
32
|
+
* In non-verbose mode, use progressStart/progressComplete instead
|
|
33
|
+
*/
|
|
34
|
+
progress(message) {
|
|
35
|
+
if (this.verbose) {
|
|
36
|
+
console.log(` ${message}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Show start of an operation (always shown)
|
|
41
|
+
*/
|
|
42
|
+
progressStart(message) {
|
|
43
|
+
process.stdout.write(message);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Complete a progress operation with success
|
|
47
|
+
*/
|
|
48
|
+
progressComplete(details) {
|
|
49
|
+
if (details) {
|
|
50
|
+
console.log(` ✓ ${details}`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(' ✓');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Complete a progress operation with a count
|
|
58
|
+
*/
|
|
59
|
+
progressCompleteWithCount(count, label) {
|
|
60
|
+
console.log(` ✓ (${count} ${label})`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IACG;IAApB,YAAoB,UAAmB,KAAK;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAEhD,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,OAAe;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAgB;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,KAAa,EAAE,KAAa;QACpD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface PackageJson {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
private?: boolean;
|
|
5
|
+
dependencies?: Record<string, string>;
|
|
6
|
+
devDependencies?: Record<string, string>;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare function loadPackageJson(path: string): Promise<PackageJson>;
|
|
10
|
+
export declare function writePackageJson(path: string, pkg: PackageJson): Promise<void>;
|
|
11
|
+
export declare function extractDependencies(content: string): string[];
|
|
12
|
+
//# sourceMappingURL=package-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAGxE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
export async function loadPackageJson(path) {
|
|
3
|
+
const content = await readFile(path, 'utf-8');
|
|
4
|
+
return JSON.parse(content);
|
|
5
|
+
}
|
|
6
|
+
export async function writePackageJson(path, pkg) {
|
|
7
|
+
const content = `${JSON.stringify(pkg, null, 2)}\n`;
|
|
8
|
+
await writeFile(path, content, 'utf-8');
|
|
9
|
+
}
|
|
10
|
+
export function extractDependencies(content) {
|
|
11
|
+
const deps = new Set();
|
|
12
|
+
// Match import statements
|
|
13
|
+
const importRegex = /import\s+.+\s+from\s+['"]([^'"]+)['"]/g;
|
|
14
|
+
let match = importRegex.exec(content);
|
|
15
|
+
while (match !== null) {
|
|
16
|
+
const dep = match[1];
|
|
17
|
+
// Skip relative imports
|
|
18
|
+
if (!dep.startsWith('.') && !dep.startsWith('/')) {
|
|
19
|
+
// Extract package name (handle scoped packages)
|
|
20
|
+
const pkgName = dep.startsWith('@')
|
|
21
|
+
? dep.split('/').slice(0, 2).join('/')
|
|
22
|
+
: dep.split('/')[0];
|
|
23
|
+
deps.add(pkgName);
|
|
24
|
+
}
|
|
25
|
+
match = importRegex.exec(content);
|
|
26
|
+
}
|
|
27
|
+
return Array.from(deps).sort();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWvD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAgB;IACnE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,0BAA0B;IAC1B,MAAM,WAAW,GAAG,wCAAwC,CAAC;IAC7D,IAAI,KAAK,GAA2B,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE9D,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,gDAAgD;YAChD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBACjC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pie-element/cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "CLI tools for managing PIE Elements NG",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pie-cli": "./bin/run.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "node ./bin/dev.js",
|
|
16
|
+
"lint": "biome check ."
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@oclif/core": "^4.0.0",
|
|
20
|
+
"@oclif/plugin-help": "^6.2.0",
|
|
21
|
+
"@pie-element/bundler-shared": "workspace:*",
|
|
22
|
+
"es-module-lexer": "^1.7.0",
|
|
23
|
+
"glob": "^13.0.0",
|
|
24
|
+
"open": "^10.0.3",
|
|
25
|
+
"webpack": "^5.104.1"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^25.0.3",
|
|
29
|
+
"bun-types": "^1.3.5",
|
|
30
|
+
"typescript": "^5.9.3"
|
|
31
|
+
},
|
|
32
|
+
"oclif": {
|
|
33
|
+
"bin": "pie-cli",
|
|
34
|
+
"dirname": "pie-cli",
|
|
35
|
+
"commands": "./dist/commands",
|
|
36
|
+
"topicSeparator": ":",
|
|
37
|
+
"topics": {
|
|
38
|
+
"dev": {
|
|
39
|
+
"description": "Development server and tools"
|
|
40
|
+
},
|
|
41
|
+
"upstream": {
|
|
42
|
+
"description": "Manage synchronization with upstream pie-elements repository"
|
|
43
|
+
},
|
|
44
|
+
"packages": {
|
|
45
|
+
"description": "Generate and manage package configurations"
|
|
46
|
+
},
|
|
47
|
+
"verify": {
|
|
48
|
+
"description": "Verify builds and configurations"
|
|
49
|
+
},
|
|
50
|
+
"mathquill": {
|
|
51
|
+
"description": "MathQuill migration and management"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=20.0.0"
|
|
57
|
+
},
|
|
58
|
+
"license": "MIT"
|
|
59
|
+
}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { spawn, type ChildProcess } from 'node:child_process';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { existsSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Start unified demo application for all PIE elements.
|
|
9
|
+
*
|
|
10
|
+
* This command starts the apps/element-demo SvelteKit application which provides
|
|
11
|
+
* a unified demo experience for all 27 PIE elements with multiple demo configurations.
|
|
12
|
+
*/
|
|
13
|
+
export default class DevDemo extends Command {
|
|
14
|
+
static override description = 'Start unified demo app for all PIE elements (apps/element-demo)';
|
|
15
|
+
|
|
16
|
+
static override examples = [
|
|
17
|
+
'<%= config.bin %> <%= command.id %>',
|
|
18
|
+
'<%= config.bin %> <%= command.id %> --port 5180',
|
|
19
|
+
'<%= config.bin %> <%= command.id %> --open',
|
|
20
|
+
'<%= config.bin %> <%= command.id %> --build',
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
static override flags = {
|
|
24
|
+
port: Flags.integer({
|
|
25
|
+
char: 'p',
|
|
26
|
+
description: 'Vite dev server port',
|
|
27
|
+
default: 5222,
|
|
28
|
+
}),
|
|
29
|
+
build: Flags.boolean({
|
|
30
|
+
char: 'b',
|
|
31
|
+
description: 'Build all elements before starting',
|
|
32
|
+
default: false,
|
|
33
|
+
}),
|
|
34
|
+
open: Flags.boolean({
|
|
35
|
+
char: 'o',
|
|
36
|
+
description: 'Open browser automatically',
|
|
37
|
+
default: false,
|
|
38
|
+
allowNo: true,
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
static override args = {};
|
|
43
|
+
|
|
44
|
+
private viteProcess: ChildProcess | null = null;
|
|
45
|
+
private lockFilePath = '';
|
|
46
|
+
private bundlerInstanceDir = '';
|
|
47
|
+
|
|
48
|
+
public async run(): Promise<void> {
|
|
49
|
+
const { flags } = await this.parse(DevDemo);
|
|
50
|
+
|
|
51
|
+
// Find monorepo root - check if we're already at root or need to traverse up
|
|
52
|
+
let monorepoRoot = process.cwd();
|
|
53
|
+
const rootPackageJson = path.join(monorepoRoot, 'package.json');
|
|
54
|
+
|
|
55
|
+
// If package.json doesn't exist at current level, we're in a subdirectory (like tools/cli)
|
|
56
|
+
// Traverse up to find the root
|
|
57
|
+
if (!existsSync(rootPackageJson) || !existsSync(path.join(monorepoRoot, 'apps'))) {
|
|
58
|
+
monorepoRoot = path.resolve(monorepoRoot, '../..');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const demoAppPath = path.join(monorepoRoot, 'apps', 'element-demo');
|
|
62
|
+
|
|
63
|
+
this.lockFilePath = this.getLockFilePath(flags.port);
|
|
64
|
+
this.acquireLock(flags.port);
|
|
65
|
+
this.bundlerInstanceDir = this.createBundlerInstanceDir(flags.port);
|
|
66
|
+
|
|
67
|
+
this.log('Starting unified demo app for all PIE elements...');
|
|
68
|
+
this.log('');
|
|
69
|
+
this.log('Bundler mode: local (default)');
|
|
70
|
+
this.log(`Bundler workspace: ${this.bundlerInstanceDir}`);
|
|
71
|
+
this.log('');
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
// 1. Build all elements if requested
|
|
75
|
+
if (flags.build) {
|
|
76
|
+
this.log('Building all React elements...');
|
|
77
|
+
await this.buildAllElements(monorepoRoot);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// 2. Install workspace dependencies (only if building)
|
|
81
|
+
if (flags.build) {
|
|
82
|
+
this.log('Installing workspace dependencies...');
|
|
83
|
+
await this.installDependencies(monorepoRoot);
|
|
84
|
+
this.log('✓ Dependencies installed\n');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// 3. Start Vite dev server
|
|
88
|
+
this.log(`Starting Vite dev server on port ${flags.port}...`);
|
|
89
|
+
if (!existsSync(demoAppPath)) {
|
|
90
|
+
this.error(`Demo app not found at ${demoAppPath}`);
|
|
91
|
+
}
|
|
92
|
+
this.viteProcess = await this.startVite(demoAppPath, flags.port, {
|
|
93
|
+
DEMO_BUNDLER_INSTANCE_DIR: this.bundlerInstanceDir,
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// 4. Open browser
|
|
97
|
+
if (flags.open) {
|
|
98
|
+
await this.sleep(3000); // Wait for Vite to start
|
|
99
|
+
const url = `http://localhost:${flags.port}`;
|
|
100
|
+
this.log(`Opening ${url}...`);
|
|
101
|
+
await this.openBrowser(url);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
this.log('');
|
|
105
|
+
this.log('✓ Demo app running');
|
|
106
|
+
this.log(` URL: http://localhost:${flags.port}`);
|
|
107
|
+
this.log('');
|
|
108
|
+
if (!flags.build) {
|
|
109
|
+
this.log('ℹ️ Running without rebuild. Use --build to rebuild all elements first.');
|
|
110
|
+
this.log('');
|
|
111
|
+
}
|
|
112
|
+
this.log('📖 The demo app showcases all 27 PIE elements with multiple demos');
|
|
113
|
+
this.log(' Navigate to any element to see available demo configurations');
|
|
114
|
+
this.log('');
|
|
115
|
+
this.log('Press Ctrl+C to stop');
|
|
116
|
+
|
|
117
|
+
// 7. Handle graceful shutdown
|
|
118
|
+
process.on('SIGINT', () => {
|
|
119
|
+
this.log('\nShutting down...');
|
|
120
|
+
this.cleanup();
|
|
121
|
+
process.exit(0);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
process.on('SIGTERM', () => {
|
|
125
|
+
this.cleanup();
|
|
126
|
+
process.exit(0);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Keep process alive
|
|
130
|
+
await new Promise(() => {});
|
|
131
|
+
} catch (error) {
|
|
132
|
+
this.cleanup();
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private async buildAllElements(cwd: string): Promise<void> {
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const build = spawn(
|
|
140
|
+
'bun',
|
|
141
|
+
[
|
|
142
|
+
'run',
|
|
143
|
+
'turbo',
|
|
144
|
+
'build',
|
|
145
|
+
'--force',
|
|
146
|
+
'--filter',
|
|
147
|
+
'./packages/elements-react/*',
|
|
148
|
+
'--filter',
|
|
149
|
+
'./packages/elements-svelte/*',
|
|
150
|
+
],
|
|
151
|
+
{
|
|
152
|
+
stdio: 'inherit',
|
|
153
|
+
cwd,
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
build.on('close', (code) => {
|
|
158
|
+
if (code === 0) {
|
|
159
|
+
this.log('✓ All elements built\n');
|
|
160
|
+
resolve();
|
|
161
|
+
} else {
|
|
162
|
+
reject(new Error(`Build failed with code ${code}`));
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
build.on('error', reject);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private async startVite(
|
|
171
|
+
demoPath: string,
|
|
172
|
+
port: number,
|
|
173
|
+
env: Record<string, string>
|
|
174
|
+
): Promise<ChildProcess> {
|
|
175
|
+
const proc = spawn('bunx', ['vite', '--port', port.toString(), '--host'], {
|
|
176
|
+
cwd: demoPath,
|
|
177
|
+
stdio: 'inherit',
|
|
178
|
+
env: {
|
|
179
|
+
...process.env,
|
|
180
|
+
PORT: port.toString(),
|
|
181
|
+
...env,
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
proc.on('error', (error) => {
|
|
186
|
+
this.error(`Failed to start Vite: ${error.message}`);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
return proc;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
private async openBrowser(url: string): Promise<void> {
|
|
193
|
+
try {
|
|
194
|
+
const open = await import('open');
|
|
195
|
+
await open.default(url);
|
|
196
|
+
} catch (error) {
|
|
197
|
+
this.warn(`Could not open browser: ${error}`);
|
|
198
|
+
this.log(`Please open ${url} manually`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private async installDependencies(cwd: string): Promise<void> {
|
|
203
|
+
return new Promise((resolve, reject) => {
|
|
204
|
+
const install = spawn('bun', ['install'], {
|
|
205
|
+
cwd, // Run from monorepo root to resolve all workspaces
|
|
206
|
+
stdio: 'inherit',
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
install.on('close', (code) => {
|
|
210
|
+
if (code === 0) {
|
|
211
|
+
resolve();
|
|
212
|
+
} else {
|
|
213
|
+
reject(new Error(`Dependency installation failed with code ${code}`));
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
install.on('error', reject);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
private cleanup(): void {
|
|
222
|
+
if (this.viteProcess) {
|
|
223
|
+
try {
|
|
224
|
+
this.viteProcess.kill('SIGTERM');
|
|
225
|
+
} catch (error) {
|
|
226
|
+
// Ignore errors during cleanup
|
|
227
|
+
}
|
|
228
|
+
this.viteProcess = null;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (this.bundlerInstanceDir) {
|
|
232
|
+
try {
|
|
233
|
+
rmSync(this.bundlerInstanceDir, { recursive: true, force: true });
|
|
234
|
+
} catch {
|
|
235
|
+
// Ignore cleanup errors.
|
|
236
|
+
}
|
|
237
|
+
this.bundlerInstanceDir = '';
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
this.releaseLock();
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private sleep(ms: number): Promise<void> {
|
|
244
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private acquireLock(port: number): void {
|
|
248
|
+
if (existsSync(this.lockFilePath)) {
|
|
249
|
+
try {
|
|
250
|
+
const raw = readFileSync(this.lockFilePath, 'utf-8');
|
|
251
|
+
const lock = JSON.parse(raw);
|
|
252
|
+
if (lock?.pid && this.isProcessRunning(lock.pid)) {
|
|
253
|
+
this.error(
|
|
254
|
+
`A demo server is already running (port: ${lock.port ?? 'unknown'}, pid: ${
|
|
255
|
+
lock.pid
|
|
256
|
+
}). Stop it or use --port to run on a different port.`
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
} catch (error) {
|
|
260
|
+
// If the lock is unreadable, remove it and continue.
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
try {
|
|
264
|
+
unlinkSync(this.lockFilePath);
|
|
265
|
+
} catch {
|
|
266
|
+
// Ignore cleanup errors.
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const lockInfo = {
|
|
271
|
+
pid: process.pid,
|
|
272
|
+
port,
|
|
273
|
+
startedAt: new Date().toISOString(),
|
|
274
|
+
};
|
|
275
|
+
writeFileSync(this.lockFilePath, `${JSON.stringify(lockInfo, null, 2)}\n`);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private getLockFilePath(port: number): string {
|
|
279
|
+
return path.join(process.cwd(), `.demo-server.${port}.lock`);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
private createBundlerInstanceDir(port: number): string {
|
|
283
|
+
// New run => new temp dir, so local cache is fresh after every restart.
|
|
284
|
+
const instanceId = `demo-${port}-${process.pid}-${Date.now()}`;
|
|
285
|
+
return path.join(tmpdir(), 'pie-element-demo-bundler', instanceId);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private releaseLock(): void {
|
|
289
|
+
if (!existsSync(this.lockFilePath)) return;
|
|
290
|
+
try {
|
|
291
|
+
const raw = readFileSync(this.lockFilePath, 'utf-8');
|
|
292
|
+
const lock = JSON.parse(raw);
|
|
293
|
+
if (lock?.pid !== process.pid) return;
|
|
294
|
+
} catch {
|
|
295
|
+
// If parsing fails, still attempt to remove stale lock.
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
try {
|
|
299
|
+
unlinkSync(this.lockFilePath);
|
|
300
|
+
} catch {
|
|
301
|
+
// Ignore cleanup errors.
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
private isProcessRunning(pid: number): boolean {
|
|
306
|
+
try {
|
|
307
|
+
process.kill(pid, 0);
|
|
308
|
+
return true;
|
|
309
|
+
} catch {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|