@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.
Files changed (281) hide show
  1. package/README.md +48 -10
  2. package/dist/commands/dev/demo/index.d.ts +1 -1
  3. package/dist/commands/dev/demo/index.js +21 -0
  4. package/dist/commands/dev/demo/index.js.map +1 -1
  5. package/dist/commands/dev/test-bundler.d.ts +0 -1
  6. package/dist/commands/dev/test-bundler.js +2 -10
  7. package/dist/commands/dev/test-bundler.js.map +1 -1
  8. package/dist/commands/docs/generate.d.ts +16 -0
  9. package/dist/commands/docs/generate.js +150 -0
  10. package/dist/commands/docs/generate.js.map +1 -0
  11. package/dist/commands/docs/verify.d.ts +12 -0
  12. package/dist/commands/docs/verify.js +40 -0
  13. package/dist/commands/docs/verify.js.map +1 -0
  14. package/dist/commands/packages/create-controllers.d.ts +0 -1
  15. package/dist/commands/packages/create-controllers.js.map +1 -1
  16. package/dist/commands/packages/create-lib-react.d.ts +0 -1
  17. package/dist/commands/packages/create-lib-react.js +1 -3
  18. package/dist/commands/packages/create-lib-react.js.map +1 -1
  19. package/dist/commands/packages/create-react-elements.d.ts +0 -1
  20. package/dist/commands/packages/create-react-elements.js +2 -3
  21. package/dist/commands/packages/create-react-elements.js.map +1 -1
  22. package/dist/commands/packages/enable-publishing.d.ts +0 -1
  23. package/dist/commands/packages/enable-publishing.js +26 -23
  24. package/dist/commands/packages/enable-publishing.js.map +1 -1
  25. package/dist/commands/packages/init-synced-elements.d.ts +0 -1
  26. package/dist/commands/packages/init-synced-elements.js +1 -1
  27. package/dist/commands/packages/init-synced-elements.js.map +1 -1
  28. package/dist/commands/upstream/analyze-esm.d.ts +0 -1
  29. package/dist/commands/upstream/analyze-esm.js +5 -1
  30. package/dist/commands/upstream/analyze-esm.js.map +1 -1
  31. package/dist/commands/upstream/check.d.ts +0 -1
  32. package/dist/commands/upstream/check.js.map +1 -1
  33. package/dist/commands/upstream/deps.d.ts +0 -1
  34. package/dist/commands/upstream/deps.js.map +1 -1
  35. package/dist/commands/upstream/sync.d.ts +11 -2
  36. package/dist/commands/upstream/sync.js +364 -25
  37. package/dist/commands/upstream/sync.js.map +1 -1
  38. package/dist/commands/upstream/track.d.ts +0 -1
  39. package/dist/commands/upstream/track.js.map +1 -1
  40. package/dist/commands/upstream/update.d.ts +0 -1
  41. package/dist/commands/upstream/update.js +37 -7
  42. package/dist/commands/upstream/update.js.map +1 -1
  43. package/dist/commands/verify/controllers.d.ts +0 -1
  44. package/dist/commands/verify/controllers.js +213 -59
  45. package/dist/commands/verify/controllers.js.map +1 -1
  46. package/dist/commands/verify/dependency-integrity.d.ts +18 -0
  47. package/dist/commands/verify/dependency-integrity.js +147 -0
  48. package/dist/commands/verify/dependency-integrity.js.map +1 -0
  49. package/dist/commands/verify/react-build.d.ts +0 -1
  50. package/dist/commands/verify/react-build.js.map +1 -1
  51. package/dist/index.d.ts +0 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/lib/docs/contract-validator.d.ts +12 -0
  54. package/dist/lib/docs/contract-validator.js +38 -0
  55. package/dist/lib/docs/contract-validator.js.map +1 -0
  56. package/dist/lib/docs/contracts.d.ts +11 -0
  57. package/dist/lib/docs/contracts.js +241 -0
  58. package/dist/lib/docs/contracts.js.map +1 -0
  59. package/dist/lib/docs/discovery.d.ts +10 -0
  60. package/dist/lib/docs/discovery.js +91 -0
  61. package/dist/lib/docs/discovery.js.map +1 -0
  62. package/dist/lib/docs/generator.d.ts +14 -0
  63. package/dist/lib/docs/generator.js +450 -0
  64. package/dist/lib/docs/generator.js.map +1 -0
  65. package/dist/lib/docs/source-extractor.d.ts +2 -0
  66. package/dist/lib/docs/source-extractor.js +209 -0
  67. package/dist/lib/docs/source-extractor.js.map +1 -0
  68. package/dist/lib/docs/types.d.ts +77 -0
  69. package/dist/lib/docs/types.js +2 -0
  70. package/dist/lib/docs/types.js.map +1 -0
  71. package/dist/lib/upstream/repo-utils.d.ts +0 -1
  72. package/dist/lib/upstream/repo-utils.js.map +1 -1
  73. package/dist/lib/upstream/sync-compatibility.d.ts +0 -1
  74. package/dist/lib/upstream/sync-compatibility.js.map +1 -1
  75. package/dist/lib/upstream/sync-constants.d.ts +35 -7
  76. package/dist/lib/upstream/sync-constants.js +40 -11
  77. package/dist/lib/upstream/sync-constants.js.map +1 -1
  78. package/dist/lib/upstream/sync-controllers-strategy.d.ts +0 -1
  79. package/dist/lib/upstream/sync-controllers-strategy.js +14 -4
  80. package/dist/lib/upstream/sync-controllers-strategy.js.map +1 -1
  81. package/dist/lib/upstream/sync-demo-metadata.d.ts +0 -1
  82. package/dist/lib/upstream/sync-demo-metadata.js +1 -1
  83. package/dist/lib/upstream/sync-demo-metadata.js.map +1 -1
  84. package/dist/lib/upstream/sync-entry-discovery.d.ts +3 -0
  85. package/dist/lib/upstream/sync-entry-discovery.js +23 -0
  86. package/dist/lib/upstream/sync-entry-discovery.js.map +1 -0
  87. package/dist/lib/upstream/sync-externals.d.ts +7 -7
  88. package/dist/lib/upstream/sync-externals.js +51 -35
  89. package/dist/lib/upstream/sync-externals.js.map +1 -1
  90. package/dist/lib/upstream/sync-filesystem.d.ts +0 -1
  91. package/dist/lib/upstream/sync-filesystem.js.map +1 -1
  92. package/dist/lib/upstream/sync-imports.d.ts +82 -62
  93. package/dist/lib/upstream/sync-imports.js +658 -185
  94. package/dist/lib/upstream/sync-imports.js.map +1 -1
  95. package/dist/lib/upstream/sync-package-json.d.ts +0 -1
  96. package/dist/lib/upstream/sync-package-json.js +7 -0
  97. package/dist/lib/upstream/sync-package-json.js.map +1 -1
  98. package/dist/lib/upstream/sync-package-manager.d.ts +14 -4
  99. package/dist/lib/upstream/sync-package-manager.js +405 -72
  100. package/dist/lib/upstream/sync-package-manager.js.map +1 -1
  101. package/dist/lib/upstream/sync-pielib-strategy.d.ts +2 -1
  102. package/dist/lib/upstream/sync-pielib-strategy.js +228 -110
  103. package/dist/lib/upstream/sync-pielib-strategy.js.map +1 -1
  104. package/dist/lib/upstream/sync-presets.d.ts +52 -0
  105. package/dist/lib/upstream/sync-presets.js +175 -0
  106. package/dist/lib/upstream/sync-presets.js.map +1 -0
  107. package/dist/lib/upstream/sync-react-strategy.d.ts +6 -1
  108. package/dist/lib/upstream/sync-react-strategy.js +342 -134
  109. package/dist/lib/upstream/sync-react-strategy.js.map +1 -1
  110. package/dist/lib/upstream/sync-source-edit.d.ts +14 -0
  111. package/dist/lib/upstream/sync-source-edit.js +89 -0
  112. package/dist/lib/upstream/sync-source-edit.js.map +1 -0
  113. package/dist/lib/upstream/sync-source-tree.d.ts +22 -0
  114. package/dist/lib/upstream/sync-source-tree.js +99 -0
  115. package/dist/lib/upstream/sync-source-tree.js.map +1 -0
  116. package/dist/lib/upstream/sync-strategy.d.ts +1 -1
  117. package/dist/lib/upstream/sync-strategy.js.map +1 -1
  118. package/dist/lib/upstream/sync-summary.d.ts +0 -1
  119. package/dist/lib/upstream/sync-summary.js.map +1 -1
  120. package/dist/lib/upstream/sync-transforms.d.ts +13 -11
  121. package/dist/lib/upstream/sync-transforms.js +23 -17
  122. package/dist/lib/upstream/sync-transforms.js.map +1 -1
  123. package/dist/lib/upstream/sync-vite-config.d.ts +13 -1
  124. package/dist/lib/upstream/sync-vite-config.js +65 -46
  125. package/dist/lib/upstream/sync-vite-config.js.map +1 -1
  126. package/dist/utils/compatibility.d.ts +13 -1
  127. package/dist/utils/compatibility.js +143 -2
  128. package/dist/utils/compatibility.js.map +1 -1
  129. package/dist/utils/conversion.d.ts +0 -1
  130. package/dist/utils/conversion.js.map +1 -1
  131. package/dist/utils/dependency-integrity.d.ts +37 -0
  132. package/dist/utils/dependency-integrity.js +557 -0
  133. package/dist/utils/dependency-integrity.js.map +1 -0
  134. package/dist/utils/git.d.ts +0 -1
  135. package/dist/utils/git.js.map +1 -1
  136. package/dist/utils/logger.d.ts +0 -1
  137. package/dist/utils/logger.js.map +1 -1
  138. package/dist/utils/package-json.d.ts +0 -1
  139. package/dist/utils/package-json.js.map +1 -1
  140. package/package.json +25 -8
  141. package/.compatibility/report.json +0 -2491
  142. package/.turbo/turbo-build.log +0 -1
  143. package/CHANGELOG.md +0 -8
  144. package/REFACTORING.md +0 -131
  145. package/bin/dev.js +0 -5
  146. package/dist/commands/dev/demo/index.d.ts.map +0 -1
  147. package/dist/commands/dev/test-bundler.d.ts.map +0 -1
  148. package/dist/commands/mathquill/migrate.d.ts +0 -20
  149. package/dist/commands/mathquill/migrate.d.ts.map +0 -1
  150. package/dist/commands/mathquill/migrate.js +0 -240
  151. package/dist/commands/mathquill/migrate.js.map +0 -1
  152. package/dist/commands/mathquill/status.d.ts +0 -20
  153. package/dist/commands/mathquill/status.d.ts.map +0 -1
  154. package/dist/commands/mathquill/status.js +0 -231
  155. package/dist/commands/mathquill/status.js.map +0 -1
  156. package/dist/commands/packages/create-controllers.d.ts.map +0 -1
  157. package/dist/commands/packages/create-lib-react.d.ts.map +0 -1
  158. package/dist/commands/packages/create-react-elements.d.ts.map +0 -1
  159. package/dist/commands/packages/enable-publishing.d.ts.map +0 -1
  160. package/dist/commands/packages/init-synced-elements.d.ts.map +0 -1
  161. package/dist/commands/upstream/analyze-esm.d.ts.map +0 -1
  162. package/dist/commands/upstream/check.d.ts.map +0 -1
  163. package/dist/commands/upstream/deps.d.ts.map +0 -1
  164. package/dist/commands/upstream/sync-mathquill.d.ts +0 -12
  165. package/dist/commands/upstream/sync-mathquill.d.ts.map +0 -1
  166. package/dist/commands/upstream/sync-mathquill.js +0 -97
  167. package/dist/commands/upstream/sync-mathquill.js.map +0 -1
  168. package/dist/commands/upstream/sync.d.ts.map +0 -1
  169. package/dist/commands/upstream/track.d.ts.map +0 -1
  170. package/dist/commands/upstream/update.d.ts.map +0 -1
  171. package/dist/commands/verify/controllers.d.ts.map +0 -1
  172. package/dist/commands/verify/react-build.d.ts.map +0 -1
  173. package/dist/index.d.ts.map +0 -1
  174. package/dist/lib/mathquill/extension-generator.d.ts +0 -9
  175. package/dist/lib/mathquill/extension-generator.d.ts.map +0 -1
  176. package/dist/lib/mathquill/extension-generator.js +0 -107
  177. package/dist/lib/mathquill/extension-generator.js.map +0 -1
  178. package/dist/lib/mathquill/khan-extractor.d.ts +0 -16
  179. package/dist/lib/mathquill/khan-extractor.d.ts.map +0 -1
  180. package/dist/lib/mathquill/khan-extractor.js +0 -148
  181. package/dist/lib/mathquill/khan-extractor.js.map +0 -1
  182. package/dist/lib/mathquill/learnosity-extractor.d.ts +0 -15
  183. package/dist/lib/mathquill/learnosity-extractor.d.ts.map +0 -1
  184. package/dist/lib/mathquill/learnosity-extractor.js +0 -170
  185. package/dist/lib/mathquill/learnosity-extractor.js.map +0 -1
  186. package/dist/lib/mathquill/migration-orchestrator.d.ts +0 -77
  187. package/dist/lib/mathquill/migration-orchestrator.d.ts.map +0 -1
  188. package/dist/lib/mathquill/migration-orchestrator.js +0 -391
  189. package/dist/lib/mathquill/migration-orchestrator.js.map +0 -1
  190. package/dist/lib/mathquill/package-updater.d.ts +0 -9
  191. package/dist/lib/mathquill/package-updater.d.ts.map +0 -1
  192. package/dist/lib/mathquill/package-updater.js +0 -103
  193. package/dist/lib/mathquill/package-updater.js.map +0 -1
  194. package/dist/lib/mathquill/pie-extractor.d.ts +0 -14
  195. package/dist/lib/mathquill/pie-extractor.d.ts.map +0 -1
  196. package/dist/lib/mathquill/pie-extractor.js +0 -167
  197. package/dist/lib/mathquill/pie-extractor.js.map +0 -1
  198. package/dist/lib/upstream/repo-utils.d.ts.map +0 -1
  199. package/dist/lib/upstream/sync-compatibility.d.ts.map +0 -1
  200. package/dist/lib/upstream/sync-constants.d.ts.map +0 -1
  201. package/dist/lib/upstream/sync-controllers-strategy.d.ts.map +0 -1
  202. package/dist/lib/upstream/sync-demo-metadata.d.ts.map +0 -1
  203. package/dist/lib/upstream/sync-dev-exports.d.ts +0 -13
  204. package/dist/lib/upstream/sync-dev-exports.d.ts.map +0 -1
  205. package/dist/lib/upstream/sync-dev-exports.js +0 -115
  206. package/dist/lib/upstream/sync-dev-exports.js.map +0 -1
  207. package/dist/lib/upstream/sync-externals.d.ts.map +0 -1
  208. package/dist/lib/upstream/sync-filesystem.d.ts.map +0 -1
  209. package/dist/lib/upstream/sync-imports.d.ts.map +0 -1
  210. package/dist/lib/upstream/sync-mathquill.d.ts +0 -19
  211. package/dist/lib/upstream/sync-mathquill.d.ts.map +0 -1
  212. package/dist/lib/upstream/sync-mathquill.js +0 -160
  213. package/dist/lib/upstream/sync-mathquill.js.map +0 -1
  214. package/dist/lib/upstream/sync-package-json.d.ts.map +0 -1
  215. package/dist/lib/upstream/sync-package-manager.d.ts.map +0 -1
  216. package/dist/lib/upstream/sync-pielib-strategy.d.ts.map +0 -1
  217. package/dist/lib/upstream/sync-react-strategy.d.ts.map +0 -1
  218. package/dist/lib/upstream/sync-strategy.d.ts.map +0 -1
  219. package/dist/lib/upstream/sync-summary.d.ts.map +0 -1
  220. package/dist/lib/upstream/sync-transforms.d.ts.map +0 -1
  221. package/dist/lib/upstream/sync-vite-config.d.ts.map +0 -1
  222. package/dist/utils/compatibility.d.ts.map +0 -1
  223. package/dist/utils/conversion.d.ts.map +0 -1
  224. package/dist/utils/git.d.ts.map +0 -1
  225. package/dist/utils/logger.d.ts.map +0 -1
  226. package/dist/utils/package-json.d.ts.map +0 -1
  227. package/packages/cli/bin/dev.js +0 -5
  228. package/packages/cli/bin/run.js +0 -5
  229. package/src/commands/dev/demo/index.ts +0 -313
  230. package/src/commands/dev/test-bundler.ts +0 -345
  231. package/src/commands/mathquill/migrate.ts +0 -269
  232. package/src/commands/mathquill/status.ts +0 -267
  233. package/src/commands/packages/create-controllers.ts +0 -127
  234. package/src/commands/packages/create-lib-react.ts +0 -279
  235. package/src/commands/packages/create-react-elements.ts +0 -306
  236. package/src/commands/packages/enable-publishing.ts +0 -161
  237. package/src/commands/packages/init-synced-elements.ts +0 -259
  238. package/src/commands/upstream/README.md +0 -444
  239. package/src/commands/upstream/analyze-esm.ts +0 -1973
  240. package/src/commands/upstream/check.ts +0 -228
  241. package/src/commands/upstream/deps.ts +0 -222
  242. package/src/commands/upstream/sync-mathquill.ts +0 -108
  243. package/src/commands/upstream/sync.ts +0 -687
  244. package/src/commands/upstream/track.ts +0 -145
  245. package/src/commands/upstream/update.ts +0 -110
  246. package/src/commands/verify/controllers.ts +0 -166
  247. package/src/commands/verify/react-build.ts +0 -171
  248. package/src/index.ts +0 -1
  249. package/src/lib/mathquill/extension-generator.ts +0 -111
  250. package/src/lib/mathquill/khan-extractor.ts +0 -175
  251. package/src/lib/mathquill/learnosity-extractor.ts +0 -198
  252. package/src/lib/mathquill/migration-orchestrator.ts +0 -513
  253. package/src/lib/mathquill/package-updater.ts +0 -120
  254. package/src/lib/mathquill/pie-extractor.ts +0 -194
  255. package/src/lib/upstream/repo-utils.ts +0 -18
  256. package/src/lib/upstream/sync-compatibility.ts +0 -89
  257. package/src/lib/upstream/sync-constants.ts +0 -77
  258. package/src/lib/upstream/sync-controllers-strategy.ts +0 -291
  259. package/src/lib/upstream/sync-demo-metadata.ts +0 -199
  260. package/src/lib/upstream/sync-dev-exports.ts +0 -151
  261. package/src/lib/upstream/sync-externals.ts +0 -159
  262. package/src/lib/upstream/sync-filesystem.ts +0 -87
  263. package/src/lib/upstream/sync-imports.ts +0 -992
  264. package/src/lib/upstream/sync-mathquill.ts +0 -194
  265. package/src/lib/upstream/sync-package-json.ts +0 -86
  266. package/src/lib/upstream/sync-package-manager.ts +0 -694
  267. package/src/lib/upstream/sync-pielib-strategy.ts +0 -441
  268. package/src/lib/upstream/sync-react-strategy.ts +0 -945
  269. package/src/lib/upstream/sync-strategy.ts +0 -61
  270. package/src/lib/upstream/sync-summary.ts +0 -194
  271. package/src/lib/upstream/sync-transforms.ts +0 -154
  272. package/src/lib/upstream/sync-vite-config.ts +0 -243
  273. package/src/types/es-module-lexer.d.ts +0 -4
  274. package/src/utils/compatibility.ts +0 -182
  275. package/src/utils/conversion.ts +0 -153
  276. package/src/utils/git.ts +0 -63
  277. package/src/utils/logger.ts +0 -69
  278. package/src/utils/package-json.ts +0 -43
  279. package/tests/sync-package-manager.test.ts +0 -112
  280. package/tests/transform-assign-props.test.ts +0 -101
  281. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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"]}
