@pie-element/cli 0.1.1

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