@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,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Controller sync strategy - syncs controller logic from upstream pie-elements
|
|
3
|
+
*
|
|
4
|
+
* Synced from: pie-elements/packages/{element}/controller/src/
|
|
5
|
+
* Target: packages/elements-react/{element}/src/controller/
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
9
|
+
import { dirname, join } from 'node:path';
|
|
10
|
+
import { convertJsToTs } from '../../utils/conversion.js';
|
|
11
|
+
import { getCurrentCommit } from '../../utils/git.js';
|
|
12
|
+
import { cleanDirectory, existsAny, readdir } from './sync-filesystem.js';
|
|
13
|
+
import { createExternalFunction } from './sync-externals.js';
|
|
14
|
+
import { createControllerTransformPipeline } from './sync-transforms.js';
|
|
15
|
+
import { ensureElementPackageJson } from './sync-package-manager.js';
|
|
16
|
+
import { isSubdirectoryCompatible } from './sync-compatibility.js';
|
|
17
|
+
import { EXCLUDED_UPSTREAM_ELEMENTS } from './sync-constants.js';
|
|
18
|
+
export class ControllersStrategy {
|
|
19
|
+
touchedElementPackages = new Set();
|
|
20
|
+
result = {
|
|
21
|
+
filesChecked: 0,
|
|
22
|
+
filesCopied: 0,
|
|
23
|
+
filesSkipped: 0,
|
|
24
|
+
filesUpdated: 0,
|
|
25
|
+
};
|
|
26
|
+
getName() {
|
|
27
|
+
return 'controllers';
|
|
28
|
+
}
|
|
29
|
+
getDescription() {
|
|
30
|
+
return 'controllers';
|
|
31
|
+
}
|
|
32
|
+
shouldRun(config) {
|
|
33
|
+
return config.syncControllers;
|
|
34
|
+
}
|
|
35
|
+
async execute(context) {
|
|
36
|
+
const { config, logger } = context;
|
|
37
|
+
this.touchedElementPackages.clear();
|
|
38
|
+
this.result = {
|
|
39
|
+
filesChecked: 0,
|
|
40
|
+
filesCopied: 0,
|
|
41
|
+
filesSkipped: 0,
|
|
42
|
+
filesUpdated: 0,
|
|
43
|
+
};
|
|
44
|
+
if (!logger.isVerbose()) {
|
|
45
|
+
logger.progressStart('Syncing controllers...');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger.section('📦 Syncing controllers');
|
|
49
|
+
}
|
|
50
|
+
const upstreamElementsDir = join(config.pieElements, 'packages');
|
|
51
|
+
const targetBaseDir = join(config.pieElementsNg, 'packages/elements-react');
|
|
52
|
+
const upstreamCommit = getCurrentCommit(config.pieElements);
|
|
53
|
+
const packages = await readdir(upstreamElementsDir);
|
|
54
|
+
for (const pkg of packages) {
|
|
55
|
+
if (EXCLUDED_UPSTREAM_ELEMENTS.includes(pkg)) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (context.packageFilter && pkg !== context.packageFilter) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Check if controller exists upstream
|
|
62
|
+
const controllerPath = join(upstreamElementsDir, pkg, 'controller/src/index.js');
|
|
63
|
+
if (!existsSync(controllerPath)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// Check if controller subdirectory is ESM-compatible
|
|
67
|
+
const controllerCompatible = isSubdirectoryCompatible(pkg, 'controller', context);
|
|
68
|
+
if (!controllerCompatible) {
|
|
69
|
+
if (logger.isVerbose()) {
|
|
70
|
+
logger.info(` ⏭️ ${pkg}: skipping controller/ (not ESM-compatible)`);
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
this.result.filesChecked++;
|
|
75
|
+
// Target: packages/elements-react/{element}/src/controller/index.ts
|
|
76
|
+
const targetDir = join(targetBaseDir, pkg, 'src/controller');
|
|
77
|
+
const targetPath = join(targetDir, 'index.ts');
|
|
78
|
+
// Clean target controller subtree first so removed upstream files don't linger
|
|
79
|
+
await this.cleanTargetDir(targetDir, `elements-react/${pkg}/src/controller`, logger);
|
|
80
|
+
// Read source
|
|
81
|
+
let sourceContent = await readFile(controllerPath, 'utf-8');
|
|
82
|
+
// Apply all standard transformations
|
|
83
|
+
const transformPipeline = createControllerTransformPipeline();
|
|
84
|
+
sourceContent = transformPipeline(sourceContent);
|
|
85
|
+
// Convert JS to TS
|
|
86
|
+
const { code: converted } = convertJsToTs(sourceContent, {
|
|
87
|
+
sourcePath: `pie-elements/packages/${pkg}/controller/src/index.js`,
|
|
88
|
+
commit: upstreamCommit,
|
|
89
|
+
});
|
|
90
|
+
let elementChanged = false;
|
|
91
|
+
// Sync index.ts
|
|
92
|
+
// NOTE: This comparison is exact (===) to ensure any changes in:
|
|
93
|
+
// - Upstream source code
|
|
94
|
+
// - Transformation logic (lodash-es, event packages, etc.)
|
|
95
|
+
// - Sync version (tracked in @sync-version header)
|
|
96
|
+
// will trigger a file update. This prioritizes correctness over speed.
|
|
97
|
+
const isNew = !existsSync(targetPath);
|
|
98
|
+
if (!isNew) {
|
|
99
|
+
const currentContent = await readFile(targetPath, 'utf-8');
|
|
100
|
+
if (currentContent === converted) {
|
|
101
|
+
this.result.filesSkipped++;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.result.filesUpdated++;
|
|
105
|
+
elementChanged = true;
|
|
106
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
107
|
+
await writeFile(targetPath, converted, 'utf-8');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.result.filesCopied++;
|
|
112
|
+
elementChanged = true;
|
|
113
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
114
|
+
await writeFile(targetPath, converted, 'utf-8');
|
|
115
|
+
}
|
|
116
|
+
// Also sync related files (defaults.js, utils.js, scoring.js, tickUtils.js)
|
|
117
|
+
const relatedFiles = ['defaults.js', 'utils.js', 'scoring.js', 'tickUtils.js'];
|
|
118
|
+
for (const file of relatedFiles) {
|
|
119
|
+
const relatedPath = join(upstreamElementsDir, pkg, 'controller/src', file);
|
|
120
|
+
if (existsSync(relatedPath)) {
|
|
121
|
+
const relatedTarget = join(targetDir, file.replace('.js', '.ts'));
|
|
122
|
+
let relatedContent = await readFile(relatedPath, 'utf-8');
|
|
123
|
+
// Apply all standard transformations
|
|
124
|
+
relatedContent = transformPipeline(relatedContent);
|
|
125
|
+
const { code: relatedConverted } = convertJsToTs(relatedContent, {
|
|
126
|
+
sourcePath: `pie-elements/packages/${pkg}/controller/src/${file}`,
|
|
127
|
+
commit: upstreamCommit,
|
|
128
|
+
});
|
|
129
|
+
const relatedIsNew = !existsSync(relatedTarget);
|
|
130
|
+
if (!relatedIsNew) {
|
|
131
|
+
const currentRelated = await readFile(relatedTarget, 'utf-8');
|
|
132
|
+
if (currentRelated === relatedConverted) {
|
|
133
|
+
this.result.filesSkipped++;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
this.result.filesUpdated++;
|
|
137
|
+
elementChanged = true;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.result.filesCopied++;
|
|
141
|
+
elementChanged = true;
|
|
142
|
+
}
|
|
143
|
+
await mkdir(dirname(relatedTarget), { recursive: true });
|
|
144
|
+
await writeFile(relatedTarget, relatedConverted, 'utf-8');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Ensure package.json has ESM module support (even in controller-only sync)
|
|
148
|
+
let wrotePkgJson = false;
|
|
149
|
+
const elementDir = join(targetBaseDir, pkg);
|
|
150
|
+
wrotePkgJson = await ensureElementPackageJson(pkg, elementDir, config);
|
|
151
|
+
await this.ensureElementViteConfig(pkg, elementDir, logger);
|
|
152
|
+
if (elementChanged || wrotePkgJson) {
|
|
153
|
+
if (logger.isVerbose()) {
|
|
154
|
+
logger.success(` 🔄 ${pkg}: controller package updated`);
|
|
155
|
+
}
|
|
156
|
+
this.touchedElementPackages.add(pkg);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (!logger.isVerbose()) {
|
|
160
|
+
logger.progressCompleteWithCount(this.touchedElementPackages.size, 'packages');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
logger.info(`\nSynced ${this.touchedElementPackages.size} controller package(s)`);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
count: this.touchedElementPackages.size,
|
|
167
|
+
packageNames: Array.from(this.touchedElementPackages).sort(),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
async cleanTargetDir(targetDir, label, logger) {
|
|
171
|
+
await cleanDirectory(targetDir, label, { dryRun: false, verbose: false }, logger);
|
|
172
|
+
}
|
|
173
|
+
async ensureElementViteConfig(_elementName, elementDir, _logger) {
|
|
174
|
+
if (!existsSync(elementDir)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const viteConfigPath = join(elementDir, 'vite.config.ts');
|
|
178
|
+
// Always regenerate to reflect current directory structure
|
|
179
|
+
// (e.g., if configure/ was skipped due to ESM incompatibility)
|
|
180
|
+
// Detect entry points
|
|
181
|
+
const entryPoints = {};
|
|
182
|
+
const indexEntry = existsAny([
|
|
183
|
+
join(elementDir, 'src/index.ts'),
|
|
184
|
+
join(elementDir, 'src/index.tsx'),
|
|
185
|
+
]);
|
|
186
|
+
if (indexEntry) {
|
|
187
|
+
entryPoints.index = 'src/index.ts';
|
|
188
|
+
}
|
|
189
|
+
const hasController = existsAny([
|
|
190
|
+
join(elementDir, 'src/controller/index.ts'),
|
|
191
|
+
join(elementDir, 'src/controller/index.tsx'),
|
|
192
|
+
]);
|
|
193
|
+
if (hasController) {
|
|
194
|
+
entryPoints['controller/index'] = 'src/controller/index.ts';
|
|
195
|
+
}
|
|
196
|
+
const hasConfigure = existsAny([
|
|
197
|
+
join(elementDir, 'src/configure/index.ts'),
|
|
198
|
+
join(elementDir, 'src/configure/index.tsx'),
|
|
199
|
+
]);
|
|
200
|
+
if (hasConfigure) {
|
|
201
|
+
entryPoints['configure/index'] = 'src/configure/index.ts';
|
|
202
|
+
}
|
|
203
|
+
const hasDelivery = existsAny([
|
|
204
|
+
join(elementDir, 'src/delivery/index.ts'),
|
|
205
|
+
join(elementDir, 'src/delivery/index.tsx'),
|
|
206
|
+
]);
|
|
207
|
+
if (hasDelivery) {
|
|
208
|
+
entryPoints['delivery/index'] = 'src/delivery/index.ts';
|
|
209
|
+
}
|
|
210
|
+
if (Object.keys(entryPoints).length === 0) {
|
|
211
|
+
return; // No entry points, skip vite config
|
|
212
|
+
}
|
|
213
|
+
// Format entry points for vite config
|
|
214
|
+
const entryLines = Object.entries(entryPoints)
|
|
215
|
+
.map(([key, value]) => ` '${key}': resolve(__dirname, '${value}'),`)
|
|
216
|
+
.join('\n');
|
|
217
|
+
const viteConfig = `import { resolve } from 'node:path';
|
|
218
|
+
import react from '@vitejs/plugin-react';
|
|
219
|
+
import { defineConfig } from 'vite';
|
|
220
|
+
|
|
221
|
+
export default defineConfig({
|
|
222
|
+
plugins: [react()],
|
|
223
|
+
build: {
|
|
224
|
+
lib: {
|
|
225
|
+
entry: {
|
|
226
|
+
${entryLines}
|
|
227
|
+
},
|
|
228
|
+
formats: ['es'],
|
|
229
|
+
},
|
|
230
|
+
rollupOptions: {
|
|
231
|
+
external: ${createExternalFunction('pielib')},
|
|
232
|
+
output: {
|
|
233
|
+
preserveModules: true,
|
|
234
|
+
preserveModulesRoot: 'src',
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
`;
|
|
240
|
+
await writeFile(viteConfigPath, viteConfig, 'utf-8');
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=sync-controllers-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-controllers-strategy.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-controllers-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ElementMetadata {
|
|
2
|
+
name: string;
|
|
3
|
+
title: string;
|
|
4
|
+
packageName: string;
|
|
5
|
+
hasAuthor: boolean;
|
|
6
|
+
hasPrint: boolean;
|
|
7
|
+
hasConfig: boolean;
|
|
8
|
+
hasSession: boolean;
|
|
9
|
+
demoCount: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Main entry point
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateDemoMetadata(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=sync-demo-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-demo-metadata.d.ts","sourceRoot":"","sources":["../../../src/lib/upstream/sync-demo-metadata.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AA0JD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1D"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate demo metadata for SvelteKit demo app
|
|
3
|
+
*
|
|
4
|
+
* This module generates:
|
|
5
|
+
* 1. Element registry (lib/elements/registry.ts)
|
|
6
|
+
* 2. Sample configs converted to JSON from each element
|
|
7
|
+
* 3. Sample sessions converted to JSON from each element
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
10
|
+
import { join, dirname } from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const REPO_ROOT = join(__dirname, '../../../../..');
|
|
14
|
+
const DEMO_APP_PATH = join(REPO_ROOT, 'apps/element-demo');
|
|
15
|
+
const ELEMENTS_REACT_PATH = join(REPO_ROOT, 'packages/elements-react');
|
|
16
|
+
/**
|
|
17
|
+
* Scan elements-react directory for all elements
|
|
18
|
+
*/
|
|
19
|
+
async function scanReactElements() {
|
|
20
|
+
const { readdirSync, existsSync: fsExistsSync, statSync } = await import('node:fs');
|
|
21
|
+
if (!fsExistsSync(ELEMENTS_REACT_PATH)) {
|
|
22
|
+
console.log('[demo-metadata] elements-react directory not found, skipping');
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
const elements = [];
|
|
26
|
+
const dirs = readdirSync(ELEMENTS_REACT_PATH);
|
|
27
|
+
for (const dir of dirs) {
|
|
28
|
+
const elementPath = join(ELEMENTS_REACT_PATH, dir);
|
|
29
|
+
const stat = statSync(elementPath);
|
|
30
|
+
if (!stat.isDirectory())
|
|
31
|
+
continue;
|
|
32
|
+
// Check for required structure
|
|
33
|
+
const srcPath = join(elementPath, 'src');
|
|
34
|
+
const deliveryPath = join(srcPath, 'delivery');
|
|
35
|
+
if (!fsExistsSync(deliveryPath))
|
|
36
|
+
continue;
|
|
37
|
+
// Check for author and print
|
|
38
|
+
const hasAuthor = fsExistsSync(join(srcPath, 'author'));
|
|
39
|
+
const hasPrint = fsExistsSync(join(srcPath, 'print'));
|
|
40
|
+
// Check for demo files
|
|
41
|
+
const docsPath = join(elementPath, 'docs/demo');
|
|
42
|
+
const hasConfig = fsExistsSync(join(docsPath, 'config.mjs'));
|
|
43
|
+
const hasSession = fsExistsSync(join(docsPath, 'session.mjs'));
|
|
44
|
+
// Generate title from name (e.g., "multiple-choice" -> "Multiple Choice")
|
|
45
|
+
const title = dir
|
|
46
|
+
.split('-')
|
|
47
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
48
|
+
.join(' ');
|
|
49
|
+
elements.push({
|
|
50
|
+
name: dir,
|
|
51
|
+
title,
|
|
52
|
+
packageName: `@pie-element/${dir}`,
|
|
53
|
+
hasAuthor,
|
|
54
|
+
hasPrint,
|
|
55
|
+
hasConfig,
|
|
56
|
+
hasSession,
|
|
57
|
+
demoCount: 0, // Will be updated in copySampleConfigs
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return elements;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate registry.ts file
|
|
64
|
+
*/
|
|
65
|
+
async function generateRegistry(elements) {
|
|
66
|
+
const registryPath = join(DEMO_APP_PATH, 'src/lib/elements/registry.ts');
|
|
67
|
+
const content = `/**
|
|
68
|
+
* Element Registry
|
|
69
|
+
*
|
|
70
|
+
* AUTO-GENERATED by upstream:sync command.
|
|
71
|
+
* DO NOT EDIT MANUALLY - changes will be overwritten.
|
|
72
|
+
*
|
|
73
|
+
* Generated: ${new Date().toISOString()}
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
export interface ElementMetadata {
|
|
77
|
+
name: string;
|
|
78
|
+
title: string;
|
|
79
|
+
packageName: string;
|
|
80
|
+
hasAuthor: boolean;
|
|
81
|
+
hasPrint: boolean;
|
|
82
|
+
hasConfig: boolean;
|
|
83
|
+
hasSession: boolean;
|
|
84
|
+
demoCount: number;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const ELEMENT_REGISTRY: readonly ElementMetadata[] = ${JSON.stringify(elements, null, 2)};
|
|
88
|
+
|
|
89
|
+
export function getElement(name: string): ElementMetadata | undefined {
|
|
90
|
+
return ELEMENT_REGISTRY.find((el) => el.name === name);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function getAllElements(): ElementMetadata[] {
|
|
94
|
+
return ELEMENT_REGISTRY;
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
await mkdir(dirname(registryPath), { recursive: true });
|
|
98
|
+
await writeFile(registryPath, content, 'utf-8');
|
|
99
|
+
console.log(`[demo-metadata] Generated registry with ${elements.length} elements`);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert and copy sample configs for an element as JSON
|
|
103
|
+
*/
|
|
104
|
+
async function copySampleConfigs(elements) {
|
|
105
|
+
for (const element of elements) {
|
|
106
|
+
const sourcePath = join(ELEMENTS_REACT_PATH, element.name, 'docs/demo');
|
|
107
|
+
const targetDir = join(DEMO_APP_PATH, 'src/lib/data/sample-configs/react');
|
|
108
|
+
await mkdir(targetDir, { recursive: true });
|
|
109
|
+
// Convert config.mjs to JSON
|
|
110
|
+
if (element.hasConfig) {
|
|
111
|
+
const sourceConfig = join(sourcePath, 'config.mjs');
|
|
112
|
+
const targetConfig = join(targetDir, `${element.name}.json`);
|
|
113
|
+
try {
|
|
114
|
+
// Dynamic import the .mjs file
|
|
115
|
+
const configModule = await import(`file://${sourceConfig}`);
|
|
116
|
+
let configData = configModule.default;
|
|
117
|
+
// Convert old format (models array) to new format (demos array)
|
|
118
|
+
if (configData?.models && !configData?.demos) {
|
|
119
|
+
console.log(`[demo-metadata] Converting ${element.name} from old format to new format`);
|
|
120
|
+
configData = {
|
|
121
|
+
demos: configData.models.map((model, index) => ({
|
|
122
|
+
id: index === 0 ? 'default' : `demo-${index + 1}`,
|
|
123
|
+
title: index === 0 ? 'Default Demo' : `Demo ${index + 1}`,
|
|
124
|
+
description: 'Default configuration',
|
|
125
|
+
tags: [],
|
|
126
|
+
model: model,
|
|
127
|
+
session: { value: [] },
|
|
128
|
+
})),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Count demos (now all in 'demos' format)
|
|
132
|
+
if (configData?.demos && Array.isArray(configData.demos)) {
|
|
133
|
+
element.demoCount = configData.demos.length;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
element.demoCount = 0;
|
|
137
|
+
}
|
|
138
|
+
// Write as JSON
|
|
139
|
+
await writeFile(targetConfig, JSON.stringify(configData, null, 2) + '\n', 'utf-8');
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
console.warn(`[demo-metadata] Failed to convert config for ${element.name}:`, e);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Note: session.mjs files are no longer copied as separate files.
|
|
146
|
+
// Sessions are now embedded within each demo object in the config.
|
|
147
|
+
// Old format session files are automatically converted during config import above.
|
|
148
|
+
}
|
|
149
|
+
console.log(`[demo-metadata] Converted sample configs to JSON for ${elements.length} elements`);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Main entry point
|
|
153
|
+
*/
|
|
154
|
+
export async function generateDemoMetadata() {
|
|
155
|
+
console.log('[demo-metadata] Scanning elements...');
|
|
156
|
+
const reactElements = await scanReactElements();
|
|
157
|
+
const allElements = [...reactElements].sort((a, b) => a.name.localeCompare(b.name));
|
|
158
|
+
console.log(`[demo-metadata] Found ${reactElements.length} React elements`);
|
|
159
|
+
// Copy sample configs first so demoCount gets populated
|
|
160
|
+
await copySampleConfigs(allElements);
|
|
161
|
+
// Then generate registry with updated demoCount values
|
|
162
|
+
await generateRegistry(allElements);
|
|
163
|
+
console.log('[demo-metadata] ✓ Demo metadata generation complete');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=sync-demo-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-demo-metadata.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-demo-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Logger } from '../../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Add development export conditions to element packages.
|
|
4
|
+
* This allows Vite to resolve directly to src/ files in development mode
|
|
5
|
+
* for Hot Module Reload (HMR) without needing a custom plugin.
|
|
6
|
+
*
|
|
7
|
+
* @param elementsDir - Path to the elements-react directory
|
|
8
|
+
* @param packageNames - Optional array of specific package names to process (e.g., ['multiple-choice'])
|
|
9
|
+
* @param logger - Logger instance for output
|
|
10
|
+
* @returns Number of packages updated
|
|
11
|
+
*/
|
|
12
|
+
export declare function addDevelopmentExports(elementsDir: string, packageNames: string[] | undefined, logger: Logger): Promise<number>;
|
|
13
|
+
//# sourceMappingURL=sync-dev-exports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-dev-exports.d.ts","sourceRoot":"","sources":["../../../src/lib/upstream/sync-dev-exports.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAkGpD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Map of export paths to their likely source file extensions.
|
|
5
|
+
* This determines which source files to look for when adding development export conditions.
|
|
6
|
+
*/
|
|
7
|
+
const SOURCE_EXTENSIONS = {
|
|
8
|
+
'.': ['index.ts', 'index.tsx', 'index.js'],
|
|
9
|
+
'./delivery': ['delivery/index.ts', 'delivery/index.tsx', 'delivery/index.js'],
|
|
10
|
+
'./author': ['author/index.tsx', 'author/index.ts', 'author/index.js'],
|
|
11
|
+
'./controller': ['controller/index.ts', 'controller/index.js'],
|
|
12
|
+
'./print': ['print/index.tsx', 'print/index.ts', 'print/index.js'],
|
|
13
|
+
'./configure': ['configure/index.tsx', 'configure/index.ts', 'configure/index.js'],
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Find the source file for a given export path in an element package.
|
|
17
|
+
*/
|
|
18
|
+
function findSourceFile(elementPath, exportPath) {
|
|
19
|
+
const possibleFiles = SOURCE_EXTENSIONS[exportPath] || [];
|
|
20
|
+
for (const file of possibleFiles) {
|
|
21
|
+
const fullPath = join(elementPath, 'src', file);
|
|
22
|
+
if (existsSync(fullPath)) {
|
|
23
|
+
return `./src/${file}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Add development export conditions to a package.json file.
|
|
30
|
+
* Returns true if the file was modified, false otherwise.
|
|
31
|
+
*/
|
|
32
|
+
function updatePackageJson(pkgPath, logger) {
|
|
33
|
+
const pkgJsonPath = join(pkgPath, 'package.json');
|
|
34
|
+
if (!existsSync(pkgJsonPath)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const content = readFileSync(pkgJsonPath, 'utf-8');
|
|
38
|
+
const pkg = JSON.parse(content);
|
|
39
|
+
if (!pkg.exports || typeof pkg.exports !== 'object') {
|
|
40
|
+
logger.debug(` ⚠️ No exports field found in ${pkg.name || pkgPath}`);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
let modified = false;
|
|
44
|
+
for (const [exportPath, exportConfig] of Object.entries(pkg.exports)) {
|
|
45
|
+
// Skip if not an object (string exports)
|
|
46
|
+
if (typeof exportConfig !== 'object') {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// Skip if already has development condition
|
|
50
|
+
if ('development' in exportConfig) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Find the source file
|
|
54
|
+
const sourceFile = findSourceFile(pkgPath, exportPath);
|
|
55
|
+
if (sourceFile) {
|
|
56
|
+
// Add development condition as the first entry
|
|
57
|
+
pkg.exports[exportPath] = {
|
|
58
|
+
development: sourceFile,
|
|
59
|
+
...exportConfig,
|
|
60
|
+
};
|
|
61
|
+
modified = true;
|
|
62
|
+
logger.debug(` ✓ Added development export for ${exportPath} -> ${sourceFile}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
logger.debug(` ⚠️ Could not find source file for ${exportPath}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (modified) {
|
|
69
|
+
// Write back with proper formatting
|
|
70
|
+
writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Add development export conditions to element packages.
|
|
77
|
+
* This allows Vite to resolve directly to src/ files in development mode
|
|
78
|
+
* for Hot Module Reload (HMR) without needing a custom plugin.
|
|
79
|
+
*
|
|
80
|
+
* @param elementsDir - Path to the elements-react directory
|
|
81
|
+
* @param packageNames - Optional array of specific package names to process (e.g., ['multiple-choice'])
|
|
82
|
+
* @param logger - Logger instance for output
|
|
83
|
+
* @returns Number of packages updated
|
|
84
|
+
*/
|
|
85
|
+
export async function addDevelopmentExports(elementsDir, packageNames, logger) {
|
|
86
|
+
if (!existsSync(elementsDir)) {
|
|
87
|
+
logger.warn(`Elements directory not found: ${elementsDir}`);
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
let updated = 0;
|
|
91
|
+
const packagesToProcess = packageNames || [];
|
|
92
|
+
// If no specific packages provided, we don't process anything
|
|
93
|
+
// (this function is meant to be called with specific packages after sync)
|
|
94
|
+
if (packagesToProcess.length === 0) {
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
for (const pkgName of packagesToProcess) {
|
|
98
|
+
const elementPath = join(elementsDir, pkgName);
|
|
99
|
+
if (!existsSync(elementPath)) {
|
|
100
|
+
logger.debug(` Package not found: ${pkgName}`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
logger.debug(` Processing ${pkgName}...`);
|
|
104
|
+
const wasUpdated = updatePackageJson(elementPath, logger);
|
|
105
|
+
if (wasUpdated) {
|
|
106
|
+
updated++;
|
|
107
|
+
logger.debug(` ✓ Updated\n`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
logger.debug(` → Skipped (no changes needed)\n`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return updated;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=sync-dev-exports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-dev-exports.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-dev-exports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared external dependency configuration for Vite builds
|
|
3
|
+
*
|
|
4
|
+
* These dependencies should NOT be bundled into library outputs.
|
|
5
|
+
* Instead, they are resolved at runtime from the consuming application.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if a module ID should be treated as external (not bundled)
|
|
9
|
+
*
|
|
10
|
+
* Categories of externals:
|
|
11
|
+
* 1. Framework peer dependencies (React, MUI, Emotion) - MUST be external to avoid duplicate instances
|
|
12
|
+
* 2. Internal monorepo packages (@pie-lib, @pie-element, @pie-element) - External for separate resolution
|
|
13
|
+
* 3. Utility libraries (prop-types, classnames, debug) - External to reduce duplication across packages
|
|
14
|
+
* 4. Specialized UI libraries (@dnd-kit, react-transition-group, styled-components) - External to avoid version conflicts
|
|
15
|
+
* 5. Lodash variants (lodash/lodash-es) - External for runtime resolution via import maps
|
|
16
|
+
* 6. D3 modules - External as they're commonly shared
|
|
17
|
+
*/
|
|
18
|
+
export declare function isExternal(id: string, variant: 'element' | 'pielib'): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Generate external function for Vite rollupOptions
|
|
21
|
+
* Use this in vite.config.ts generation
|
|
22
|
+
*/
|
|
23
|
+
export declare function createExternalFunction(variant: 'element' | 'pielib'): string;
|
|
24
|
+
/**
|
|
25
|
+
* Generate external function for Konva-based elements (preserveModules: false)
|
|
26
|
+
* These bundle konva, react-konva, scheduler, and react-reconciler to avoid runtime resolution issues
|
|
27
|
+
*/
|
|
28
|
+
export declare function createKonvaExternalFunction(): string;
|
|
29
|
+
//# sourceMappingURL=sync-externals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-externals.d.ts","sourceRoot":"","sources":["../../../src/lib/upstream/sync-externals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CA8D7E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CA+B5E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAmCpD"}
|