@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
@@ -5,6 +5,7 @@ import { readdir, readFile } from 'node:fs/promises';
5
5
  import { join } from 'node:path';
6
6
  import { EXCLUDED_UPSTREAM_ELEMENTS } from '../../lib/upstream/sync-constants.js';
7
7
  const ELEMENTS_REACT_DIR = 'packages/elements-react';
8
+ const ELEMENTS_SVELTE_DIR = 'packages/elements-svelte';
8
9
  function hasAnyControllerSource(elementDir) {
9
10
  const base = join(elementDir, 'src', 'controller', 'index');
10
11
  return (existsSync(base + '.ts') ||
@@ -12,6 +13,188 @@ function hasAnyControllerSource(elementDir) {
12
13
  existsSync(base + '.js') ||
13
14
  existsSync(base + '.jsx'));
14
15
  }
16
+ function hasAnyPrintSource(elementDir) {
17
+ const base = join(elementDir, 'src', 'print', 'index');
18
+ return (existsSync(base + '.ts') ||
19
+ existsSync(base + '.tsx') ||
20
+ existsSync(base + '.js') ||
21
+ existsSync(base + '.jsx'));
22
+ }
23
+ function hasAnyAuthorOrConfigureSource(elementDir) {
24
+ for (const view of ['author', 'configure']) {
25
+ const base = join(elementDir, 'src', view, 'index');
26
+ if (existsSync(base + '.ts') ||
27
+ existsSync(base + '.tsx') ||
28
+ existsSync(base + '.js') ||
29
+ existsSync(base + '.jsx')) {
30
+ return true;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ async function verifyControllerPackage(elementDir, element) {
36
+ const pkgPath = join(elementDir, 'package.json');
37
+ if (!existsSync(pkgPath)) {
38
+ return {
39
+ element,
40
+ elementDir,
41
+ ok: false,
42
+ errors: ['Missing package.json'],
43
+ warnings: [],
44
+ };
45
+ }
46
+ const hasController = hasAnyControllerSource(elementDir);
47
+ const hasAuthorOrConfigure = hasAnyAuthorOrConfigureSource(elementDir);
48
+ const hasPrint = hasAnyPrintSource(elementDir);
49
+ if (!hasController && !hasAuthorOrConfigure && !hasPrint) {
50
+ return { element, elementDir, ok: true, errors: [], warnings: [] };
51
+ }
52
+ const pkgRaw = await readFile(pkgPath, 'utf-8');
53
+ const pkg = JSON.parse(pkgRaw);
54
+ const exportsObj = pkg?.exports;
55
+ const controllerExport = exportsObj?.['./controller'];
56
+ const controllerJsExport = exportsObj?.['./controller.js'];
57
+ const configureExport = exportsObj?.['./configure'];
58
+ const printExport = exportsObj?.['./print'];
59
+ const printJsExport = exportsObj?.['./print.js'];
60
+ const expectedControllerSpecifier = `${pkg.name}/controller`;
61
+ const expectedConfigureSpecifier = `${pkg.name}/configure`;
62
+ const expectedShim = "export * from './dist/controller/index.js';\n";
63
+ const errors = [];
64
+ const warnings = [];
65
+ const files = Array.isArray(pkg.files) ? pkg.files : [];
66
+ if (hasController) {
67
+ if (pkg?.pie?.controller !== expectedControllerSpecifier) {
68
+ errors.push(`package.json pie.controller must be "${expectedControllerSpecifier}"`);
69
+ }
70
+ if (!files.includes('controller.js')) {
71
+ errors.push('package.json files[] must include "controller.js"');
72
+ }
73
+ }
74
+ if (hasAuthorOrConfigure) {
75
+ if (pkg?.pie?.configure !== expectedConfigureSpecifier) {
76
+ errors.push(`package.json pie.configure must be "${expectedConfigureSpecifier}"`);
77
+ }
78
+ if (!configureExport) {
79
+ errors.push('Missing exports["./configure"] in package.json');
80
+ }
81
+ if (!files.includes('configure.js')) {
82
+ errors.push('package.json files[] must include "configure.js"');
83
+ }
84
+ }
85
+ if (hasController && !controllerExport) {
86
+ errors.push('Missing exports["./controller"] in package.json');
87
+ }
88
+ else if (controllerExport) {
89
+ const jsPath = controllerExport?.default;
90
+ const dtsPath = controllerExport?.types;
91
+ if (!jsPath || typeof jsPath !== 'string') {
92
+ errors.push('exports["./controller"].default is missing');
93
+ }
94
+ else {
95
+ const abs = join(elementDir, jsPath.replace(/^\.\//, ''));
96
+ if (!existsSync(abs)) {
97
+ errors.push(`Controller JS artifact missing: ${jsPath}`);
98
+ }
99
+ }
100
+ if (!dtsPath || typeof dtsPath !== 'string') {
101
+ warnings.push('exports["./controller"].types is missing');
102
+ }
103
+ else {
104
+ const abs = join(elementDir, dtsPath.replace(/^\.\//, ''));
105
+ if (!existsSync(abs)) {
106
+ warnings.push(`Controller d.ts artifact missing: ${dtsPath}`);
107
+ }
108
+ }
109
+ }
110
+ if (hasController && !controllerJsExport) {
111
+ errors.push('Missing exports["./controller.js"] in package.json');
112
+ }
113
+ else if (controllerJsExport) {
114
+ const jsPath = controllerJsExport?.default;
115
+ const dtsPath = controllerJsExport?.types;
116
+ if (controllerExport && jsPath !== controllerExport?.default) {
117
+ errors.push('exports["./controller.js"].default must match exports["./controller"].default');
118
+ }
119
+ if (controllerExport && dtsPath !== controllerExport?.types) {
120
+ errors.push('exports["./controller.js"].types must match exports["./controller"].types');
121
+ }
122
+ }
123
+ if (configureExport) {
124
+ const configureTarget = configureExport?.default;
125
+ if (!configureTarget || typeof configureTarget !== 'string') {
126
+ errors.push('exports["./configure"].default is missing');
127
+ }
128
+ else {
129
+ const abs = join(elementDir, configureTarget.replace(/^\.\//, ''));
130
+ if (!existsSync(abs)) {
131
+ errors.push(`Configure JS artifact missing: ${configureTarget}`);
132
+ }
133
+ const configureShimPath = join(elementDir, 'configure.js');
134
+ const expectedConfigureShim = `export { default } from '${configureTarget}';\nexport * from '${configureTarget}';\n`;
135
+ if (!existsSync(configureShimPath)) {
136
+ errors.push('Missing root configure.js compatibility shim');
137
+ }
138
+ else {
139
+ const configureShim = await readFile(configureShimPath, 'utf-8');
140
+ if (configureShim !== expectedConfigureShim) {
141
+ errors.push(`Root configure.js shim must re-export ${configureTarget}`);
142
+ }
143
+ }
144
+ }
145
+ }
146
+ // Print is checked on the same terms as controller and configure: the root shim is a
147
+ // publish contract, because a directory-aliasing bundler resolves `<pkg>/print` to it
148
+ // rather than through the exports map.
149
+ if (hasPrint) {
150
+ if (!files.includes('print.js')) {
151
+ errors.push('package.json files[] must include "print.js"');
152
+ }
153
+ if (!printExport) {
154
+ errors.push('Missing exports["./print"] in package.json');
155
+ }
156
+ if (!printJsExport) {
157
+ errors.push('Missing exports["./print.js"] in package.json');
158
+ }
159
+ else if (printExport) {
160
+ if (printJsExport?.default !== printExport?.default) {
161
+ errors.push('exports["./print.js"].default must match exports["./print"].default');
162
+ }
163
+ if (printJsExport?.types !== printExport?.types) {
164
+ errors.push('exports["./print.js"].types must match exports["./print"].types');
165
+ }
166
+ }
167
+ const printTarget = printExport?.default ?? './dist/print/index.js';
168
+ const printArtifact = join(elementDir, printTarget.replace(/^\.\//, ''));
169
+ if (!existsSync(printArtifact)) {
170
+ errors.push(`Print JS artifact missing: ${printTarget}`);
171
+ }
172
+ const printShimPath = join(elementDir, 'print.js');
173
+ const expectedPrintShim = `export { default } from '${printTarget}';\nexport * from '${printTarget}';\n`;
174
+ if (!existsSync(printShimPath)) {
175
+ errors.push('Missing root print.js compatibility shim');
176
+ }
177
+ else {
178
+ const printShim = await readFile(printShimPath, 'utf-8');
179
+ if (printShim !== expectedPrintShim) {
180
+ errors.push(`Root print.js shim must re-export ${printTarget}`);
181
+ }
182
+ }
183
+ }
184
+ if (hasController) {
185
+ const shimPath = join(elementDir, 'controller.js');
186
+ if (!existsSync(shimPath)) {
187
+ errors.push('Missing root controller.js compatibility shim');
188
+ }
189
+ else {
190
+ const shim = await readFile(shimPath, 'utf-8');
191
+ if (shim !== expectedShim) {
192
+ errors.push('Root controller.js shim must re-export ./dist/controller/index.js');
193
+ }
194
+ }
195
+ }
196
+ return { element, elementDir, ok: errors.length === 0, errors, warnings };
197
+ }
15
198
  export default class VerifyControllers extends Command {
16
199
  static description = 'Verify that element packages will publish controller modules correctly (exports + dist artifacts)';
17
200
  static examples = [
@@ -26,7 +209,7 @@ export default class VerifyControllers extends Command {
26
209
  default: false,
27
210
  }),
28
211
  element: Flags.string({
29
- description: 'Check only specified element',
212
+ description: 'Check only specified element (react or svelte package name)',
30
213
  }),
31
214
  };
32
215
  logger = new Logger();
@@ -34,75 +217,41 @@ export default class VerifyControllers extends Command {
34
217
  const { flags } = await this.parse(VerifyControllers);
35
218
  this.logger = new Logger(flags.verbose);
36
219
  this.logger.section('🧩 Verifying published controller modules');
37
- const items = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });
38
220
  const excludedElements = new Set(EXCLUDED_UPSTREAM_ELEMENTS);
39
- let elements = items
221
+ const reactItems = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });
222
+ const reactNames = reactItems
40
223
  .filter((d) => d.isDirectory())
41
224
  .map((d) => d.name)
42
225
  .filter((name) => !excludedElements.has(name));
226
+ const svelteItems = await readdir(ELEMENTS_SVELTE_DIR, { withFileTypes: true });
227
+ const svelteNames = svelteItems.filter((d) => d.isDirectory()).map((d) => d.name);
228
+ let jobs = [];
43
229
  if (flags.element) {
44
- if (!elements.includes(flags.element)) {
45
- this.error(`Element '${flags.element}' not found in ${ELEMENTS_REACT_DIR}`);
46
- }
47
- elements = [flags.element];
48
- }
49
- const results = [];
50
- for (const element of elements.sort()) {
51
- const elementDir = join(ELEMENTS_REACT_DIR, element);
52
- const pkgPath = join(elementDir, 'package.json');
53
- if (!existsSync(pkgPath)) {
54
- results.push({
55
- element,
56
- ok: false,
57
- errors: ['Missing package.json'],
58
- warnings: [],
59
- });
60
- continue;
230
+ const r = join(ELEMENTS_REACT_DIR, flags.element);
231
+ const s = join(ELEMENTS_SVELTE_DIR, flags.element);
232
+ if (reactNames.includes(flags.element) && existsSync(join(r, 'package.json'))) {
233
+ jobs = [{ name: flags.element, dir: r }];
61
234
  }
62
- const hasController = hasAnyControllerSource(elementDir);
63
- if (!hasController) {
64
- // Nothing to publish for controllers; skip.
65
- results.push({ element, ok: true, errors: [], warnings: [] });
66
- continue;
67
- }
68
- const pkgRaw = await readFile(pkgPath, 'utf-8');
69
- const pkg = JSON.parse(pkgRaw);
70
- const exportsObj = pkg?.exports;
71
- const controllerExport = exportsObj?.['./controller'];
72
- const errors = [];
73
- const warnings = [];
74
- if (!controllerExport) {
75
- errors.push('Missing exports["./controller"] in package.json');
235
+ else if (svelteNames.includes(flags.element) && existsSync(join(s, 'package.json'))) {
236
+ jobs = [{ name: flags.element, dir: s }];
76
237
  }
77
238
  else {
78
- const jsPath = controllerExport?.default;
79
- const dtsPath = controllerExport?.types;
80
- if (!jsPath || typeof jsPath !== 'string') {
81
- errors.push('exports["./controller"].default is missing');
82
- }
83
- else {
84
- const abs = join(elementDir, jsPath.replace(/^\.\//, ''));
85
- if (!existsSync(abs)) {
86
- errors.push(`Controller JS artifact missing: ${jsPath}`);
87
- }
88
- }
89
- // Types are nice-to-have for TS consumers, but not required for runtime/controller loading.
90
- // We'll warn (not fail) if types are missing.
91
- if (!dtsPath || typeof dtsPath !== 'string') {
92
- warnings.push('exports["./controller"].types is missing');
93
- }
94
- else {
95
- const abs = join(elementDir, dtsPath.replace(/^\.\//, ''));
96
- if (!existsSync(abs)) {
97
- warnings.push(`Controller d.ts artifact missing: ${dtsPath}`);
98
- }
99
- }
239
+ this.error(`Element '${flags.element}' not found under ${ELEMENTS_REACT_DIR} or ${ELEMENTS_SVELTE_DIR}`);
100
240
  }
101
- results.push({ element, ok: errors.length === 0, errors, warnings });
241
+ }
242
+ else {
243
+ jobs = [
244
+ ...reactNames.sort().map((name) => ({ name, dir: join(ELEMENTS_REACT_DIR, name) })),
245
+ ...svelteNames.sort().map((name) => ({ name, dir: join(ELEMENTS_SVELTE_DIR, name) })),
246
+ ];
247
+ }
248
+ const results = [];
249
+ for (const { name, dir } of jobs) {
250
+ results.push(await verifyControllerPackage(dir, name));
102
251
  }
103
252
  const failed = results.filter((r) => !r.ok);
104
253
  const warned = results.filter((r) => r.warnings.length > 0);
105
- const checked = results.filter((r) => hasAnyControllerSource(join(ELEMENTS_REACT_DIR, r.element)));
254
+ const checked = results.filter((r) => hasAnyControllerSource(r.elementDir));
106
255
  this.log(`\n${'='.repeat(60)}`);
107
256
  this.log('📊 CONTROLLER PUBLISH VERIFICATION REPORT');
108
257
  this.log('='.repeat(60));
@@ -119,9 +268,14 @@ export default class VerifyControllers extends Command {
119
268
  this.log(` • ${e}`);
120
269
  }
121
270
  this.log('\n💡 Fixes:');
122
- this.log(' - Ensure package.json exports include "./controller"');
271
+ this.log(' - Ensure package.json exports include "./controller" and "./controller.js"');
272
+ this.log(' - Ensure package.json pie.controller is "@pie-element/<element>/controller"');
273
+ this.log(' - Ensure package.json files[] includes "controller.js"');
274
+ this.log(' - Ensure root controller.js re-exports "./dist/controller/index.js"');
275
+ this.log(' - Ensure print-bearing elements publish "print.js" and export "./print.js"');
123
276
  this.log(' - Ensure build outputs exist under dist/controller/');
124
277
  this.log(` - Rebuild: cd ${ELEMENTS_REACT_DIR}/<element> && bun run build`);
278
+ this.log(` - Or: cd ${ELEMENTS_SVELTE_DIR}/<element> && bun run build`);
125
279
  this.error('Some controller publish checks failed', { exit: 1 });
126
280
  }
127
281
  if (warned.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../../src/commands/verify/controllers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../../src/commands/verify/controllers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAUlF,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AACrD,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAEvD,SAAS,sBAAsB,CAAC,UAAkB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,CACL,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC;QACzB,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,CACL,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC;QACzB,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,UAAkB;IACvD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IACE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;YACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC;YACzB,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;YACxB,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,EACzB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,UAAkB,EAAE,OAAe;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO;YACP,UAAU;YACV,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,sBAAsB,CAAC;YAChC,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,aAAa,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAC;IACtC,MAAM,UAAU,GAAG,GAAG,EAAE,OAAc,CAAC;IACvC,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,UAAU,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,2BAA2B,GAAG,GAAG,GAAG,CAAC,IAAI,aAAa,CAAC;IAC7D,MAAM,0BAA0B,GAAG,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC;IAC3D,MAAM,YAAY,GAAG,+CAA+C,CAAC;IAErE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,GAAG,EAAE,UAAU,KAAK,2BAA2B,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,wCAAwC,2BAA2B,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,GAAG,EAAE,GAAG,EAAE,SAAS,KAAK,0BAA0B,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,uCAAuC,0BAA0B,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,gBAAgB,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,gBAAgB,EAAE,OAA6B,CAAC;QAC/D,MAAM,OAAO,GAAG,gBAAgB,EAAE,KAA2B,CAAC;QAE9D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,EAAE,OAA6B,CAAC;QACjE,MAAM,OAAO,GAAG,kBAAkB,EAAE,KAA2B,CAAC;QAChE,IAAI,gBAAgB,IAAI,MAAM,KAAK,gBAAgB,EAAE,OAAO,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,gBAAgB,IAAI,OAAO,KAAK,gBAAgB,EAAE,KAAK,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,eAAe,EAAE,OAA6B,CAAC;QACvE,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,kCAAkC,eAAe,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAC3D,MAAM,qBAAqB,GAAG,4BAA4B,eAAe,sBAAsB,eAAe,MAAM,CAAC;YACrH,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBACjE,IAAI,aAAa,KAAK,qBAAqB,EAAE,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC,yCAAyC,eAAe,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,sFAAsF;IACtF,uCAAuC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,IAAI,aAAa,EAAE,OAAO,KAAK,WAAW,EAAE,OAAO,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,aAAa,EAAE,KAAK,KAAK,WAAW,EAAE,KAAK,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAI,WAAW,EAAE,OAA8B,IAAI,uBAAuB,CAAC;QAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,iBAAiB,GAAG,4BAA4B,WAAW,sBAAsB,WAAW,MAAM,CAAC;QACzG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,OAAO;IACpD,MAAM,CAAU,WAAW,GACzB,mGAAmG,CAAC;IAEtG,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,2BAA2B;QAC3B,qCAAqC;KACtC,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,6DAA6D;SAC3E,CAAC;KACH,CAAC;IAEM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAEvB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAEjE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,0BAA+C,CAAC,CAAC;QAE1F,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,UAAU;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAGlF,IAAI,IAAI,GAAU,EAAE,CAAC;QAErB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBAC9E,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBACtF,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CACR,YAAY,KAAK,CAAC,OAAO,qBAAqB,kBAAkB,OAAO,mBAAmB,EAAE,CAC7F,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG;gBACL,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnF,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;aACtF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,MAAM,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;oBAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;YACzF,IAAI,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;YAC1F,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;YAClF,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;YACzF,IAAI,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,mBAAmB,kBAAkB,6BAA6B,CAAC,CAAC;YAC7E,IAAI,CAAC,GAAG,CAAC,cAAc,mBAAmB,6BAA6B,CAAC,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { EXCLUDED_UPSTREAM_ELEMENTS } from '../../lib/upstream/sync-constants.js';\n\ntype CheckResult = {\n element: string;\n elementDir: string;\n ok: boolean;\n errors: string[];\n warnings: string[];\n};\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\nconst ELEMENTS_SVELTE_DIR = 'packages/elements-svelte';\n\nfunction hasAnyControllerSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'controller', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyPrintSource(elementDir: string): boolean {\n const base = join(elementDir, 'src', 'print', 'index');\n return (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n );\n}\n\nfunction hasAnyAuthorOrConfigureSource(elementDir: string): boolean {\n for (const view of ['author', 'configure']) {\n const base = join(elementDir, 'src', view, 'index');\n if (\n existsSync(base + '.ts') ||\n existsSync(base + '.tsx') ||\n existsSync(base + '.js') ||\n existsSync(base + '.jsx')\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function verifyControllerPackage(elementDir: string, element: string): Promise<CheckResult> {\n const pkgPath = join(elementDir, 'package.json');\n if (!existsSync(pkgPath)) {\n return {\n element,\n elementDir,\n ok: false,\n errors: ['Missing package.json'],\n warnings: [],\n };\n }\n\n const hasController = hasAnyControllerSource(elementDir);\n const hasAuthorOrConfigure = hasAnyAuthorOrConfigureSource(elementDir);\n const hasPrint = hasAnyPrintSource(elementDir);\n if (!hasController && !hasAuthorOrConfigure && !hasPrint) {\n return { element, elementDir, ok: true, errors: [], warnings: [] };\n }\n\n const pkgRaw = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgRaw) as any;\n const exportsObj = pkg?.exports as any;\n const controllerExport = exportsObj?.['./controller'];\n const controllerJsExport = exportsObj?.['./controller.js'];\n const configureExport = exportsObj?.['./configure'];\n const printExport = exportsObj?.['./print'];\n const printJsExport = exportsObj?.['./print.js'];\n const expectedControllerSpecifier = `${pkg.name}/controller`;\n const expectedConfigureSpecifier = `${pkg.name}/configure`;\n const expectedShim = \"export * from './dist/controller/index.js';\\n\";\n\n const errors: string[] = [];\n const warnings: string[] = [];\n const files = Array.isArray(pkg.files) ? pkg.files : [];\n\n if (hasController) {\n if (pkg?.pie?.controller !== expectedControllerSpecifier) {\n errors.push(`package.json pie.controller must be \"${expectedControllerSpecifier}\"`);\n }\n if (!files.includes('controller.js')) {\n errors.push('package.json files[] must include \"controller.js\"');\n }\n }\n if (hasAuthorOrConfigure) {\n if (pkg?.pie?.configure !== expectedConfigureSpecifier) {\n errors.push(`package.json pie.configure must be \"${expectedConfigureSpecifier}\"`);\n }\n if (!configureExport) {\n errors.push('Missing exports[\"./configure\"] in package.json');\n }\n if (!files.includes('configure.js')) {\n errors.push('package.json files[] must include \"configure.js\"');\n }\n }\n\n if (hasController && !controllerExport) {\n errors.push('Missing exports[\"./controller\"] in package.json');\n } else if (controllerExport) {\n const jsPath = controllerExport?.default as string | undefined;\n const dtsPath = controllerExport?.types as string | undefined;\n\n if (!jsPath || typeof jsPath !== 'string') {\n errors.push('exports[\"./controller\"].default is missing');\n } else {\n const abs = join(elementDir, jsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Controller JS artifact missing: ${jsPath}`);\n }\n }\n\n if (!dtsPath || typeof dtsPath !== 'string') {\n warnings.push('exports[\"./controller\"].types is missing');\n } else {\n const abs = join(elementDir, dtsPath.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n warnings.push(`Controller d.ts artifact missing: ${dtsPath}`);\n }\n }\n }\n\n if (hasController && !controllerJsExport) {\n errors.push('Missing exports[\"./controller.js\"] in package.json');\n } else if (controllerJsExport) {\n const jsPath = controllerJsExport?.default as string | undefined;\n const dtsPath = controllerJsExport?.types as string | undefined;\n if (controllerExport && jsPath !== controllerExport?.default) {\n errors.push('exports[\"./controller.js\"].default must match exports[\"./controller\"].default');\n }\n if (controllerExport && dtsPath !== controllerExport?.types) {\n errors.push('exports[\"./controller.js\"].types must match exports[\"./controller\"].types');\n }\n }\n\n if (configureExport) {\n const configureTarget = configureExport?.default as string | undefined;\n if (!configureTarget || typeof configureTarget !== 'string') {\n errors.push('exports[\"./configure\"].default is missing');\n } else {\n const abs = join(elementDir, configureTarget.replace(/^\\.\\//, ''));\n if (!existsSync(abs)) {\n errors.push(`Configure JS artifact missing: ${configureTarget}`);\n }\n const configureShimPath = join(elementDir, 'configure.js');\n const expectedConfigureShim = `export { default } from '${configureTarget}';\\nexport * from '${configureTarget}';\\n`;\n if (!existsSync(configureShimPath)) {\n errors.push('Missing root configure.js compatibility shim');\n } else {\n const configureShim = await readFile(configureShimPath, 'utf-8');\n if (configureShim !== expectedConfigureShim) {\n errors.push(`Root configure.js shim must re-export ${configureTarget}`);\n }\n }\n }\n }\n\n // Print is checked on the same terms as controller and configure: the root shim is a\n // publish contract, because a directory-aliasing bundler resolves `<pkg>/print` to it\n // rather than through the exports map.\n if (hasPrint) {\n if (!files.includes('print.js')) {\n errors.push('package.json files[] must include \"print.js\"');\n }\n if (!printExport) {\n errors.push('Missing exports[\"./print\"] in package.json');\n }\n if (!printJsExport) {\n errors.push('Missing exports[\"./print.js\"] in package.json');\n } else if (printExport) {\n if (printJsExport?.default !== printExport?.default) {\n errors.push('exports[\"./print.js\"].default must match exports[\"./print\"].default');\n }\n if (printJsExport?.types !== printExport?.types) {\n errors.push('exports[\"./print.js\"].types must match exports[\"./print\"].types');\n }\n }\n\n const printTarget = (printExport?.default as string | undefined) ?? './dist/print/index.js';\n const printArtifact = join(elementDir, printTarget.replace(/^\\.\\//, ''));\n if (!existsSync(printArtifact)) {\n errors.push(`Print JS artifact missing: ${printTarget}`);\n }\n\n const printShimPath = join(elementDir, 'print.js');\n const expectedPrintShim = `export { default } from '${printTarget}';\\nexport * from '${printTarget}';\\n`;\n if (!existsSync(printShimPath)) {\n errors.push('Missing root print.js compatibility shim');\n } else {\n const printShim = await readFile(printShimPath, 'utf-8');\n if (printShim !== expectedPrintShim) {\n errors.push(`Root print.js shim must re-export ${printTarget}`);\n }\n }\n }\n\n if (hasController) {\n const shimPath = join(elementDir, 'controller.js');\n if (!existsSync(shimPath)) {\n errors.push('Missing root controller.js compatibility shim');\n } else {\n const shim = await readFile(shimPath, 'utf-8');\n if (shim !== expectedShim) {\n errors.push('Root controller.js shim must re-export ./dist/controller/index.js');\n }\n }\n }\n\n return { element, elementDir, ok: errors.length === 0, errors, warnings };\n}\n\nexport default class VerifyControllers extends Command {\n static override description =\n 'Verify that element packages will publish controller modules correctly (exports + dist artifacts)';\n\n static override examples = [\n 'bun run cli <%= command.id %>',\n 'bun cli <%= command.id %>',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n element: Flags.string({\n description: 'Check only specified element (react or svelte package name)',\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(VerifyControllers);\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('🧩 Verifying published controller modules');\n\n const excludedElements = new Set<string>(EXCLUDED_UPSTREAM_ELEMENTS as readonly string[]);\n\n const reactItems = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });\n const reactNames = reactItems\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n .filter((name) => !excludedElements.has(name));\n\n const svelteItems = await readdir(ELEMENTS_SVELTE_DIR, { withFileTypes: true });\n const svelteNames = svelteItems.filter((d) => d.isDirectory()).map((d) => d.name);\n\n type Job = { name: string; dir: string };\n let jobs: Job[] = [];\n\n if (flags.element) {\n const r = join(ELEMENTS_REACT_DIR, flags.element);\n const s = join(ELEMENTS_SVELTE_DIR, flags.element);\n if (reactNames.includes(flags.element) && existsSync(join(r, 'package.json'))) {\n jobs = [{ name: flags.element, dir: r }];\n } else if (svelteNames.includes(flags.element) && existsSync(join(s, 'package.json'))) {\n jobs = [{ name: flags.element, dir: s }];\n } else {\n this.error(\n `Element '${flags.element}' not found under ${ELEMENTS_REACT_DIR} or ${ELEMENTS_SVELTE_DIR}`\n );\n }\n } else {\n jobs = [\n ...reactNames.sort().map((name) => ({ name, dir: join(ELEMENTS_REACT_DIR, name) })),\n ...svelteNames.sort().map((name) => ({ name, dir: join(ELEMENTS_SVELTE_DIR, name) })),\n ];\n }\n\n const results: CheckResult[] = [];\n for (const { name, dir } of jobs) {\n results.push(await verifyControllerPackage(dir, name));\n }\n\n const failed = results.filter((r) => !r.ok);\n const warned = results.filter((r) => r.warnings.length > 0);\n const checked = results.filter((r) => hasAnyControllerSource(r.elementDir));\n\n this.log(`\\n${'='.repeat(60)}`);\n this.log('📊 CONTROLLER PUBLISH VERIFICATION REPORT');\n this.log('='.repeat(60));\n this.log(`Elements scanned: ${results.length}`);\n this.log(`Elements with controllers: ${checked.length}`);\n this.log(`Passed: ${results.length - failed.length} ✅`);\n this.log(`Failed: ${failed.length} ❌`);\n this.log(`Warnings: ${warned.length} ⚠️`);\n\n if (failed.length > 0) {\n this.log('\\n❌ FAILURES:');\n for (const f of failed) {\n this.log(` - ${f.element}`);\n for (const e of f.errors) this.log(` • ${e}`);\n }\n this.log('\\n💡 Fixes:');\n this.log(' - Ensure package.json exports include \"./controller\" and \"./controller.js\"');\n this.log(' - Ensure package.json pie.controller is \"@pie-element/<element>/controller\"');\n this.log(' - Ensure package.json files[] includes \"controller.js\"');\n this.log(' - Ensure root controller.js re-exports \"./dist/controller/index.js\"');\n this.log(' - Ensure print-bearing elements publish \"print.js\" and export \"./print.js\"');\n this.log(' - Ensure build outputs exist under dist/controller/');\n this.log(` - Rebuild: cd ${ELEMENTS_REACT_DIR}/<element> && bun run build`);\n this.log(` - Or: cd ${ELEMENTS_SVELTE_DIR}/<element> && bun run build`);\n this.error('Some controller publish checks failed', { exit: 1 });\n }\n\n if (warned.length > 0) {\n this.log('\\n⚠️ WARNINGS (non-blocking):');\n for (const w of warned) {\n this.log(` - ${w.element}`);\n for (const msg of w.warnings) this.log(` • ${msg}`);\n }\n }\n\n this.log(`\\n${'='.repeat(60)}\\n`);\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class VerifyDependencyIntegrity extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ package: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'include-non-package-workspaces': import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ 'check-peer-gaps': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ fix: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ 'fail-on-hoist': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ 'fail-on-peer': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ };
14
+ private logger;
15
+ run(): Promise<void>;
16
+ private printIssueGroup;
17
+ private toRepoRelative;
18
+ }
@@ -0,0 +1,147 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { analyzePackageDependencyIntegrity, autoFixWorkspaceDependencyDeclarations, collectWorkspacePackageDirs, } from '../../utils/dependency-integrity.js';
3
+ import { Logger } from '../../utils/logger.js';
4
+ export default class VerifyDependencyIntegrity extends Command {
5
+ static description = 'Inspect package imports and classify transitive, hoist-reliant, broken, and missing peer dependency resolution';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --package @pie-element/ebsr',
9
+ '<%= config.bin %> <%= command.id %> --fail-on-hoist',
10
+ ];
11
+ static flags = {
12
+ verbose: Flags.boolean({
13
+ char: 'v',
14
+ description: 'Show detailed output',
15
+ default: false,
16
+ }),
17
+ package: Flags.string({
18
+ description: 'Limit analysis to one package name (eg @pie-element/ebsr)',
19
+ }),
20
+ 'include-non-package-workspaces': Flags.boolean({
21
+ description: 'Also analyze app/tool workspaces (can surface many existing issues outside package code)',
22
+ default: false,
23
+ }),
24
+ 'check-peer-gaps': Flags.boolean({
25
+ description: 'Also validate missing required peer dependencies from declared direct dependencies',
26
+ default: false,
27
+ }),
28
+ fix: Flags.boolean({
29
+ description: 'Auto-add missing direct dependencies for hoist/broken issues before reporting',
30
+ default: false,
31
+ }),
32
+ 'fail-on-hoist': Flags.boolean({
33
+ description: 'Exit non-zero when hoist-reliant imports are found',
34
+ default: true,
35
+ }),
36
+ 'fail-on-peer': Flags.boolean({
37
+ description: 'Exit non-zero when required peer dependencies are not declared directly',
38
+ default: false,
39
+ }),
40
+ };
41
+ logger = new Logger();
42
+ async run() {
43
+ const { flags } = await this.parse(VerifyDependencyIntegrity);
44
+ this.logger = new Logger(flags.verbose);
45
+ this.logger.section('🔍 Verifying dependency integrity');
46
+ const repoRoot = process.cwd();
47
+ if (flags.fix) {
48
+ this.logger.info('Applying dependency declaration autofixes...');
49
+ const fixResult = await autoFixWorkspaceDependencyDeclarations(repoRoot, {
50
+ includeNonPackageWorkspaces: flags['include-non-package-workspaces'],
51
+ packageName: flags.package,
52
+ includePeerGaps: flags['check-peer-gaps'],
53
+ });
54
+ this.logger.info(` Scanned: ${fixResult.packagesScanned}, Updated: ${fixResult.packagesUpdated}, Added: ${fixResult.dependenciesAdded}`);
55
+ if (fixResult.unresolved.length > 0) {
56
+ this.logger.warn(` Unresolved: ${fixResult.unresolved.length}`);
57
+ for (const unresolved of fixResult.unresolved) {
58
+ this.logger.warn(` - ${unresolved.packageName}: ${unresolved.dependency}`);
59
+ }
60
+ }
61
+ this.log('');
62
+ }
63
+ const pkgDirs = await collectWorkspacePackageDirs(repoRoot, {
64
+ includeNonPackageWorkspaces: flags['include-non-package-workspaces'],
65
+ });
66
+ const results = [];
67
+ for (const pkgDir of pkgDirs) {
68
+ const analysis = await analyzePackageDependencyIntegrity(pkgDir, {
69
+ includePeerGaps: flags['check-peer-gaps'],
70
+ });
71
+ if (!analysis)
72
+ continue;
73
+ if (flags.package && analysis.packageName !== flags.package)
74
+ continue;
75
+ results.push(analysis);
76
+ }
77
+ if (results.length === 0) {
78
+ this.error(flags.package
79
+ ? `Package '${flags.package}' not found in configured workspaces`
80
+ : 'No packages found to inspect', { exit: 1 });
81
+ }
82
+ const allIssues = [];
83
+ for (const result of results) {
84
+ for (const issue of result.issues) {
85
+ allIssues.push({
86
+ packageName: result.packageName,
87
+ issue,
88
+ });
89
+ }
90
+ }
91
+ const byStatus = {
92
+ transitive: allIssues.filter((r) => r.issue.status === 'transitive'),
93
+ hoist: allIssues.filter((r) => r.issue.status === 'hoist'),
94
+ broken: allIssues.filter((r) => r.issue.status === 'broken'),
95
+ peer: allIssues.filter((r) => r.issue.status === 'peer'),
96
+ };
97
+ this.log(`Packages scanned: ${results.length}`);
98
+ this.log(`Transitive leaks: ${byStatus.transitive.length}`);
99
+ this.log(`Hoist-reliant: ${byStatus.hoist.length}`);
100
+ this.log(`Broken: ${byStatus.broken.length}\n`);
101
+ if (flags['check-peer-gaps']) {
102
+ this.log(`Peer gaps: ${byStatus.peer.length}\n`);
103
+ }
104
+ else {
105
+ this.log('');
106
+ }
107
+ this.printIssueGroup('❌ Broken imports', byStatus.broken);
108
+ if (flags['check-peer-gaps']) {
109
+ this.printIssueGroup('⚠️ Missing required peer dependencies', byStatus.peer);
110
+ }
111
+ this.printIssueGroup('⚠️ Hoist-reliant imports', byStatus.hoist);
112
+ this.printIssueGroup('ℹ️ Transitive imports (currently resolvable)', byStatus.transitive);
113
+ const shouldFail = byStatus.broken.length > 0 ||
114
+ (flags['fail-on-hoist'] && byStatus.hoist.length > 0) ||
115
+ (flags['fail-on-peer'] && byStatus.peer.length > 0);
116
+ if (shouldFail) {
117
+ const failReason = byStatus.broken.length > 0
118
+ ? 'Broken imports found'
119
+ : byStatus.hoist.length > 0 && flags['fail-on-hoist']
120
+ ? 'Hoist-reliant imports found (--fail-on-hoist)'
121
+ : 'Missing required peer dependencies found (--fail-on-peer)';
122
+ this.error(failReason, { exit: 1 });
123
+ }
124
+ this.logger.success('Dependency integrity check complete');
125
+ }
126
+ printIssueGroup(title, rows) {
127
+ if (rows.length === 0)
128
+ return;
129
+ this.log(`${title}:`);
130
+ for (const row of rows) {
131
+ const extra = row.issue.resolvedPath
132
+ ? ` -> ${this.toRepoRelative(row.issue.resolvedPath)}`
133
+ : '';
134
+ const requiredBy = row.issue.requiredBy ? ` (required by ${row.issue.requiredBy})` : '';
135
+ this.log(` - ${row.packageName}: ${row.issue.dependency}${requiredBy}${extra}`);
136
+ }
137
+ this.log('');
138
+ }
139
+ toRepoRelative(absolutePath) {
140
+ const repoRoot = process.cwd();
141
+ if (absolutePath.startsWith(repoRoot)) {
142
+ return absolutePath.slice(repoRoot.length + 1);
143
+ }
144
+ return absolutePath;
145
+ }
146
+ }
147
+ //# sourceMappingURL=dependency-integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-integrity.js","sourceRoot":"","sources":["../../../src/commands/verify/dependency-integrity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport {\n analyzePackageDependencyIntegrity,\n autoFixWorkspaceDependencyDeclarations,\n collectWorkspacePackageDirs,\n type ImportIntegrityIssue,\n} from '../../utils/dependency-integrity.js';\nimport { Logger } from '../../utils/logger.js';\n\ntype Row = {\n packageName: string;\n issue: ImportIntegrityIssue;\n};\n\nexport default class VerifyDependencyIntegrity extends Command {\n static override description =\n 'Inspect package imports and classify transitive, hoist-reliant, broken, and missing peer dependency resolution';\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --package @pie-element/ebsr',\n '<%= config.bin %> <%= command.id %> --fail-on-hoist',\n ];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed output',\n default: false,\n }),\n package: Flags.string({\n description: 'Limit analysis to one package name (eg @pie-element/ebsr)',\n }),\n 'include-non-package-workspaces': Flags.boolean({\n description:\n 'Also analyze app/tool workspaces (can surface many existing issues outside package code)',\n default: false,\n }),\n 'check-peer-gaps': Flags.boolean({\n description:\n 'Also validate missing required peer dependencies from declared direct dependencies',\n default: false,\n }),\n fix: Flags.boolean({\n description: 'Auto-add missing direct dependencies for hoist/broken issues before reporting',\n default: false,\n }),\n 'fail-on-hoist': Flags.boolean({\n description: 'Exit non-zero when hoist-reliant imports are found',\n default: true,\n }),\n 'fail-on-peer': Flags.boolean({\n description: 'Exit non-zero when required peer dependencies are not declared directly',\n default: false,\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(VerifyDependencyIntegrity);\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('🔍 Verifying dependency integrity');\n\n const repoRoot = process.cwd();\n if (flags.fix) {\n this.logger.info('Applying dependency declaration autofixes...');\n const fixResult = await autoFixWorkspaceDependencyDeclarations(repoRoot, {\n includeNonPackageWorkspaces: flags['include-non-package-workspaces'],\n packageName: flags.package,\n includePeerGaps: flags['check-peer-gaps'],\n });\n this.logger.info(\n ` Scanned: ${fixResult.packagesScanned}, Updated: ${fixResult.packagesUpdated}, Added: ${fixResult.dependenciesAdded}`\n );\n if (fixResult.unresolved.length > 0) {\n this.logger.warn(` Unresolved: ${fixResult.unresolved.length}`);\n for (const unresolved of fixResult.unresolved) {\n this.logger.warn(` - ${unresolved.packageName}: ${unresolved.dependency}`);\n }\n }\n this.log('');\n }\n\n const pkgDirs = await collectWorkspacePackageDirs(repoRoot, {\n includeNonPackageWorkspaces: flags['include-non-package-workspaces'],\n });\n const results = [];\n\n for (const pkgDir of pkgDirs) {\n const analysis = await analyzePackageDependencyIntegrity(pkgDir, {\n includePeerGaps: flags['check-peer-gaps'],\n });\n if (!analysis) continue;\n if (flags.package && analysis.packageName !== flags.package) continue;\n results.push(analysis);\n }\n\n if (results.length === 0) {\n this.error(\n flags.package\n ? `Package '${flags.package}' not found in configured workspaces`\n : 'No packages found to inspect',\n { exit: 1 }\n );\n }\n\n const allIssues: Row[] = [];\n for (const result of results) {\n for (const issue of result.issues) {\n allIssues.push({\n packageName: result.packageName,\n issue,\n });\n }\n }\n\n const byStatus = {\n transitive: allIssues.filter((r) => r.issue.status === 'transitive'),\n hoist: allIssues.filter((r) => r.issue.status === 'hoist'),\n broken: allIssues.filter((r) => r.issue.status === 'broken'),\n peer: allIssues.filter((r) => r.issue.status === 'peer'),\n };\n\n this.log(`Packages scanned: ${results.length}`);\n this.log(`Transitive leaks: ${byStatus.transitive.length}`);\n this.log(`Hoist-reliant: ${byStatus.hoist.length}`);\n this.log(`Broken: ${byStatus.broken.length}\\n`);\n if (flags['check-peer-gaps']) {\n this.log(`Peer gaps: ${byStatus.peer.length}\\n`);\n } else {\n this.log('');\n }\n\n this.printIssueGroup('❌ Broken imports', byStatus.broken);\n if (flags['check-peer-gaps']) {\n this.printIssueGroup('⚠️ Missing required peer dependencies', byStatus.peer);\n }\n this.printIssueGroup('⚠️ Hoist-reliant imports', byStatus.hoist);\n this.printIssueGroup('ℹ️ Transitive imports (currently resolvable)', byStatus.transitive);\n\n const shouldFail =\n byStatus.broken.length > 0 ||\n (flags['fail-on-hoist'] && byStatus.hoist.length > 0) ||\n (flags['fail-on-peer'] && byStatus.peer.length > 0);\n if (shouldFail) {\n const failReason =\n byStatus.broken.length > 0\n ? 'Broken imports found'\n : byStatus.hoist.length > 0 && flags['fail-on-hoist']\n ? 'Hoist-reliant imports found (--fail-on-hoist)'\n : 'Missing required peer dependencies found (--fail-on-peer)';\n this.error(failReason, { exit: 1 });\n }\n\n this.logger.success('Dependency integrity check complete');\n }\n\n private printIssueGroup(title: string, rows: Row[]): void {\n if (rows.length === 0) return;\n\n this.log(`${title}:`);\n for (const row of rows) {\n const extra = row.issue.resolvedPath\n ? ` -> ${this.toRepoRelative(row.issue.resolvedPath)}`\n : '';\n const requiredBy = row.issue.requiredBy ? ` (required by ${row.issue.requiredBy})` : '';\n this.log(` - ${row.packageName}: ${row.issue.dependency}${requiredBy}${extra}`);\n }\n this.log('');\n }\n\n private toRepoRelative(absolutePath: string): string {\n const repoRoot = process.cwd();\n if (absolutePath.startsWith(repoRoot)) {\n return absolutePath.slice(repoRoot.length + 1);\n }\n\n return absolutePath;\n }\n}\n"]}
@@ -10,4 +10,3 @@ export default class ReactBuild extends Command {
10
10
  run(): Promise<void>;
11
11
  private buildElement;
12
12
  }
13
- //# sourceMappingURL=react-build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-build.js","sourceRoot":"","sources":["../../../src/commands/verify/react-build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-build.js","sourceRoot":"","sources":["../../../src/commands/verify/react-build.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, Flags } from '@oclif/core';\nimport { Logger } from '../../utils/logger.js';\nimport { execSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ninterface BuildResult {\n element: string;\n success: boolean;\n error?: string;\n duration?: number;\n}\n\nconst ELEMENTS_REACT_DIR = 'packages/elements-react';\n\nexport default class ReactBuild extends Command {\n static override description = 'Verify React element builds';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show detailed build output',\n default: false,\n }),\n element: Flags.string({\n description: 'Build only specified element',\n }),\n };\n\n private logger = new Logger();\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(ReactBuild);\n\n this.logger = new Logger(flags.verbose);\n\n this.logger.section('🔨 Verifying React element builds');\n\n // Get all element directories\n const items = await readdir(ELEMENTS_REACT_DIR, { withFileTypes: true });\n let elements = items.filter((item) => item.isDirectory()).map((item) => item.name);\n\n // Filter to specific element if requested\n if (flags.element) {\n if (!elements.includes(flags.element)) {\n this.error(`Element '${flags.element}' not found in ${ELEMENTS_REACT_DIR}`);\n }\n elements = [flags.element];\n }\n\n if (elements.length === 0) {\n this.logger.warn(`⚠️ No React elements found in ${ELEMENTS_REACT_DIR}/`);\n return;\n }\n\n this.logger.info(`Found ${elements.length} element(s) to verify\\n`);\n\n const results: BuildResult[] = [];\n\n // Build each element sequentially\n for (const element of elements) {\n process.stdout.write(` Building ${element}... `);\n\n const result = await this.buildElement(element, flags.verbose);\n results.push(result);\n\n if (result.success) {\n console.log(`✅ (${result.duration}ms)`);\n } else {\n console.log('❌');\n }\n }\n\n // Generate report\n this.log(`\\n${'='.repeat(60)}`);\n this.log('📊 BUILD VERIFICATION REPORT');\n this.log('='.repeat(60));\n\n const successful = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n this.log(`Total: ${results.length}`);\n this.log(`Passed: ${successful.length} ✅`);\n this.log(`Failed: ${failed.length} ❌`);\n\n if (successful.length > 0) {\n this.log('\\n✅ SUCCESSFUL BUILDS:');\n successful.forEach((r) => {\n this.log(` - ${r.element} (${r.duration}ms)`);\n });\n }\n\n if (failed.length > 0) {\n this.log('\\n❌ FAILED BUILDS:');\n failed.forEach((r) => {\n this.log(`\\n Element: ${r.element}`);\n if (r.error) {\n // Extract first few lines of error for summary\n const errorLines = r.error.split('\\n').slice(0, 10);\n errorLines.forEach((line) => {\n if (line.trim()) {\n this.log(` ${line}`);\n }\n });\n if (r.error.split('\\n').length > 10) {\n this.log(' ... (truncated)');\n }\n }\n });\n\n this.log('\\n💡 To see full error for a specific element:');\n this.log(' cd packages/elements-react/<element-name>');\n this.log(' bun run build');\n }\n\n this.log(`\\n${'='.repeat(60)}\\n`);\n\n // Exit with error code if any builds failed\n if (failed.length > 0) {\n this.error('Some builds failed', { exit: 1 });\n }\n }\n\n private async buildElement(element: string, verbose: boolean): Promise<BuildResult> {\n const elementDir = join(ELEMENTS_REACT_DIR, element);\n const packageJsonPath = join(elementDir, 'package.json');\n\n // Skip if no package.json\n if (!existsSync(packageJsonPath)) {\n return {\n element,\n success: false,\n error: 'No package.json found',\n };\n }\n\n const startTime = Date.now();\n\n try {\n execSync('bun run build', {\n cwd: elementDir,\n stdio: verbose ? 'inherit' : 'pipe',\n encoding: 'utf-8',\n });\n\n const duration = Date.now() - startTime;\n\n return {\n element,\n success: true,\n duration,\n };\n } catch (error: unknown) {\n const duration = Date.now() - startTime;\n\n // Extract error message from stderr\n const err = error as { stderr?: Buffer; message?: string };\n const stderr = err.stderr?.toString() || err.message || 'Unknown error';\n\n return {\n element,\n success: false,\n error: stderr,\n duration,\n };\n }\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export { run } from '@oclif/core';
2
- //# sourceMappingURL=index.d.ts.map