@@ -6,4 +6,3 @@ type RepoSpec = {
6
6
  export declare const formatRepoNotFound: (label: string, path: string, extraMessage?: string) => string;
7
7
  export declare const assertReposExist: (repos: RepoSpec[]) => void;
8
8
  export {};
9
- //# sourceMappingURL=repo-utils.d.ts.map
@@ -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", "math-inline", "math-templated"];
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: "^6.0.0";
18
+ readonly VITE: "^8.0.1";
18
19
  readonly TYPESCRIPT: "^5.9.3";
19
- readonly VITE_REACT_PLUGIN: "^4.2.0";
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: "bun x vite build && bun x tsc --emitDeclarationOnly";
43
- readonly BUILD_WITH_IIFE: "bun x vite build && bun x vite build --config vite.config.iife.ts && bun x tsc --emitDeclarationOnly";
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 or are temporarily disabled.
19
- export const EXCLUDED_UPSTREAM_ELEMENTS = [
20
- 'boilerplate-item-type',
21
- 'math-inline',
22
- 'math-templated',
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: '^6.0.0',
25
+ VITE: '^8.0.1',
27
26
  TYPESCRIPT: '^5.9.3',
28
- VITE_REACT_PLUGIN: '^4.2.0',
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: 'bun x vite build && bun x tsc --emitDeclarationOnly',
57
- BUILD_WITH_IIFE: 'bun x vite build && bun x vite build --config vite.config.iife.ts && bun x tsc --emitDeclarationOnly',
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,uFAAuF;AACvF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB;IACvB,aAAa;IACb,gBAAgB;CACR,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,iBAAiB,EAAE,QAAQ;IAC3B,SAAS,EAAE,UAAU;CACb,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;CAChB,CAAC;AAEX,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;CACvC,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,KAAK;IACT,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,KAAK;IACT,GAAG,EAAE,MAAM;CACH,CAAC;AAEX,wBAAwB;AACxB,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;CACd,CAAC;AAEX,gBAAgB;AAChB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,qDAAqD;IAC5D,eAAe,EACb,sGAAsG;IACxG,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,kBAAkB;CAChB,CAAC;AAEX,4BAA4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,6BAA6B,CAAC"}
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"]}
@@ -15,4 +15,3 @@ export declare class ControllersStrategy implements SyncStrategy {
15
15
  private cleanTargetDir;
16
16
  private ensureElementViteConfig;
17
17
  }
18
- //# sourceMappingURL=sync-controllers-strategy.d.ts.map
@@ -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: false, verbose: false }, logger);
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 { resolve } from 'node:path';
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"]}
@@ -12,4 +12,3 @@ export interface ElementMetadata {
12
12
  * Main entry point
13
13
  */
14
14
  export declare function generateDemoMetadata(): Promise<void>;
15
- //# sourceMappingURL=sync-demo-metadata.d.ts.map