@pie-element/cli 0.1.1 → 0.1.2-next.0
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 +48 -10
- package/dist/commands/dev/demo/index.d.ts +1 -1
- package/dist/commands/dev/demo/index.js +21 -0
- package/dist/commands/dev/demo/index.js.map +1 -1
- package/dist/commands/dev/test-bundler.d.ts +0 -1
- package/dist/commands/dev/test-bundler.js +2 -10
- package/dist/commands/dev/test-bundler.js.map +1 -1
- package/dist/commands/docs/generate.d.ts +16 -0
- package/dist/commands/docs/generate.js +150 -0
- package/dist/commands/docs/generate.js.map +1 -0
- package/dist/commands/docs/verify.d.ts +12 -0
- package/dist/commands/docs/verify.js +40 -0
- package/dist/commands/docs/verify.js.map +1 -0
- package/dist/commands/packages/create-controllers.d.ts +0 -1
- package/dist/commands/packages/create-controllers.js.map +1 -1
- package/dist/commands/packages/create-lib-react.d.ts +0 -1
- package/dist/commands/packages/create-lib-react.js +1 -3
- package/dist/commands/packages/create-lib-react.js.map +1 -1
- package/dist/commands/packages/create-react-elements.d.ts +0 -1
- package/dist/commands/packages/create-react-elements.js +2 -3
- package/dist/commands/packages/create-react-elements.js.map +1 -1
- package/dist/commands/packages/enable-publishing.d.ts +0 -1
- package/dist/commands/packages/enable-publishing.js +26 -23
- package/dist/commands/packages/enable-publishing.js.map +1 -1
- package/dist/commands/packages/init-synced-elements.d.ts +0 -1
- package/dist/commands/packages/init-synced-elements.js +1 -1
- package/dist/commands/packages/init-synced-elements.js.map +1 -1
- package/dist/commands/upstream/analyze-esm.d.ts +0 -1
- package/dist/commands/upstream/analyze-esm.js +5 -1
- package/dist/commands/upstream/analyze-esm.js.map +1 -1
- package/dist/commands/upstream/check.d.ts +0 -1
- package/dist/commands/upstream/check.js.map +1 -1
- package/dist/commands/upstream/deps.d.ts +0 -1
- package/dist/commands/upstream/deps.js.map +1 -1
- package/dist/commands/upstream/sync.d.ts +11 -2
- package/dist/commands/upstream/sync.js +364 -25
- package/dist/commands/upstream/sync.js.map +1 -1
- package/dist/commands/upstream/track.d.ts +0 -1
- package/dist/commands/upstream/track.js.map +1 -1
- package/dist/commands/upstream/update.d.ts +0 -1
- package/dist/commands/upstream/update.js +37 -7
- package/dist/commands/upstream/update.js.map +1 -1
- package/dist/commands/verify/controllers.d.ts +0 -1
- package/dist/commands/verify/controllers.js +213 -59
- package/dist/commands/verify/controllers.js.map +1 -1
- package/dist/commands/verify/dependency-integrity.d.ts +18 -0
- package/dist/commands/verify/dependency-integrity.js +147 -0
- package/dist/commands/verify/dependency-integrity.js.map +1 -0
- package/dist/commands/verify/react-build.d.ts +0 -1
- package/dist/commands/verify/react-build.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/docs/contract-validator.d.ts +12 -0
- package/dist/lib/docs/contract-validator.js +38 -0
- package/dist/lib/docs/contract-validator.js.map +1 -0
- package/dist/lib/docs/contracts.d.ts +11 -0
- package/dist/lib/docs/contracts.js +241 -0
- package/dist/lib/docs/contracts.js.map +1 -0
- package/dist/lib/docs/discovery.d.ts +10 -0
- package/dist/lib/docs/discovery.js +91 -0
- package/dist/lib/docs/discovery.js.map +1 -0
- package/dist/lib/docs/generator.d.ts +14 -0
- package/dist/lib/docs/generator.js +450 -0
- package/dist/lib/docs/generator.js.map +1 -0
- package/dist/lib/docs/source-extractor.d.ts +2 -0
- package/dist/lib/docs/source-extractor.js +209 -0
- package/dist/lib/docs/source-extractor.js.map +1 -0
- package/dist/lib/docs/types.d.ts +77 -0
- package/dist/lib/docs/types.js +2 -0
- package/dist/lib/docs/types.js.map +1 -0
- package/dist/lib/upstream/repo-utils.d.ts +0 -1
- package/dist/lib/upstream/repo-utils.js.map +1 -1
- package/dist/lib/upstream/sync-compatibility.d.ts +0 -1
- package/dist/lib/upstream/sync-compatibility.js.map +1 -1
- package/dist/lib/upstream/sync-constants.d.ts +35 -7
- package/dist/lib/upstream/sync-constants.js +40 -11
- package/dist/lib/upstream/sync-constants.js.map +1 -1
- package/dist/lib/upstream/sync-controllers-strategy.d.ts +0 -1
- package/dist/lib/upstream/sync-controllers-strategy.js +14 -4
- package/dist/lib/upstream/sync-controllers-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-demo-metadata.d.ts +0 -1
- package/dist/lib/upstream/sync-demo-metadata.js +1 -1
- package/dist/lib/upstream/sync-demo-metadata.js.map +1 -1
- package/dist/lib/upstream/sync-entry-discovery.d.ts +3 -0
- package/dist/lib/upstream/sync-entry-discovery.js +23 -0
- package/dist/lib/upstream/sync-entry-discovery.js.map +1 -0
- package/dist/lib/upstream/sync-externals.d.ts +7 -7
- package/dist/lib/upstream/sync-externals.js +51 -35
- package/dist/lib/upstream/sync-externals.js.map +1 -1
- package/dist/lib/upstream/sync-filesystem.d.ts +0 -1
- package/dist/lib/upstream/sync-filesystem.js.map +1 -1
- package/dist/lib/upstream/sync-imports.d.ts +82 -62
- package/dist/lib/upstream/sync-imports.js +658 -185
- package/dist/lib/upstream/sync-imports.js.map +1 -1
- package/dist/lib/upstream/sync-package-json.d.ts +0 -1
- package/dist/lib/upstream/sync-package-json.js +7 -0
- package/dist/lib/upstream/sync-package-json.js.map +1 -1
- package/dist/lib/upstream/sync-package-manager.d.ts +14 -4
- package/dist/lib/upstream/sync-package-manager.js +405 -72
- package/dist/lib/upstream/sync-package-manager.js.map +1 -1
- package/dist/lib/upstream/sync-pielib-strategy.d.ts +2 -1
- package/dist/lib/upstream/sync-pielib-strategy.js +228 -110
- package/dist/lib/upstream/sync-pielib-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-presets.d.ts +52 -0
- package/dist/lib/upstream/sync-presets.js +175 -0
- package/dist/lib/upstream/sync-presets.js.map +1 -0
- package/dist/lib/upstream/sync-react-strategy.d.ts +6 -1
- package/dist/lib/upstream/sync-react-strategy.js +342 -134
- package/dist/lib/upstream/sync-react-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-source-edit.d.ts +14 -0
- package/dist/lib/upstream/sync-source-edit.js +89 -0
- package/dist/lib/upstream/sync-source-edit.js.map +1 -0
- package/dist/lib/upstream/sync-source-tree.d.ts +22 -0
- package/dist/lib/upstream/sync-source-tree.js +99 -0
- package/dist/lib/upstream/sync-source-tree.js.map +1 -0
- package/dist/lib/upstream/sync-strategy.d.ts +1 -1
- package/dist/lib/upstream/sync-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-summary.d.ts +0 -1
- package/dist/lib/upstream/sync-summary.js.map +1 -1
- package/dist/lib/upstream/sync-transforms.d.ts +13 -11
- package/dist/lib/upstream/sync-transforms.js +23 -17
- package/dist/lib/upstream/sync-transforms.js.map +1 -1
- package/dist/lib/upstream/sync-vite-config.d.ts +13 -1
- package/dist/lib/upstream/sync-vite-config.js +65 -46
- package/dist/lib/upstream/sync-vite-config.js.map +1 -1
- package/dist/utils/compatibility.d.ts +13 -1
- package/dist/utils/compatibility.js +143 -2
- package/dist/utils/compatibility.js.map +1 -1
- package/dist/utils/conversion.d.ts +0 -1
- package/dist/utils/conversion.js.map +1 -1
- package/dist/utils/dependency-integrity.d.ts +37 -0
- package/dist/utils/dependency-integrity.js +557 -0
- package/dist/utils/dependency-integrity.js.map +1 -0
- package/dist/utils/git.d.ts +0 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/package-json.d.ts +0 -1
- package/dist/utils/package-json.js.map +1 -1
- package/package.json +25 -8
- package/.compatibility/report.json +0 -2491
- package/.turbo/turbo-build.log +0 -1
- package/CHANGELOG.md +0 -8
- package/REFACTORING.md +0 -131
- package/bin/dev.js +0 -5
- package/dist/commands/dev/demo/index.d.ts.map +0 -1
- package/dist/commands/dev/test-bundler.d.ts.map +0 -1
- package/dist/commands/mathquill/migrate.d.ts +0 -20
- package/dist/commands/mathquill/migrate.d.ts.map +0 -1
- package/dist/commands/mathquill/migrate.js +0 -240
- package/dist/commands/mathquill/migrate.js.map +0 -1
- package/dist/commands/mathquill/status.d.ts +0 -20
- package/dist/commands/mathquill/status.d.ts.map +0 -1
- package/dist/commands/mathquill/status.js +0 -231
- package/dist/commands/mathquill/status.js.map +0 -1
- package/dist/commands/packages/create-controllers.d.ts.map +0 -1
- package/dist/commands/packages/create-lib-react.d.ts.map +0 -1
- package/dist/commands/packages/create-react-elements.d.ts.map +0 -1
- package/dist/commands/packages/enable-publishing.d.ts.map +0 -1
- package/dist/commands/packages/init-synced-elements.d.ts.map +0 -1
- package/dist/commands/upstream/analyze-esm.d.ts.map +0 -1
- package/dist/commands/upstream/check.d.ts.map +0 -1
- package/dist/commands/upstream/deps.d.ts.map +0 -1
- package/dist/commands/upstream/sync-mathquill.d.ts +0 -12
- package/dist/commands/upstream/sync-mathquill.d.ts.map +0 -1
- package/dist/commands/upstream/sync-mathquill.js +0 -97
- package/dist/commands/upstream/sync-mathquill.js.map +0 -1
- package/dist/commands/upstream/sync.d.ts.map +0 -1
- package/dist/commands/upstream/track.d.ts.map +0 -1
- package/dist/commands/upstream/update.d.ts.map +0 -1
- package/dist/commands/verify/controllers.d.ts.map +0 -1
- package/dist/commands/verify/react-build.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/mathquill/extension-generator.d.ts +0 -9
- package/dist/lib/mathquill/extension-generator.d.ts.map +0 -1
- package/dist/lib/mathquill/extension-generator.js +0 -107
- package/dist/lib/mathquill/extension-generator.js.map +0 -1
- package/dist/lib/mathquill/khan-extractor.d.ts +0 -16
- package/dist/lib/mathquill/khan-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/khan-extractor.js +0 -148
- package/dist/lib/mathquill/khan-extractor.js.map +0 -1
- package/dist/lib/mathquill/learnosity-extractor.d.ts +0 -15
- package/dist/lib/mathquill/learnosity-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/learnosity-extractor.js +0 -170
- package/dist/lib/mathquill/learnosity-extractor.js.map +0 -1
- package/dist/lib/mathquill/migration-orchestrator.d.ts +0 -77
- package/dist/lib/mathquill/migration-orchestrator.d.ts.map +0 -1
- package/dist/lib/mathquill/migration-orchestrator.js +0 -391
- package/dist/lib/mathquill/migration-orchestrator.js.map +0 -1
- package/dist/lib/mathquill/package-updater.d.ts +0 -9
- package/dist/lib/mathquill/package-updater.d.ts.map +0 -1
- package/dist/lib/mathquill/package-updater.js +0 -103
- package/dist/lib/mathquill/package-updater.js.map +0 -1
- package/dist/lib/mathquill/pie-extractor.d.ts +0 -14
- package/dist/lib/mathquill/pie-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/pie-extractor.js +0 -167
- package/dist/lib/mathquill/pie-extractor.js.map +0 -1
- package/dist/lib/upstream/repo-utils.d.ts.map +0 -1
- package/dist/lib/upstream/sync-compatibility.d.ts.map +0 -1
- package/dist/lib/upstream/sync-constants.d.ts.map +0 -1
- package/dist/lib/upstream/sync-controllers-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-demo-metadata.d.ts.map +0 -1
- package/dist/lib/upstream/sync-dev-exports.d.ts +0 -13
- package/dist/lib/upstream/sync-dev-exports.d.ts.map +0 -1
- package/dist/lib/upstream/sync-dev-exports.js +0 -115
- package/dist/lib/upstream/sync-dev-exports.js.map +0 -1
- package/dist/lib/upstream/sync-externals.d.ts.map +0 -1
- package/dist/lib/upstream/sync-filesystem.d.ts.map +0 -1
- package/dist/lib/upstream/sync-imports.d.ts.map +0 -1
- package/dist/lib/upstream/sync-mathquill.d.ts +0 -19
- package/dist/lib/upstream/sync-mathquill.d.ts.map +0 -1
- package/dist/lib/upstream/sync-mathquill.js +0 -160
- package/dist/lib/upstream/sync-mathquill.js.map +0 -1
- package/dist/lib/upstream/sync-package-json.d.ts.map +0 -1
- package/dist/lib/upstream/sync-package-manager.d.ts.map +0 -1
- package/dist/lib/upstream/sync-pielib-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-react-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-summary.d.ts.map +0 -1
- package/dist/lib/upstream/sync-transforms.d.ts.map +0 -1
- package/dist/lib/upstream/sync-vite-config.d.ts.map +0 -1
- package/dist/utils/compatibility.d.ts.map +0 -1
- package/dist/utils/conversion.d.ts.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/package-json.d.ts.map +0 -1
- package/packages/cli/bin/dev.js +0 -5
- package/packages/cli/bin/run.js +0 -5
- package/src/commands/dev/demo/index.ts +0 -313
- package/src/commands/dev/test-bundler.ts +0 -345
- package/src/commands/mathquill/migrate.ts +0 -269
- package/src/commands/mathquill/status.ts +0 -267
- package/src/commands/packages/create-controllers.ts +0 -127
- package/src/commands/packages/create-lib-react.ts +0 -279
- package/src/commands/packages/create-react-elements.ts +0 -306
- package/src/commands/packages/enable-publishing.ts +0 -161
- package/src/commands/packages/init-synced-elements.ts +0 -259
- package/src/commands/upstream/README.md +0 -444
- package/src/commands/upstream/analyze-esm.ts +0 -1973
- package/src/commands/upstream/check.ts +0 -228
- package/src/commands/upstream/deps.ts +0 -222
- package/src/commands/upstream/sync-mathquill.ts +0 -108
- package/src/commands/upstream/sync.ts +0 -687
- package/src/commands/upstream/track.ts +0 -145
- package/src/commands/upstream/update.ts +0 -110
- package/src/commands/verify/controllers.ts +0 -166
- package/src/commands/verify/react-build.ts +0 -171
- package/src/index.ts +0 -1
- package/src/lib/mathquill/extension-generator.ts +0 -111
- package/src/lib/mathquill/khan-extractor.ts +0 -175
- package/src/lib/mathquill/learnosity-extractor.ts +0 -198
- package/src/lib/mathquill/migration-orchestrator.ts +0 -513
- package/src/lib/mathquill/package-updater.ts +0 -120
- package/src/lib/mathquill/pie-extractor.ts +0 -194
- package/src/lib/upstream/repo-utils.ts +0 -18
- package/src/lib/upstream/sync-compatibility.ts +0 -89
- package/src/lib/upstream/sync-constants.ts +0 -77
- package/src/lib/upstream/sync-controllers-strategy.ts +0 -291
- package/src/lib/upstream/sync-demo-metadata.ts +0 -199
- package/src/lib/upstream/sync-dev-exports.ts +0 -151
- package/src/lib/upstream/sync-externals.ts +0 -159
- package/src/lib/upstream/sync-filesystem.ts +0 -87
- package/src/lib/upstream/sync-imports.ts +0 -992
- package/src/lib/upstream/sync-mathquill.ts +0 -194
- package/src/lib/upstream/sync-package-json.ts +0 -86
- package/src/lib/upstream/sync-package-manager.ts +0 -694
- package/src/lib/upstream/sync-pielib-strategy.ts +0 -441
- package/src/lib/upstream/sync-react-strategy.ts +0 -945
- package/src/lib/upstream/sync-strategy.ts +0 -61
- package/src/lib/upstream/sync-summary.ts +0 -194
- package/src/lib/upstream/sync-transforms.ts +0 -154
- package/src/lib/upstream/sync-vite-config.ts +0 -243
- package/src/types/es-module-lexer.d.ts +0 -4
- package/src/utils/compatibility.ts +0 -182
- package/src/utils/conversion.ts +0 -153
- package/src/utils/git.ts +0 -63
- package/src/utils/logger.ts +0 -69
- package/src/utils/package-json.ts +0 -43
- package/tests/sync-package-manager.test.ts +0 -112
- package/tests/transform-assign-props.test.ts +0 -101
- package/tsconfig.json +0 -15
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
const asRecord = (value) => value && typeof value === 'object' && !Array.isArray(value)
|
|
6
|
+
? value
|
|
7
|
+
: null;
|
|
8
|
+
const getPathValue = (value, path) => {
|
|
9
|
+
if (!path || path.trim().length === 0) {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
const segments = path.split('.').map((s) => s.trim());
|
|
13
|
+
let current = value;
|
|
14
|
+
for (const segment of segments) {
|
|
15
|
+
const record = asRecord(current);
|
|
16
|
+
if (!record || !(segment in record)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
current = record[segment];
|
|
20
|
+
}
|
|
21
|
+
return current;
|
|
22
|
+
};
|
|
23
|
+
const evaluateTemplate = (expr, scope) => {
|
|
24
|
+
if (ts.isNoSubstitutionTemplateLiteral(expr)) {
|
|
25
|
+
return expr.text;
|
|
26
|
+
}
|
|
27
|
+
let result = expr.head.text;
|
|
28
|
+
for (const span of expr.templateSpans) {
|
|
29
|
+
const evalExpr = evaluateNode(span.expression, scope);
|
|
30
|
+
if (evalExpr === undefined || evalExpr === null) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
result += String(evalExpr) + span.literal.text;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
const evaluateObjectLiteral = (node, scope) => {
|
|
38
|
+
const output = {};
|
|
39
|
+
for (const property of node.properties) {
|
|
40
|
+
if (ts.isPropertyAssignment(property)) {
|
|
41
|
+
const key = ts.isIdentifier(property.name)
|
|
42
|
+
? property.name.text
|
|
43
|
+
: ts.isStringLiteral(property.name)
|
|
44
|
+
? property.name.text
|
|
45
|
+
: ts.isNumericLiteral(property.name)
|
|
46
|
+
? property.name.text
|
|
47
|
+
: undefined;
|
|
48
|
+
if (!key) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const value = evaluateNode(property.initializer, scope);
|
|
52
|
+
if (value !== undefined) {
|
|
53
|
+
output[key] = value;
|
|
54
|
+
}
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (ts.isShorthandPropertyAssignment(property)) {
|
|
58
|
+
const value = scope.get(property.name.text);
|
|
59
|
+
if (value !== undefined) {
|
|
60
|
+
output[property.name.text] = value;
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (ts.isSpreadAssignment(property)) {
|
|
65
|
+
const spreadValue = evaluateNode(property.expression, scope);
|
|
66
|
+
const spreadRecord = asRecord(spreadValue);
|
|
67
|
+
if (spreadRecord) {
|
|
68
|
+
Object.assign(output, spreadRecord);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return output;
|
|
73
|
+
};
|
|
74
|
+
const evaluateArrayLiteral = (node, scope) => {
|
|
75
|
+
const output = [];
|
|
76
|
+
for (const item of node.elements) {
|
|
77
|
+
if (ts.isSpreadElement(item)) {
|
|
78
|
+
const spreadValue = evaluateNode(item.expression, scope);
|
|
79
|
+
if (Array.isArray(spreadValue)) {
|
|
80
|
+
output.push(...spreadValue);
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
output.push(evaluateNode(item, scope));
|
|
85
|
+
}
|
|
86
|
+
return output;
|
|
87
|
+
};
|
|
88
|
+
const evaluateNode = (node, scope) => {
|
|
89
|
+
if (ts.isAsExpression(node) || ts.isSatisfiesExpression(node)) {
|
|
90
|
+
return evaluateNode(node.expression, scope);
|
|
91
|
+
}
|
|
92
|
+
if (ts.isParenthesizedExpression(node)) {
|
|
93
|
+
return evaluateNode(node.expression, scope);
|
|
94
|
+
}
|
|
95
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
96
|
+
return evaluateObjectLiteral(node, scope);
|
|
97
|
+
}
|
|
98
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
99
|
+
return evaluateArrayLiteral(node, scope);
|
|
100
|
+
}
|
|
101
|
+
if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {
|
|
102
|
+
return node.text;
|
|
103
|
+
}
|
|
104
|
+
if (ts.isTemplateExpression(node)) {
|
|
105
|
+
return evaluateTemplate(node, scope);
|
|
106
|
+
}
|
|
107
|
+
if (ts.isNumericLiteral(node)) {
|
|
108
|
+
return Number(node.text);
|
|
109
|
+
}
|
|
110
|
+
if (node.kind === ts.SyntaxKind.TrueKeyword) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
if (node.kind === ts.SyntaxKind.FalseKeyword) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (node.kind === ts.SyntaxKind.NullKeyword) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
if (ts.isIdentifier(node)) {
|
|
120
|
+
return scope.get(node.text);
|
|
121
|
+
}
|
|
122
|
+
if (ts.isPrefixUnaryExpression(node)) {
|
|
123
|
+
const value = evaluateNode(node.operand, scope);
|
|
124
|
+
if (typeof value !== 'number') {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
switch (node.operator) {
|
|
128
|
+
case ts.SyntaxKind.MinusToken:
|
|
129
|
+
return -value;
|
|
130
|
+
case ts.SyntaxKind.PlusToken:
|
|
131
|
+
return value;
|
|
132
|
+
default:
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
};
|
|
138
|
+
const extractExportExpression = (sourceFile, exportName, scope) => {
|
|
139
|
+
for (const statement of sourceFile.statements) {
|
|
140
|
+
if (ts.isExportAssignment(statement) && exportName === 'default') {
|
|
141
|
+
return evaluateNode(statement.expression, scope);
|
|
142
|
+
}
|
|
143
|
+
if (ts.isVariableStatement(statement)) {
|
|
144
|
+
const hasExport = statement.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
145
|
+
if (!hasExport) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
149
|
+
if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (declaration.name.text === exportName) {
|
|
153
|
+
return evaluateNode(declaration.initializer, scope);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
159
|
+
};
|
|
160
|
+
const buildScope = (sourceFile) => {
|
|
161
|
+
const scope = new Map();
|
|
162
|
+
// Evaluate top-level const declarations. Multiple passes handle dependency order.
|
|
163
|
+
for (let pass = 0; pass < 4; pass++) {
|
|
164
|
+
let changed = false;
|
|
165
|
+
for (const statement of sourceFile.statements) {
|
|
166
|
+
if (!ts.isVariableStatement(statement)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
170
|
+
if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const identifier = declaration.name.text;
|
|
174
|
+
if (scope.has(identifier)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const evaluated = evaluateNode(declaration.initializer, scope);
|
|
178
|
+
if (evaluated !== undefined) {
|
|
179
|
+
scope.set(identifier, evaluated);
|
|
180
|
+
changed = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (!changed) {
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return scope;
|
|
189
|
+
};
|
|
190
|
+
export const loadPointerValue = async (packageDir, pointer) => {
|
|
191
|
+
const filePath = join(packageDir, pointer.file);
|
|
192
|
+
if (!existsSync(filePath)) {
|
|
193
|
+
throw new Error(`Pointer file does not exist: ${pointer.file}`);
|
|
194
|
+
}
|
|
195
|
+
const source = await readFile(filePath, 'utf-8');
|
|
196
|
+
const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
197
|
+
const scope = buildScope(sourceFile);
|
|
198
|
+
const exportName = pointer.exportName || 'default';
|
|
199
|
+
const exportValue = extractExportExpression(sourceFile, exportName, scope);
|
|
200
|
+
if (exportValue === undefined) {
|
|
201
|
+
throw new Error(`Unable to evaluate export "${exportName}" from ${pointer.file}`);
|
|
202
|
+
}
|
|
203
|
+
const pathValue = getPathValue(exportValue, pointer.path);
|
|
204
|
+
if (pathValue === undefined) {
|
|
205
|
+
throw new Error(`Unable to resolve path "${pointer.path}" from export "${exportName}" in ${pointer.file}`);
|
|
206
|
+
}
|
|
207
|
+
return pathValue;
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=source-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-extractor.js","sourceRoot":"","sources":["../../../src/lib/docs/source-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport ts from 'typescript';\nimport type { PieDocsSourcePointer } from './types.js';\n\ntype EvaluationScope = Map<string, unknown>;\n\nconst asRecord = (value: unknown): Record<string, unknown> | null =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n\nconst getPathValue = (value: unknown, path?: string): unknown => {\n if (!path || path.trim().length === 0) {\n return value;\n }\n const segments = path.split('.').map((s) => s.trim());\n let current: unknown = value;\n for (const segment of segments) {\n const record = asRecord(current);\n if (!record || !(segment in record)) {\n return undefined;\n }\n current = record[segment];\n }\n return current;\n};\n\nconst evaluateTemplate = (\n expr: ts.TemplateExpression | ts.NoSubstitutionTemplateLiteral,\n scope: EvaluationScope\n): unknown => {\n if (ts.isNoSubstitutionTemplateLiteral(expr)) {\n return expr.text;\n }\n\n let result = expr.head.text;\n for (const span of expr.templateSpans) {\n const evalExpr = evaluateNode(span.expression, scope);\n if (evalExpr === undefined || evalExpr === null) {\n return undefined;\n }\n result += String(evalExpr) + span.literal.text;\n }\n return result;\n};\n\nconst evaluateObjectLiteral = (\n node: ts.ObjectLiteralExpression,\n scope: EvaluationScope\n): unknown => {\n const output: Record<string, unknown> = {};\n\n for (const property of node.properties) {\n if (ts.isPropertyAssignment(property)) {\n const key = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : ts.isNumericLiteral(property.name)\n ? property.name.text\n : undefined;\n if (!key) {\n continue;\n }\n const value = evaluateNode(property.initializer, scope);\n if (value !== undefined) {\n output[key] = value;\n }\n continue;\n }\n\n if (ts.isShorthandPropertyAssignment(property)) {\n const value = scope.get(property.name.text);\n if (value !== undefined) {\n output[property.name.text] = value;\n }\n continue;\n }\n\n if (ts.isSpreadAssignment(property)) {\n const spreadValue = evaluateNode(property.expression, scope);\n const spreadRecord = asRecord(spreadValue);\n if (spreadRecord) {\n Object.assign(output, spreadRecord);\n }\n }\n }\n\n return output;\n};\n\nconst evaluateArrayLiteral = (node: ts.ArrayLiteralExpression, scope: EvaluationScope): unknown => {\n const output: unknown[] = [];\n for (const item of node.elements) {\n if (ts.isSpreadElement(item)) {\n const spreadValue = evaluateNode(item.expression, scope);\n if (Array.isArray(spreadValue)) {\n output.push(...spreadValue);\n }\n continue;\n }\n output.push(evaluateNode(item, scope));\n }\n return output;\n};\n\nconst evaluateNode = (node: ts.Expression, scope: EvaluationScope): unknown => {\n if (ts.isAsExpression(node) || ts.isSatisfiesExpression(node)) {\n return evaluateNode(node.expression, scope);\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return evaluateNode(node.expression, scope);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n return evaluateObjectLiteral(node, scope);\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return evaluateArrayLiteral(node, scope);\n }\n\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text;\n }\n\n if (ts.isTemplateExpression(node)) {\n return evaluateTemplate(node, scope);\n }\n\n if (ts.isNumericLiteral(node)) {\n return Number(node.text);\n }\n\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return true;\n }\n\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return false;\n }\n\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return null;\n }\n\n if (ts.isIdentifier(node)) {\n return scope.get(node.text);\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n const value = evaluateNode(node.operand, scope);\n if (typeof value !== 'number') {\n return undefined;\n }\n switch (node.operator) {\n case ts.SyntaxKind.MinusToken:\n return -value;\n case ts.SyntaxKind.PlusToken:\n return value;\n default:\n return undefined;\n }\n }\n\n return undefined;\n};\n\nconst extractExportExpression = (\n sourceFile: ts.SourceFile,\n exportName: string,\n scope: EvaluationScope\n): unknown => {\n for (const statement of sourceFile.statements) {\n if (ts.isExportAssignment(statement) && exportName === 'default') {\n return evaluateNode(statement.expression, scope);\n }\n\n if (ts.isVariableStatement(statement)) {\n const hasExport = statement.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n if (!hasExport) {\n continue;\n }\n\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {\n continue;\n }\n if (declaration.name.text === exportName) {\n return evaluateNode(declaration.initializer, scope);\n }\n }\n }\n }\n\n return undefined;\n};\n\nconst buildScope = (sourceFile: ts.SourceFile): EvaluationScope => {\n const scope: EvaluationScope = new Map();\n\n // Evaluate top-level const declarations. Multiple passes handle dependency order.\n for (let pass = 0; pass < 4; pass++) {\n let changed = false;\n for (const statement of sourceFile.statements) {\n if (!ts.isVariableStatement(statement)) {\n continue;\n }\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {\n continue;\n }\n const identifier = declaration.name.text;\n if (scope.has(identifier)) {\n continue;\n }\n const evaluated = evaluateNode(declaration.initializer, scope);\n if (evaluated !== undefined) {\n scope.set(identifier, evaluated);\n changed = true;\n }\n }\n }\n if (!changed) {\n break;\n }\n }\n\n return scope;\n};\n\nexport const loadPointerValue = async (\n packageDir: string,\n pointer: PieDocsSourcePointer\n): Promise<unknown> => {\n const filePath = join(packageDir, pointer.file);\n if (!existsSync(filePath)) {\n throw new Error(`Pointer file does not exist: ${pointer.file}`);\n }\n\n const source = await readFile(filePath, 'utf-8');\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS\n );\n const scope = buildScope(sourceFile);\n const exportName = pointer.exportName || 'default';\n const exportValue = extractExportExpression(sourceFile, exportName, scope);\n\n if (exportValue === undefined) {\n throw new Error(`Unable to evaluate export \"${exportName}\" from ${pointer.file}`);\n }\n\n const pathValue = getPathValue(exportValue, pointer.path);\n if (pathValue === undefined) {\n throw new Error(\n `Unable to resolve path \"${pointer.path}\" from export \"${exportName}\" in ${pointer.file}`\n );\n }\n return pathValue;\n};\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type PieElementFramework = 'react' | 'svelte';
|
|
2
|
+
export interface PieDocsSourcePointer {
|
|
3
|
+
file: string;
|
|
4
|
+
exportName?: string;
|
|
5
|
+
path?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PieDocsPropertyMetadata {
|
|
8
|
+
title?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
notes?: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
enum?: Array<string | number | boolean | null>;
|
|
14
|
+
minimum?: number;
|
|
15
|
+
maximum?: number;
|
|
16
|
+
minLength?: number;
|
|
17
|
+
maxLength?: number;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
itemType?: string;
|
|
20
|
+
examples?: unknown[];
|
|
21
|
+
}
|
|
22
|
+
export interface PieDocsViewMetadata {
|
|
23
|
+
pie?: Record<string, PieDocsPropertyMetadata>;
|
|
24
|
+
config?: Record<string, PieDocsPropertyMetadata>;
|
|
25
|
+
}
|
|
26
|
+
export interface PieDocsViewContract {
|
|
27
|
+
view: string;
|
|
28
|
+
pie: PieDocsSourcePointer;
|
|
29
|
+
config: PieDocsSourcePointer;
|
|
30
|
+
description?: string;
|
|
31
|
+
metadata?: PieDocsViewMetadata;
|
|
32
|
+
}
|
|
33
|
+
export interface PieDocsContract {
|
|
34
|
+
elementName: string;
|
|
35
|
+
packageName: string;
|
|
36
|
+
framework: PieElementFramework;
|
|
37
|
+
summary?: string;
|
|
38
|
+
supportedModes?: string[];
|
|
39
|
+
views: PieDocsViewContract[];
|
|
40
|
+
}
|
|
41
|
+
export interface PieDocsProperty {
|
|
42
|
+
path: string;
|
|
43
|
+
type: string;
|
|
44
|
+
required: boolean;
|
|
45
|
+
defaultValue?: unknown;
|
|
46
|
+
title?: string;
|
|
47
|
+
description?: string;
|
|
48
|
+
notes?: string;
|
|
49
|
+
enum?: Array<string | number | boolean | null>;
|
|
50
|
+
minimum?: number;
|
|
51
|
+
maximum?: number;
|
|
52
|
+
minLength?: number;
|
|
53
|
+
maxLength?: number;
|
|
54
|
+
pattern?: string;
|
|
55
|
+
itemType?: string;
|
|
56
|
+
examples?: unknown[];
|
|
57
|
+
}
|
|
58
|
+
export interface PieDocsViewOutput {
|
|
59
|
+
view: string;
|
|
60
|
+
pieProperties: PieDocsProperty[];
|
|
61
|
+
configProperties: PieDocsProperty[];
|
|
62
|
+
}
|
|
63
|
+
export interface PieDocsElementOutput {
|
|
64
|
+
contract: PieDocsContract;
|
|
65
|
+
packageDir: string;
|
|
66
|
+
generatedAt: string;
|
|
67
|
+
views: PieDocsViewOutput[];
|
|
68
|
+
sourcesUsed: string[];
|
|
69
|
+
}
|
|
70
|
+
export interface ElementPackageInfo {
|
|
71
|
+
elementName: string;
|
|
72
|
+
packageName: string;
|
|
73
|
+
framework: PieElementFramework;
|
|
74
|
+
packageDir: string;
|
|
75
|
+
packageDescription?: string;
|
|
76
|
+
exportsMap?: Record<string, unknown>;
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/docs/types.ts"],"names":[],"mappings":"","sourcesContent":["export type PieElementFramework = 'react' | 'svelte';\n\nexport interface PieDocsSourcePointer {\n file: string;\n exportName?: string;\n path?: string;\n}\n\nexport interface PieDocsPropertyMetadata {\n title?: string;\n description?: string;\n notes?: string;\n type?: string;\n required?: boolean;\n enum?: Array<string | number | boolean | null>;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n itemType?: string;\n examples?: unknown[];\n}\n\nexport interface PieDocsViewMetadata {\n pie?: Record<string, PieDocsPropertyMetadata>;\n config?: Record<string, PieDocsPropertyMetadata>;\n}\n\nexport interface PieDocsViewContract {\n view: string;\n pie: PieDocsSourcePointer;\n config: PieDocsSourcePointer;\n description?: string;\n metadata?: PieDocsViewMetadata;\n}\n\nexport interface PieDocsContract {\n elementName: string;\n packageName: string;\n framework: PieElementFramework;\n summary?: string;\n supportedModes?: string[];\n views: PieDocsViewContract[];\n}\n\nexport interface PieDocsProperty {\n path: string;\n type: string;\n required: boolean;\n defaultValue?: unknown;\n title?: string;\n description?: string;\n notes?: string;\n enum?: Array<string | number | boolean | null>;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n itemType?: string;\n examples?: unknown[];\n}\n\nexport interface PieDocsViewOutput {\n view: string;\n pieProperties: PieDocsProperty[];\n configProperties: PieDocsProperty[];\n}\n\nexport interface PieDocsElementOutput {\n contract: PieDocsContract;\n packageDir: string;\n generatedAt: string;\n views: PieDocsViewOutput[];\n sourcesUsed: string[];\n}\n\nexport interface ElementPackageInfo {\n elementName: string;\n packageName: string;\n framework: PieElementFramework;\n packageDir: string;\n packageDescription?: string;\n exportsMap?: Record<string, unknown>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-utils.js","sourceRoot":"","sources":["../../../src/lib/upstream/repo-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAQrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,YAAqB,EAAU,EAAE,CAC/F,GAAG,KAAK,iBAAiB,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAQ,EAAE;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"repo-utils.js","sourceRoot":"","sources":["../../../src/lib/upstream/repo-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAQrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,YAAqB,EAAU,EAAE,CAC/F,GAAG,KAAK,iBAAiB,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAQ,EAAE;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { existsSync } from 'node:fs';\n\ntype RepoSpec = {\n label: string;\n path: string;\n extraMessage?: string;\n};\n\nexport const formatRepoNotFound = (label: string, path: string, extraMessage?: string): string =>\n `${label} not found at ${path}${extraMessage ? `\\n${extraMessage}` : ''}`;\n\nexport const assertReposExist = (repos: RepoSpec[]): void => {\n for (const repo of repos) {\n if (!existsSync(repo.path)) {\n throw new Error(formatRepoNotFound(repo.label, repo.path, repo.extraMessage));\n }\n }\n};\n"]}
|
|
@@ -26,4 +26,3 @@ export declare function isElementCompatible(elementName: string, context: SyncCo
|
|
|
26
26
|
* Get compatibility blockers for an element subdirectory
|
|
27
27
|
*/
|
|
28
28
|
export declare function getCompatibilityBlockers(elementName: string, subdir: SubdirectoryType, context: SyncContext): string[];
|
|
29
|
-
//# sourceMappingURL=sync-compatibility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-compatibility.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-compatibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IAED,4CAA4C;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QAC1E,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE;YACE,OAAO,aAAa,CAAC,UAAU,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAoB;IAC3E,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClD,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"sync-compatibility.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-compatibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IAED,4CAA4C;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QAC1E,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;QACzE;YACE,OAAO,aAAa,CAAC,UAAU,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAoB;IAC3E,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAwB,EACxB,OAAoB;IAEpB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClD,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["/**\n * Compatibility checking utilities for upstream sync operations\n *\n * Consolidates subdirectory-level ESM compatibility checks that were\n * duplicated across controllers-strategy and react-strategy.\n */\n\nimport type { SyncContext } from './sync-strategy.js';\n\nexport type SubdirectoryType = 'src' | 'configure' | 'controller';\n\n/**\n * Check if a subdirectory is ESM-compatible based on the compatibility report\n *\n * This function consolidates the duplicated compatibility checking logic from\n * ControllersStrategy and ReactComponentsStrategy.\n *\n * @param elementName - Name of the element (e.g., \"multiple-choice\")\n * @param subdir - Subdirectory to check (\"src\", \"configure\", or \"controller\")\n * @param context - Sync context containing the compatibility report\n * @returns true if compatible or no report available, false if incompatible\n */\nexport function isSubdirectoryCompatible(\n elementName: string,\n subdir: SubdirectoryType,\n context: SyncContext\n): boolean {\n // If no compatibility report, assume compatible (backward compatibility)\n if (!context.compatibilityReport) {\n return true;\n }\n\n const elementDetail = context.compatibilityReport.elementDetails[elementName];\n if (!elementDetail) {\n return true; // Element not in report, assume compatible\n }\n\n // Check subdirectory-specific compatibility\n switch (subdir) {\n case 'configure':\n return elementDetail.configure?.compatible ?? elementDetail.compatible;\n case 'controller':\n return elementDetail.controller?.compatible ?? elementDetail.compatible;\n case 'src':\n return elementDetail.studentUI?.compatible ?? elementDetail.compatible;\n default:\n return elementDetail.compatible;\n }\n}\n\n/**\n * Check if an element is ESM-compatible overall\n */\nexport function isElementCompatible(elementName: string, context: SyncContext): boolean {\n if (!context.compatibilityReport) {\n return true;\n }\n\n return context.compatibilityReport.elements.includes(elementName);\n}\n\n/**\n * Get compatibility blockers for an element subdirectory\n */\nexport function getCompatibilityBlockers(\n elementName: string,\n subdir: SubdirectoryType,\n context: SyncContext\n): string[] {\n if (!context.compatibilityReport) {\n return [];\n }\n\n const elementDetail = context.compatibilityReport.elementDetails[elementName];\n if (!elementDetail) {\n return [];\n }\n\n switch (subdir) {\n case 'configure':\n return elementDetail.configure?.blockers ?? [];\n case 'controller':\n return elementDetail.controller?.blockers ?? [];\n case 'src':\n return elementDetail.studentUI?.blockers ?? [];\n default:\n return [];\n }\n}\n"]}
|
|
@@ -12,12 +12,12 @@ export declare const WORKSPACE: {
|
|
|
12
12
|
readonly PIE_ELEMENT_PREFIX: "@pie-element/";
|
|
13
13
|
readonly PIE_FRAMEWORK_PREFIX: "@pie-framework/";
|
|
14
14
|
};
|
|
15
|
-
export declare const EXCLUDED_UPSTREAM_ELEMENTS: readonly ["boilerplate-item-type"
|
|
15
|
+
export declare const EXCLUDED_UPSTREAM_ELEMENTS: readonly ["boilerplate-item-type"];
|
|
16
|
+
export declare const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES: readonly ["math-rendering"];
|
|
16
17
|
export declare const BUILD_TOOLS: {
|
|
17
|
-
readonly VITE: "^
|
|
18
|
+
readonly VITE: "^8.0.1";
|
|
18
19
|
readonly TYPESCRIPT: "^5.9.3";
|
|
19
|
-
readonly VITE_REACT_PLUGIN: "^
|
|
20
|
-
readonly LODASH_ES: "^4.17.22";
|
|
20
|
+
readonly VITE_REACT_PLUGIN: "^6.0.1";
|
|
21
21
|
};
|
|
22
22
|
export declare const REACT: {
|
|
23
23
|
readonly VERSION: "^18.0.0";
|
|
@@ -38,13 +38,41 @@ export declare const PACKAGE_DEFAULTS: {
|
|
|
38
38
|
readonly SIDE_EFFECTS: false;
|
|
39
39
|
readonly FILES: readonly ["dist", "src"];
|
|
40
40
|
};
|
|
41
|
+
export declare const ELEMENT_BROWSER_VITE_CONFIG = "../../../tools/vite/element-browser.config.ts";
|
|
42
|
+
export declare const ELEMENT_LEGACY_PRINT_VITE_CONFIG = "../../../tools/vite/element-legacy-print.config.ts";
|
|
43
|
+
export type ElementBuildLanes = {
|
|
44
|
+
/** dist/browser/** - the browser ESM surface consumed by pie-players. */
|
|
45
|
+
browser?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* module/print.js - a self-contained print bundle (React inlined, zero
|
|
48
|
+
* externals) for the unmodified @pie-framework/pie-print client loader, which
|
|
49
|
+
* uses a bare import() with no import map and so cannot read exports["./print"].
|
|
50
|
+
* See PIE-839 and docs/PRINT_SUPPORT.md.
|
|
51
|
+
*/
|
|
52
|
+
legacyPrint?: boolean;
|
|
53
|
+
/** dist/index.iife.js - the fully self-contained script-tag surface. */
|
|
54
|
+
iife?: boolean;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Compose a synced element's build script from the lanes it needs.
|
|
58
|
+
*
|
|
59
|
+
* Composed rather than enumerated on purpose. This used to be four hardcoded
|
|
60
|
+
* constants covering the browser/iife combinations, so when PIE-839 added the
|
|
61
|
+
* legacy print lane there was nowhere for it to live: it was written straight
|
|
62
|
+
* into the twelve print-enabled manifests, and the next sync regenerated
|
|
63
|
+
* `scripts.build` from the constants and silently dropped it. Print then broke
|
|
64
|
+
* for every synced element with no failing check. Adding a lane here keeps it in
|
|
65
|
+
* the generated output instead of relying on a hand-edited manifest surviving.
|
|
66
|
+
*/
|
|
67
|
+
export declare function composeElementBuildScript(lanes?: ElementBuildLanes): string;
|
|
41
68
|
export declare const SCRIPTS: {
|
|
42
|
-
readonly BUILD:
|
|
43
|
-
readonly
|
|
69
|
+
readonly BUILD: string;
|
|
70
|
+
readonly BUILD_WITH_BROWSER: string;
|
|
71
|
+
readonly BUILD_WITH_IIFE: string;
|
|
72
|
+
readonly BUILD_WITH_IIFE_AND_BROWSER: string;
|
|
44
73
|
readonly DEV: "bun x vite";
|
|
45
74
|
readonly DEMO: "bun x vite --mode demo";
|
|
46
75
|
readonly TEST: "bun x vitest run";
|
|
47
76
|
};
|
|
48
77
|
export declare const COMPATIBILITY_FILE = "./.compatibility/report.json";
|
|
49
78
|
export declare const HISTORY_FILE = ".upstream-sync-history.json";
|
|
50
|
-
//# sourceMappingURL=sync-constants.d.ts.map
|
|
@@ -15,18 +15,16 @@ export const WORKSPACE = {
|
|
|
15
15
|
PIE_FRAMEWORK_PREFIX: '@pie-framework/',
|
|
16
16
|
};
|
|
17
17
|
// Upstream element packages intentionally excluded from sync.
|
|
18
|
-
// These templates are not used in pie-elements-ng runtime
|
|
19
|
-
export const EXCLUDED_UPSTREAM_ELEMENTS = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
];
|
|
18
|
+
// These templates are not used in pie-elements-ng runtime.
|
|
19
|
+
export const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'];
|
|
20
|
+
// Upstream @pie-lib packages intentionally excluded from sync.
|
|
21
|
+
// math-rendering stays local (wrapper re-exports shared MathJax adapter).
|
|
22
|
+
export const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering'];
|
|
24
23
|
// Build tool versions
|
|
25
24
|
export const BUILD_TOOLS = {
|
|
26
|
-
VITE: '^
|
|
25
|
+
VITE: '^8.0.1',
|
|
27
26
|
TYPESCRIPT: '^5.9.3',
|
|
28
|
-
VITE_REACT_PLUGIN: '^
|
|
29
|
-
LODASH_ES: '^4.17.22',
|
|
27
|
+
VITE_REACT_PLUGIN: '^6.0.1',
|
|
30
28
|
};
|
|
31
29
|
// React versions
|
|
32
30
|
export const REACT = {
|
|
@@ -52,9 +50,40 @@ export const PACKAGE_DEFAULTS = {
|
|
|
52
50
|
FILES: ['dist', 'src'],
|
|
53
51
|
};
|
|
54
52
|
// Build scripts
|
|
53
|
+
export const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';
|
|
54
|
+
export const ELEMENT_LEGACY_PRINT_VITE_CONFIG = '../../../tools/vite/element-legacy-print.config.ts';
|
|
55
|
+
/**
|
|
56
|
+
* Compose a synced element's build script from the lanes it needs.
|
|
57
|
+
*
|
|
58
|
+
* Composed rather than enumerated on purpose. This used to be four hardcoded
|
|
59
|
+
* constants covering the browser/iife combinations, so when PIE-839 added the
|
|
60
|
+
* legacy print lane there was nowhere for it to live: it was written straight
|
|
61
|
+
* into the twelve print-enabled manifests, and the next sync regenerated
|
|
62
|
+
* `scripts.build` from the constants and silently dropped it. Print then broke
|
|
63
|
+
* for every synced element with no failing check. Adding a lane here keeps it in
|
|
64
|
+
* the generated output instead of relying on a hand-edited manifest surviving.
|
|
65
|
+
*/
|
|
66
|
+
export function composeElementBuildScript(lanes = {}) {
|
|
67
|
+
const steps = ['bun x vite build'];
|
|
68
|
+
if (lanes.browser) {
|
|
69
|
+
steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);
|
|
70
|
+
}
|
|
71
|
+
if (lanes.legacyPrint) {
|
|
72
|
+
steps.push(`bun x vite build --config ${ELEMENT_LEGACY_PRINT_VITE_CONFIG}`);
|
|
73
|
+
}
|
|
74
|
+
if (lanes.iife) {
|
|
75
|
+
steps.push('bun x vite build --config vite.config.iife.ts');
|
|
76
|
+
}
|
|
77
|
+
steps.push('bun x tsc --emitDeclarationOnly');
|
|
78
|
+
return steps.join(' && ');
|
|
79
|
+
}
|
|
80
|
+
// Derived from composeElementBuildScript so the named variants cannot drift from
|
|
81
|
+
// the composer. Prefer calling the composer directly for new lane combinations.
|
|
55
82
|
export const SCRIPTS = {
|
|
56
|
-
BUILD:
|
|
57
|
-
|
|
83
|
+
BUILD: composeElementBuildScript(),
|
|
84
|
+
BUILD_WITH_BROWSER: composeElementBuildScript({ browser: true }),
|
|
85
|
+
BUILD_WITH_IIFE: composeElementBuildScript({ iife: true }),
|
|
86
|
+
BUILD_WITH_IIFE_AND_BROWSER: composeElementBuildScript({ browser: true, iife: true }),
|
|
58
87
|
DEV: 'bun x vite',
|
|
59
88
|
DEMO: 'bun x vite --mode demo',
|
|
60
89
|
TEST: 'bun x vitest run',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-constants.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,GAAG;CACZ,CAAC;AAEX,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,WAAW;IAC3B,kBAAkB,EAAE,eAAe;IACnC,oBAAoB,EAAE,iBAAiB;CAC/B,CAAC;AAEX,8DAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"sync-constants.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared constants for upstream sync operations\n */\n\n// Default repository paths\nexport const DEFAULT_PATHS = {\n PIE_ELEMENTS: '../pie-elements',\n PIE_LIB: '../pie-lib',\n PIE_ELEMENTS_NG: '.',\n} as const;\n\n// Workspace dependency patterns\nexport const WORKSPACE = {\n VERSION: 'workspace:*',\n PIE_LIB_PREFIX: '@pie-lib/',\n PIE_ELEMENT_PREFIX: '@pie-element/',\n PIE_FRAMEWORK_PREFIX: '@pie-framework/',\n} as const;\n\n// Upstream element packages intentionally excluded from sync.\n// These templates are not used in pie-elements-ng runtime.\nexport const EXCLUDED_UPSTREAM_ELEMENTS = ['boilerplate-item-type'] as const;\n\n// Upstream @pie-lib packages intentionally excluded from sync.\n// math-rendering stays local (wrapper re-exports shared MathJax adapter).\nexport const EXCLUDED_UPSTREAM_PIE_LIB_PACKAGES = ['math-rendering'] as const;\n\n// Build tool versions\nexport const BUILD_TOOLS = {\n VITE: '^8.0.1',\n TYPESCRIPT: '^5.9.3',\n VITE_REACT_PLUGIN: '^6.0.1',\n} as const;\n\n// React versions\nexport const REACT = {\n VERSION: '^18.0.0',\n TYPES_VERSION: '^18.2.0',\n} as const;\n\n// Directory patterns to skip\nexport const SKIP_PATTERNS = {\n TEST_DIRS: ['__tests__', '__mocks__'],\n FILE_EXTENSIONS: ['.js', '.jsx', '.ts', '.tsx'],\n} as const;\n\n// File types\nexport const FILE_TYPES = {\n JS: '.js',\n JSX: '.jsx',\n TS: '.ts',\n TSX: '.tsx',\n} as const;\n\n// Package.json defaults\nexport const PACKAGE_DEFAULTS = {\n TYPE: 'module',\n SIDE_EFFECTS: false,\n FILES: ['dist', 'src'],\n} as const;\n\n// Build scripts\nexport const ELEMENT_BROWSER_VITE_CONFIG = '../../../tools/vite/element-browser.config.ts';\nexport const ELEMENT_LEGACY_PRINT_VITE_CONFIG =\n '../../../tools/vite/element-legacy-print.config.ts';\n\nexport type ElementBuildLanes = {\n /** dist/browser/** - the browser ESM surface consumed by pie-players. */\n browser?: boolean;\n /**\n * module/print.js - a self-contained print bundle (React inlined, zero\n * externals) for the unmodified @pie-framework/pie-print client loader, which\n * uses a bare import() with no import map and so cannot read exports[\"./print\"].\n * See PIE-839 and docs/PRINT_SUPPORT.md.\n */\n legacyPrint?: boolean;\n /** dist/index.iife.js - the fully self-contained script-tag surface. */\n iife?: boolean;\n};\n\n/**\n * Compose a synced element's build script from the lanes it needs.\n *\n * Composed rather than enumerated on purpose. This used to be four hardcoded\n * constants covering the browser/iife combinations, so when PIE-839 added the\n * legacy print lane there was nowhere for it to live: it was written straight\n * into the twelve print-enabled manifests, and the next sync regenerated\n * `scripts.build` from the constants and silently dropped it. Print then broke\n * for every synced element with no failing check. Adding a lane here keeps it in\n * the generated output instead of relying on a hand-edited manifest surviving.\n */\nexport function composeElementBuildScript(lanes: ElementBuildLanes = {}): string {\n const steps = ['bun x vite build'];\n if (lanes.browser) {\n steps.push(`bun x vite build --config ${ELEMENT_BROWSER_VITE_CONFIG}`);\n }\n if (lanes.legacyPrint) {\n steps.push(`bun x vite build --config ${ELEMENT_LEGACY_PRINT_VITE_CONFIG}`);\n }\n if (lanes.iife) {\n steps.push('bun x vite build --config vite.config.iife.ts');\n }\n steps.push('bun x tsc --emitDeclarationOnly');\n return steps.join(' && ');\n}\n\n// Derived from composeElementBuildScript so the named variants cannot drift from\n// the composer. Prefer calling the composer directly for new lane combinations.\nexport const SCRIPTS = {\n BUILD: composeElementBuildScript(),\n BUILD_WITH_BROWSER: composeElementBuildScript({ browser: true }),\n BUILD_WITH_IIFE: composeElementBuildScript({ iife: true }),\n BUILD_WITH_IIFE_AND_BROWSER: composeElementBuildScript({ browser: true, iife: true }),\n DEV: 'bun x vite',\n DEMO: 'bun x vite --mode demo',\n TEST: 'bun x vitest run',\n} as const;\n\n// Compatibility report file\nexport const COMPATIBILITY_FILE = './.compatibility/report.json';\n\n// Upstream history file\nexport const HISTORY_FILE = '.upstream-sync-history.json';\n"]}
|
|
@@ -76,7 +76,7 @@ export class ControllersStrategy {
|
|
|
76
76
|
const targetDir = join(targetBaseDir, pkg, 'src/controller');
|
|
77
77
|
const targetPath = join(targetDir, 'index.ts');
|
|
78
78
|
// Clean target controller subtree first so removed upstream files don't linger
|
|
79
|
-
await this.cleanTargetDir(targetDir, `elements-react/${pkg}/src/controller`, logger);
|
|
79
|
+
await this.cleanTargetDir(targetDir, `elements-react/${pkg}/src/controller`, logger, config.dryRun);
|
|
80
80
|
// Read source
|
|
81
81
|
let sourceContent = await readFile(controllerPath, 'utf-8');
|
|
82
82
|
// Apply all standard transformations
|
|
@@ -167,8 +167,8 @@ export class ControllersStrategy {
|
|
|
167
167
|
packageNames: Array.from(this.touchedElementPackages).sort(),
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
|
-
async cleanTargetDir(targetDir, label, logger) {
|
|
171
|
-
await cleanDirectory(targetDir, label, { dryRun
|
|
170
|
+
async cleanTargetDir(targetDir, label, logger, dryRun) {
|
|
171
|
+
await cleanDirectory(targetDir, label, { dryRun, verbose: false }, logger);
|
|
172
172
|
}
|
|
173
173
|
async ensureElementViteConfig(_elementName, elementDir, _logger) {
|
|
174
174
|
if (!existsSync(elementDir)) {
|
|
@@ -214,12 +214,22 @@ export class ControllersStrategy {
|
|
|
214
214
|
const entryLines = Object.entries(entryPoints)
|
|
215
215
|
.map(([key, value]) => ` '${key}': resolve(__dirname, '${value}'),`)
|
|
216
216
|
.join('\n');
|
|
217
|
-
const viteConfig = `import {
|
|
217
|
+
const viteConfig = `import { readFileSync } from 'node:fs';
|
|
218
|
+
import { resolve } from 'node:path';
|
|
218
219
|
import react from '@vitejs/plugin-react';
|
|
219
220
|
import { defineConfig } from 'vite';
|
|
220
221
|
|
|
222
|
+
const packageJson = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf-8')) as {
|
|
223
|
+
name?: string;
|
|
224
|
+
version?: string;
|
|
225
|
+
};
|
|
226
|
+
|
|
221
227
|
export default defineConfig({
|
|
222
228
|
plugins: [react()],
|
|
229
|
+
define: {
|
|
230
|
+
__PIE_PACKAGE_NAME__: JSON.stringify(packageJson.name ?? ''),
|
|
231
|
+
__PIE_PACKAGE_VERSION__: JSON.stringify(packageJson.version ?? 'local'),
|
|
232
|
+
},
|
|
223
233
|
build: {
|
|
224
234
|
lib: {
|
|
225
235
|
entry: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-controllers-strategy.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-controllers-strategy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-controllers-strategy.js","sourceRoot":"","sources":["../../../src/lib/upstream/sync-controllers-strategy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Controller sync strategy - syncs controller logic from upstream pie-elements\n *\n * Synced from: pie-elements/packages/{element}/controller/src/\n * Target: packages/elements-react/{element}/src/controller/\n */\n\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { convertJsToTs } from '../../utils/conversion.js';\nimport { getCurrentCommit } from '../../utils/git.js';\nimport type { SyncStrategy, SyncContext, SyncConfig, SyncResult } from './sync-strategy.js';\nimport { cleanDirectory, existsAny, readdir } from './sync-filesystem.js';\nimport { createExternalFunction } from './sync-externals.js';\nimport { createControllerTransformPipeline } from './sync-transforms.js';\nimport { ensureElementPackageJson } from './sync-package-manager.js';\nimport { isSubdirectoryCompatible } from './sync-compatibility.js';\nimport { EXCLUDED_UPSTREAM_ELEMENTS } from './sync-constants.js';\n\ninterface InternalSyncResult {\n filesChecked: number;\n filesCopied: number;\n filesSkipped: number;\n filesUpdated: number;\n}\n\nexport class ControllersStrategy implements SyncStrategy {\n private touchedElementPackages = new Set<string>();\n private result: InternalSyncResult = {\n filesChecked: 0,\n filesCopied: 0,\n filesSkipped: 0,\n filesUpdated: 0,\n };\n\n getName(): string {\n return 'controllers';\n }\n\n getDescription(): string {\n return 'controllers';\n }\n\n shouldRun(config: SyncConfig): boolean {\n return config.syncControllers;\n }\n\n async execute(context: SyncContext): Promise<SyncResult> {\n const { config, logger } = context;\n this.touchedElementPackages.clear();\n this.result = {\n filesChecked: 0,\n filesCopied: 0,\n filesSkipped: 0,\n filesUpdated: 0,\n };\n\n if (!logger.isVerbose()) {\n logger.progressStart('Syncing controllers...');\n } else {\n logger.section('📦 Syncing controllers');\n }\n\n const upstreamElementsDir = join(config.pieElements, 'packages');\n const targetBaseDir = join(config.pieElementsNg, 'packages/elements-react');\n\n const upstreamCommit = getCurrentCommit(config.pieElements);\n\n const packages = await readdir(upstreamElementsDir);\n\n for (const pkg of packages) {\n if (EXCLUDED_UPSTREAM_ELEMENTS.includes(pkg as (typeof EXCLUDED_UPSTREAM_ELEMENTS)[number])) {\n continue;\n }\n\n if (context.packageFilter && pkg !== context.packageFilter) {\n continue;\n }\n\n // Check if controller exists upstream\n const controllerPath = join(upstreamElementsDir, pkg, 'controller/src/index.js');\n if (!existsSync(controllerPath)) {\n continue;\n }\n\n // Check if controller subdirectory is ESM-compatible\n const controllerCompatible = isSubdirectoryCompatible(pkg, 'controller', context);\n if (!controllerCompatible) {\n if (logger.isVerbose()) {\n logger.info(` ⏭️ ${pkg}: skipping controller/ (not ESM-compatible)`);\n }\n continue;\n }\n\n this.result.filesChecked++;\n\n // Target: packages/elements-react/{element}/src/controller/index.ts\n const targetDir = join(targetBaseDir, pkg, 'src/controller');\n const targetPath = join(targetDir, 'index.ts');\n\n // Clean target controller subtree first so removed upstream files don't linger\n await this.cleanTargetDir(\n targetDir,\n `elements-react/${pkg}/src/controller`,\n logger,\n config.dryRun\n );\n\n // Read source\n let sourceContent = await readFile(controllerPath, 'utf-8');\n\n // Apply all standard transformations\n const transformPipeline = createControllerTransformPipeline();\n sourceContent = transformPipeline(sourceContent);\n\n // Convert JS to TS\n const { code: converted } = convertJsToTs(sourceContent, {\n sourcePath: `pie-elements/packages/${pkg}/controller/src/index.js`,\n commit: upstreamCommit,\n });\n\n let elementChanged = false;\n\n // Sync index.ts\n // NOTE: This comparison is exact (===) to ensure any changes in:\n // - Upstream source code\n // - Transformation logic (lodash-es, event packages, etc.)\n // - Sync version (tracked in @sync-version header)\n // will trigger a file update. This prioritizes correctness over speed.\n const isNew = !existsSync(targetPath);\n if (!isNew) {\n const currentContent = await readFile(targetPath, 'utf-8');\n if (currentContent === converted) {\n this.result.filesSkipped++;\n } else {\n this.result.filesUpdated++;\n elementChanged = true;\n await mkdir(dirname(targetPath), { recursive: true });\n await writeFile(targetPath, converted, 'utf-8');\n }\n } else {\n this.result.filesCopied++;\n elementChanged = true;\n await mkdir(dirname(targetPath), { recursive: true });\n await writeFile(targetPath, converted, 'utf-8');\n }\n\n // Also sync related files (defaults.js, utils.js, scoring.js, tickUtils.js)\n const relatedFiles = ['defaults.js', 'utils.js', 'scoring.js', 'tickUtils.js'];\n for (const file of relatedFiles) {\n const relatedPath = join(upstreamElementsDir, pkg, 'controller/src', file);\n if (existsSync(relatedPath)) {\n const relatedTarget = join(targetDir, file.replace('.js', '.ts'));\n let relatedContent = await readFile(relatedPath, 'utf-8');\n\n // Apply all standard transformations\n relatedContent = transformPipeline(relatedContent);\n\n const { code: relatedConverted } = convertJsToTs(relatedContent, {\n sourcePath: `pie-elements/packages/${pkg}/controller/src/${file}`,\n commit: upstreamCommit,\n });\n\n const relatedIsNew = !existsSync(relatedTarget);\n if (!relatedIsNew) {\n const currentRelated = await readFile(relatedTarget, 'utf-8');\n if (currentRelated === relatedConverted) {\n this.result.filesSkipped++;\n continue;\n }\n this.result.filesUpdated++;\n elementChanged = true;\n } else {\n this.result.filesCopied++;\n elementChanged = true;\n }\n\n await mkdir(dirname(relatedTarget), { recursive: true });\n await writeFile(relatedTarget, relatedConverted, 'utf-8');\n }\n }\n\n // Ensure package.json has ESM module support (even in controller-only sync)\n let wrotePkgJson = false;\n const elementDir = join(targetBaseDir, pkg);\n wrotePkgJson = await ensureElementPackageJson(pkg, elementDir, config);\n await this.ensureElementViteConfig(pkg, elementDir, logger);\n\n if (elementChanged || wrotePkgJson) {\n if (logger.isVerbose()) {\n logger.success(` 🔄 ${pkg}: controller package updated`);\n }\n this.touchedElementPackages.add(pkg);\n }\n }\n\n if (!logger.isVerbose()) {\n logger.progressCompleteWithCount(this.touchedElementPackages.size, 'packages');\n } else {\n logger.info(`\\nSynced ${this.touchedElementPackages.size} controller package(s)`);\n }\n return {\n count: this.touchedElementPackages.size,\n packageNames: Array.from(this.touchedElementPackages).sort(),\n };\n }\n\n private async cleanTargetDir(\n targetDir: string,\n label: string,\n logger: any,\n dryRun: boolean\n ): Promise<void> {\n await cleanDirectory(targetDir, label, { dryRun, verbose: false }, logger);\n }\n\n private async ensureElementViteConfig(\n _elementName: string,\n elementDir: string,\n _logger: any\n ): Promise<void> {\n if (!existsSync(elementDir)) {\n return;\n }\n\n const viteConfigPath = join(elementDir, 'vite.config.ts');\n\n // Always regenerate to reflect current directory structure\n // (e.g., if configure/ was skipped due to ESM incompatibility)\n\n // Detect entry points\n const entryPoints: Record<string, string> = {};\n const indexEntry = existsAny([\n join(elementDir, 'src/index.ts'),\n join(elementDir, 'src/index.tsx'),\n ]);\n if (indexEntry) {\n entryPoints.index = 'src/index.ts';\n }\n\n const hasController = existsAny([\n join(elementDir, 'src/controller/index.ts'),\n join(elementDir, 'src/controller/index.tsx'),\n ]);\n if (hasController) {\n entryPoints['controller/index'] = 'src/controller/index.ts';\n }\n\n const hasConfigure = existsAny([\n join(elementDir, 'src/configure/index.ts'),\n join(elementDir, 'src/configure/index.tsx'),\n ]);\n if (hasConfigure) {\n entryPoints['configure/index'] = 'src/configure/index.ts';\n }\n\n const hasDelivery = existsAny([\n join(elementDir, 'src/delivery/index.ts'),\n join(elementDir, 'src/delivery/index.tsx'),\n ]);\n if (hasDelivery) {\n entryPoints['delivery/index'] = 'src/delivery/index.ts';\n }\n\n if (Object.keys(entryPoints).length === 0) {\n return; // No entry points, skip vite config\n }\n\n // Format entry points for vite config\n const entryLines = Object.entries(entryPoints)\n .map(([key, value]) => ` '${key}': resolve(__dirname, '${value}'),`)\n .join('\\n');\n\n const viteConfig = `import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport react from '@vitejs/plugin-react';\nimport { defineConfig } from 'vite';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf-8')) as {\n name?: string;\n version?: string;\n};\n\nexport default defineConfig({\n plugins: [react()],\n define: {\n __PIE_PACKAGE_NAME__: JSON.stringify(packageJson.name ?? ''),\n __PIE_PACKAGE_VERSION__: JSON.stringify(packageJson.version ?? 'local'),\n },\n build: {\n lib: {\n entry: {\n${entryLines}\n },\n formats: ['es'],\n },\n rollupOptions: {\n external: ${createExternalFunction('pielib')},\n output: {\n preserveModules: true,\n preserveModulesRoot: 'src',\n },\n },\n },\n});\n`;\n\n await writeFile(viteConfigPath, viteConfig, 'utf-8');\n }\n}\n"]}
|