@yahoo/uds-create-config 2.44.0 → 3.0.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 (376) hide show
  1. package/README.md +129 -0
  2. package/dist/ai-lanes.d.ts +23 -0
  3. package/dist/ai-lanes.js +34 -0
  4. package/dist/authoring/define-component.d.ts +85 -0
  5. package/dist/configs/CanvasConfig.d.ts +3237 -0
  6. package/dist/configs/CanvasConfig.js +332 -0
  7. package/dist/configs/build-options.d.ts +10 -0
  8. package/dist/configs/build-options.js +68 -0
  9. package/dist/configs/platform.d.ts +15 -0
  10. package/dist/configs/platform.js +17 -0
  11. package/dist/configs/react-native-system.d.ts +3026 -0
  12. package/dist/configs/react-native-system.js +64 -0
  13. package/dist/configs/system.d.ts +2771 -0
  14. package/dist/configs/system.js +74 -0
  15. package/dist/css/properties.generated.d.ts +14 -0
  16. package/dist/css/properties.generated.js +6260 -0
  17. package/dist/css/value-type.d.ts +48 -0
  18. package/dist/css/value-type.js +131 -0
  19. package/dist/css/values.d.ts +33 -0
  20. package/dist/css/values.js +116 -0
  21. package/dist/entities/native/NativeModifier.d.ts +25 -0
  22. package/dist/entities/native/NativeModifier.js +41 -0
  23. package/dist/entities/native/NativeSettings.d.ts +44 -0
  24. package/dist/entities/native/NativeSettings.js +39 -0
  25. package/dist/entities/native/NativeStyleProperty.d.ts +355 -0
  26. package/dist/entities/native/NativeStyleProperty.js +28 -0
  27. package/dist/entities/native/NativeToken.d.ts +31 -0
  28. package/dist/entities/native/NativeToken.js +49 -0
  29. package/dist/entities/system/CanvasRole.d.ts +34 -0
  30. package/dist/entities/system/CanvasRole.js +45 -0
  31. package/dist/entities/system/Component.d.ts +1287 -0
  32. package/dist/entities/system/Component.js +1840 -0
  33. package/dist/entities/system/Composite.d.ts +12 -0
  34. package/dist/entities/system/Composite.js +26 -0
  35. package/dist/entities/system/Device.d.ts +11 -0
  36. package/dist/entities/system/Device.js +18 -0
  37. package/dist/entities/system/File.d.ts +72 -0
  38. package/dist/entities/system/File.js +136 -0
  39. package/dist/entities/system/Font.d.ts +48 -0
  40. package/dist/entities/system/Font.js +56 -0
  41. package/dist/entities/system/GlobalStyle.d.ts +26 -0
  42. package/dist/entities/system/GlobalStyle.js +54 -0
  43. package/dist/entities/system/Guidance.d.ts +85 -0
  44. package/dist/entities/system/Guidance.js +59 -0
  45. package/dist/entities/system/GuidanceStyle.d.ts +14 -0
  46. package/dist/entities/system/GuidanceStyle.js +8 -0
  47. package/dist/entities/system/Icon.d.ts +46 -0
  48. package/dist/entities/system/Icon.js +46 -0
  49. package/dist/entities/system/LinkedSystem.d.ts +504 -0
  50. package/dist/entities/system/LinkedSystem.js +814 -0
  51. package/dist/entities/system/Modifier.d.ts +92 -0
  52. package/dist/entities/system/Modifier.js +120 -0
  53. package/dist/entities/system/Motion.d.ts +28 -0
  54. package/dist/entities/system/Motion.js +48 -0
  55. package/dist/entities/system/Operation.d.ts +100 -0
  56. package/dist/entities/system/Operation.js +236 -0
  57. package/dist/entities/system/Package.d.ts +42 -0
  58. package/dist/entities/system/Package.js +75 -0
  59. package/dist/entities/system/Settings.d.ts +94 -0
  60. package/dist/entities/system/Settings.js +166 -0
  61. package/dist/entities/system/StyleProperty.d.ts +135 -0
  62. package/dist/entities/system/StyleProperty.js +438 -0
  63. package/dist/entities/system/Token.d.ts +67 -0
  64. package/dist/entities/system/Token.js +129 -0
  65. package/dist/entities/system/Tool.d.ts +134 -0
  66. package/dist/entities/system/Tool.js +124 -0
  67. package/dist/entities/system/color.d.ts +64 -0
  68. package/dist/entities/system/color.js +123 -0
  69. package/dist/entities/system/component-module.d.ts +63 -0
  70. package/dist/entities/system/component-module.js +258 -0
  71. package/dist/entities/system/copy-plan.d.ts +98 -0
  72. package/dist/entities/system/copy-plan.js +451 -0
  73. package/dist/entities/system/defineComponent.d.ts +428 -0
  74. package/dist/entities/system/defineComponent.js +337 -0
  75. package/dist/entities/system/element.d.ts +101 -0
  76. package/dist/entities/system/element.js +171 -0
  77. package/dist/entities/system/icon-library.d.ts +64 -0
  78. package/dist/entities/system/icon-library.js +112 -0
  79. package/dist/entities/system/icon-metadata.d.ts +72 -0
  80. package/dist/entities/system/icon-metadata.js +111 -0
  81. package/dist/entities/system/link-declaration.d.ts +27 -0
  82. package/dist/entities/system/link-declaration.js +64 -0
  83. package/dist/entities/system/link-plan.d.ts +160 -0
  84. package/dist/entities/system/link-plan.js +770 -0
  85. package/dist/entities/system/runtime-modules.d.ts +25 -0
  86. package/dist/entities/system/runtime-modules.js +38 -0
  87. package/dist/entities/system/style-bag.d.ts +20 -0
  88. package/dist/entities/system/style-bag.js +246 -0
  89. package/dist/entities/system/token-index.d.ts +89 -0
  90. package/dist/entities/system/token-index.js +112 -0
  91. package/dist/framework/Config.d.ts +2472 -0
  92. package/dist/framework/Config.js +5023 -0
  93. package/dist/framework/Entity.d.ts +127 -0
  94. package/dist/framework/Entity.js +125 -0
  95. package/dist/framework/authoring.d.ts +24 -0
  96. package/dist/framework/authoring.js +7 -0
  97. package/dist/framework/change-hooks.d.ts +119 -0
  98. package/dist/framework/change-hooks.js +131 -0
  99. package/dist/framework/changes.d.ts +88 -0
  100. package/dist/framework/changes.js +246 -0
  101. package/dist/framework/class-names.d.ts +260 -0
  102. package/dist/framework/class-names.js +630 -0
  103. package/dist/framework/coalesce.d.ts +25 -0
  104. package/dist/framework/coalesce.js +60 -0
  105. package/dist/framework/config-op.d.ts +76 -0
  106. package/dist/framework/config-op.js +43 -0
  107. package/dist/framework/config-operation-kind.d.ts +14 -0
  108. package/dist/framework/config-operation-kind.js +14 -0
  109. package/dist/framework/config-ops.d.ts +34 -0
  110. package/dist/framework/config-ops.js +187 -0
  111. package/dist/framework/defineConfig.d.ts +196 -0
  112. package/dist/framework/defineConfig.js +100 -0
  113. package/dist/framework/defineDerivedEntity.d.ts +74 -0
  114. package/dist/framework/defineDerivedEntity.js +83 -0
  115. package/dist/framework/defineEntity.d.ts +318 -0
  116. package/dist/framework/defineEntity.js +183 -0
  117. package/dist/framework/defineSubEntity.d.ts +148 -0
  118. package/dist/framework/defineSubEntity.js +121 -0
  119. package/dist/framework/derived-mutations.d.ts +20 -0
  120. package/dist/framework/derived-mutations.js +38 -0
  121. package/dist/framework/entity-search.d.ts +29 -0
  122. package/dist/framework/entity-search.js +117 -0
  123. package/dist/framework/inline-sources.d.ts +49 -0
  124. package/dist/framework/inline-sources.js +388 -0
  125. package/dist/framework/layer-styles.d.ts +25 -0
  126. package/dist/framework/layer-styles.js +49 -0
  127. package/dist/framework/memo.d.ts +48 -0
  128. package/dist/framework/memo.js +84 -0
  129. package/dist/framework/overlay.d.ts +49 -0
  130. package/dist/framework/overlay.js +17 -0
  131. package/dist/framework/plan.d.ts +49 -0
  132. package/dist/framework/plan.js +73 -0
  133. package/dist/framework/projections.d.ts +480 -0
  134. package/dist/framework/projections.js +974 -0
  135. package/dist/framework/prop-surface.d.ts +132 -0
  136. package/dist/framework/prop-surface.js +278 -0
  137. package/dist/framework/ref-graph.d.ts +71 -0
  138. package/dist/framework/ref-graph.js +158 -0
  139. package/dist/framework/ref-integrity.d.ts +55 -0
  140. package/dist/framework/ref-integrity.js +171 -0
  141. package/dist/framework/registered.d.ts +95 -0
  142. package/dist/framework/registry-dir.d.ts +42 -0
  143. package/dist/framework/registry-dir.js +48 -0
  144. package/dist/framework/registry.d.ts +300 -0
  145. package/dist/framework/registry.js +104 -0
  146. package/dist/framework/rejection.d.ts +58 -0
  147. package/dist/framework/rejection.js +111 -0
  148. package/dist/framework/rename-inference.d.ts +26 -0
  149. package/dist/framework/rename-inference.js +50 -0
  150. package/dist/framework/render-spec.d.ts +296 -0
  151. package/dist/framework/render-spec.js +809 -0
  152. package/dist/framework/schema-version.d.ts +140 -0
  153. package/dist/framework/schema-version.js +214 -0
  154. package/dist/framework/schemas.d.ts +109 -0
  155. package/dist/framework/schemas.js +615 -0
  156. package/dist/framework/session.d.ts +196 -0
  157. package/dist/framework/session.js +367 -0
  158. package/dist/framework/signature.d.ts +15 -0
  159. package/dist/framework/signature.js +83 -0
  160. package/dist/framework/snapshot.d.ts +115 -0
  161. package/dist/framework/snapshot.js +277 -0
  162. package/dist/framework/source-integrity.d.ts +226 -0
  163. package/dist/framework/source-integrity.js +478 -0
  164. package/dist/framework/sources.d.ts +211 -0
  165. package/dist/framework/sources.js +89 -0
  166. package/dist/framework/utils/compiled-schema.d.ts +23 -0
  167. package/dist/framework/utils/compiled-schema.js +46 -0
  168. package/dist/framework/utils/content-key.d.ts +15 -0
  169. package/dist/framework/utils/content-key.js +33 -0
  170. package/dist/framework/utils/enumerated.d.ts +13 -0
  171. package/dist/framework/utils/enumerated.js +19 -0
  172. package/dist/framework/utils/field-path.d.ts +95 -0
  173. package/dist/framework/utils/field-path.js +136 -0
  174. package/dist/framework/utils/field-schema.d.ts +55 -0
  175. package/dist/framework/utils/field-schema.js +183 -0
  176. package/dist/framework/utils/group.d.ts +37 -0
  177. package/dist/framework/utils/group.js +13 -0
  178. package/dist/framework/utils/package-path.d.ts +37 -0
  179. package/dist/framework/utils/package-path.js +61 -0
  180. package/dist/framework/utils/refs.d.ts +194 -0
  181. package/dist/framework/utils/refs.js +403 -0
  182. package/dist/framework/validate-spec.d.ts +27 -0
  183. package/dist/framework/validate-spec.js +45 -0
  184. package/dist/framework/value-domain.d.ts +26 -0
  185. package/dist/framework/value-domain.js +202 -0
  186. package/dist/framework/views-facade.d.ts +15 -0
  187. package/dist/framework/views-facade.js +19 -0
  188. package/dist/index.d.ts +90 -42
  189. package/dist/index.js +86 -37
  190. package/dist/migrations/2.0.0/raw-css.d.ts +11 -0
  191. package/dist/migrations/2.0.0/raw-css.js +72 -0
  192. package/dist/migrations/2.0.0/v1-artifact.d.ts +1559 -0
  193. package/dist/migrations/2.0.0/v1-artifact.js +1018 -0
  194. package/dist/migrations/20260908171448_settings_as_kind.d.ts +22 -0
  195. package/dist/migrations/20260908171448_settings_as_kind.js +89 -0
  196. package/dist/migrations/20260908194245_visible_state_pointer.d.ts +19 -0
  197. package/dist/migrations/20260908194245_visible_state_pointer.js +115 -0
  198. package/dist/migrations/20260909183001_icon_knockout_variants.d.ts +18 -0
  199. package/dist/migrations/20260909183001_icon_knockout_variants.js +8 -0
  200. package/dist/migrations/20260910212453_linked_system_link_ops.d.ts +13 -0
  201. package/dist/migrations/20260910212453_linked_system_link_ops.js +8 -0
  202. package/dist/migrations/index.d.ts +2 -0
  203. package/dist/migrations/index.js +2 -0
  204. package/dist/react-native/style-keys.generated.d.ts +10 -0
  205. package/dist/react-native/style-keys.generated.js +167 -0
  206. package/dist/renderer/RendererErrorBoundary.d.ts +32 -5
  207. package/dist/renderer/RendererErrorBoundary.js +59 -10
  208. package/dist/renderer/UdsRenderer.d.ts +11 -10
  209. package/dist/renderer/UdsRenderer.js +1 -1
  210. package/dist/renderer/assetEntries.d.ts +37 -0
  211. package/dist/renderer/assetEntries.js +39 -0
  212. package/dist/renderer/assetRenderable.d.ts +14 -6
  213. package/dist/renderer/assetRenderable.js +8 -2
  214. package/dist/renderer/componentEntry.d.ts +58 -0
  215. package/dist/renderer/componentEntry.js +71 -0
  216. package/dist/renderer/icon-library.d.ts +20 -0
  217. package/dist/renderer/index.d.ts +7 -7
  218. package/dist/renderer/index.js +5 -5
  219. package/dist/renderer/primitives/SlotRenderer.d.ts +1 -1
  220. package/dist/renderer/primitives/SlotRenderer.js +1 -1
  221. package/dist/renderer/runtimeComponent.d.ts +33 -0
  222. package/dist/renderer/runtimeComponent.js +113 -0
  223. package/dist/renderer/spec-content.d.ts +43 -0
  224. package/dist/renderer/spec-content.js +95 -0
  225. package/dist/renderer/wrapRegistry.d.ts +22 -37
  226. package/dist/renderer/wrapRegistry.js +10 -20
  227. package/dist/renderer/wrappers/event-bridge.js +6 -5
  228. package/dist/renderer/wrappers/hex-normalize.js +6 -5
  229. package/dist/renderer/wrappers/html-aliases.d.ts +7 -2
  230. package/dist/renderer/wrappers/html-aliases.js +36 -19
  231. package/dist/renderer/wrappers/inline-styles.js +7 -6
  232. package/dist/spec/asset-jsx.d.ts +18 -5
  233. package/dist/spec/asset-jsx.js +27 -16
  234. package/dist/spec/collapse-text-labels.d.ts +5 -15
  235. package/dist/spec/collapse-text-labels.js +26 -19
  236. package/dist/spec/empty-node-slots.d.ts +56 -34
  237. package/dist/spec/empty-node-slots.js +87 -47
  238. package/dist/spec/index.d.ts +21 -10
  239. package/dist/spec/index.js +21 -10
  240. package/dist/spec/jsxToSpec.d.ts +14 -9
  241. package/dist/spec/jsxToSpec.js +20 -3
  242. package/dist/spec/preview-elements.d.ts +63 -0
  243. package/dist/spec/preview-elements.js +89 -0
  244. package/dist/spec/rewrite-refs.d.ts +58 -0
  245. package/dist/spec/rewrite-refs.js +250 -0
  246. package/dist/spec/specToJsx.js +18 -29
  247. package/dist/tsconfig.tsbuildinfo +1 -1
  248. package/package.json +39 -52
  249. package/dist/AssetGroup.d.ts +0 -77
  250. package/dist/AssetGroup.js +0 -125
  251. package/dist/Component.d.ts +0 -333
  252. package/dist/Component.js +0 -1061
  253. package/dist/ComponentGroup.d.ts +0 -22
  254. package/dist/ComponentGroup.js +0 -51
  255. package/dist/CompositeStyle.d.ts +0 -30
  256. package/dist/CompositeStyle.js +0 -59
  257. package/dist/Config.d.ts +0 -528
  258. package/dist/Config.js +0 -1712
  259. package/dist/Mode.d.ts +0 -41
  260. package/dist/Mode.js +0 -81
  261. package/dist/Modifier.d.ts +0 -51
  262. package/dist/Modifier.js +0 -97
  263. package/dist/MotionDef.d.ts +0 -81
  264. package/dist/MotionDef.js +0 -212
  265. package/dist/Props.d.ts +0 -332
  266. package/dist/Props.js +0 -35
  267. package/dist/Provider.d.ts +0 -20
  268. package/dist/Provider.js +0 -14
  269. package/dist/StyleProp.d.ts +0 -145
  270. package/dist/StyleProp.js +0 -239
  271. package/dist/Token.d.ts +0 -76
  272. package/dist/Token.js +0 -133
  273. package/dist/TokenGroup.d.ts +0 -33
  274. package/dist/TokenGroup.js +0 -69
  275. package/dist/asset-kind.d.ts +0 -55
  276. package/dist/asset-kind.js +0 -29
  277. package/dist/asset-value.d.ts +0 -23
  278. package/dist/asset-value.js +0 -40
  279. package/dist/brands.d.ts +0 -30
  280. package/dist/brands.js +0 -20
  281. package/dist/captureCallerPath.d.ts +0 -48
  282. package/dist/captureCallerPath.js +0 -95
  283. package/dist/colorExpressions.d.ts +0 -131
  284. package/dist/colorExpressions.js +0 -148
  285. package/dist/component-referrers.d.ts +0 -30
  286. package/dist/component-referrers.js +0 -40
  287. package/dist/config-diagnostics.d.ts +0 -21
  288. package/dist/config-diagnostics.js +0 -12
  289. package/dist/defineAssetGroup.d.ts +0 -200
  290. package/dist/defineAssetGroup.js +0 -323
  291. package/dist/defineProvider.d.ts +0 -29
  292. package/dist/defineProvider.js +0 -60
  293. package/dist/element-marker.d.ts +0 -63
  294. package/dist/element-marker.js +0 -113
  295. package/dist/entity-utils.d.ts +0 -56
  296. package/dist/entity-utils.js +0 -105
  297. package/dist/extension.d.ts +0 -55
  298. package/dist/extension.js +0 -214
  299. package/dist/factories.d.ts +0 -863
  300. package/dist/factories.js +0 -475
  301. package/dist/font-face.d.ts +0 -25
  302. package/dist/font-face.js +0 -72
  303. package/dist/foreign-component-name.d.ts +0 -21
  304. package/dist/foreign-component-name.js +0 -42
  305. package/dist/interpolate.d.ts +0 -20
  306. package/dist/interpolate.js +0 -10
  307. package/dist/jsx/__fixtures__/cross-component-preview.d.ts +0 -3
  308. package/dist/jsx/__fixtures__/cross-component-preview.js +0 -15
  309. package/dist/jsx/jsx-dev-runtime.d.ts +0 -15
  310. package/dist/jsx/jsx-dev-runtime.js +0 -11
  311. package/dist/jsx/jsx-runtime.d.ts +0 -48
  312. package/dist/jsx/jsx-runtime.js +0 -305
  313. package/dist/linked-system-pins.d.ts +0 -30
  314. package/dist/linked-system-pins.js +0 -45
  315. package/dist/linkedNodePrefixes.d.ts +0 -73
  316. package/dist/linkedNodePrefixes.js +0 -99
  317. package/dist/markers.d.ts +0 -235
  318. package/dist/markers.js +0 -70
  319. package/dist/motion-constants.d.ts +0 -37
  320. package/dist/motion-constants.js +0 -61
  321. package/dist/native/NativeConfig.d.ts +0 -56
  322. package/dist/native/NativeConfig.js +0 -162
  323. package/dist/native/assets.d.ts +0 -20
  324. package/dist/native/assets.js +0 -17
  325. package/dist/native/components.d.ts +0 -139
  326. package/dist/native/components.js +0 -67
  327. package/dist/native/index.d.ts +0 -18
  328. package/dist/native/index.js +0 -17
  329. package/dist/native/modes.d.ts +0 -10
  330. package/dist/native/modes.js +0 -11
  331. package/dist/native/types.d.ts +0 -95
  332. package/dist/native/types.js +0 -0
  333. package/dist/native/validation.d.ts +0 -8
  334. package/dist/native/validation.js +0 -885
  335. package/dist/native/values.d.ts +0 -7
  336. package/dist/native/values.js +0 -15
  337. package/dist/native.d.ts +0 -12
  338. package/dist/native.js +0 -10
  339. package/dist/refs.d.ts +0 -204
  340. package/dist/refs.js +0 -129
  341. package/dist/registry-aliases.d.ts +0 -33
  342. package/dist/registry-aliases.js +0 -35
  343. package/dist/registry-dir.d.ts +0 -22
  344. package/dist/registry-dir.js +0 -10
  345. package/dist/renderer/makeRegistry.d.ts +0 -34
  346. package/dist/renderer/makeRegistry.js +0 -52
  347. package/dist/renderer/makeUdsRenderer.d.ts +0 -13
  348. package/dist/renderer/makeUdsRenderer.js +0 -51
  349. package/dist/renderer/wrappers/component-slots.d.ts +0 -41
  350. package/dist/renderer/wrappers/component-slots.js +0 -66
  351. package/dist/renderer/wrappers/slot-resolution.d.ts +0 -25
  352. package/dist/renderer/wrappers/slot-resolution.js +0 -68
  353. package/dist/renderer/wrappers/void-elements.d.ts +0 -37
  354. package/dist/renderer/wrappers/void-elements.js +0 -40
  355. package/dist/spec/layer-props.d.ts +0 -52
  356. package/dist/spec/layer-props.js +0 -149
  357. package/dist/spec/preview-controls.d.ts +0 -44
  358. package/dist/spec/preview-controls.js +0 -139
  359. package/dist/spec/slot-refs.d.ts +0 -39
  360. package/dist/spec/slot-refs.js +0 -56
  361. package/dist/token-override-rows.d.ts +0 -68
  362. package/dist/token-override-rows.js +0 -233
  363. package/dist/tokenValueType.d.ts +0 -34
  364. package/dist/tokenValueType.js +0 -138
  365. package/dist/types/css-properties.d.ts +0 -233
  366. package/dist/types/css-properties.js +0 -14
  367. package/dist/types/css-property-keywords.d.ts +0 -156
  368. package/dist/types/css-property-keywords.js +0 -616
  369. package/dist/types/css-values.d.ts +0 -63
  370. package/dist/types/css-values.js +0 -16
  371. package/dist/types.d.ts +0 -1138
  372. package/dist/types.js +0 -12
  373. package/dist/units.d.ts +0 -14
  374. package/dist/units.js +0 -16
  375. package/dist/utils/index.d.ts +0 -4
  376. package/dist/utils/index.js +0 -4
@@ -0,0 +1,451 @@
1
+ import { rejectData } from "../../framework/rejection.js";
2
+ import { MINTED, collectRefs, isMintedRow, kindOf, pathOf, rewriteRefs, sourceOf, splitRef } from "../../framework/utils/refs.js";
3
+ import { kindBorrowable } from "../../framework/registry.js";
4
+ import { File } from "./File.js";
5
+ import { componentModuleFilePaths, componentRegistryImports } from "./component-module.js";
6
+ import { PIN_KIND, covers, declarationOf, narrowDeclaration } from "./link-declaration.js";
7
+ //#region src/entities/system/copy-plan.ts
8
+ /**
9
+ * The source's entries one path names: every item of the kind for `'*'`, a folder's members for a
10
+ * group path, the item itself otherwise. Rows keep the source's own names.
11
+ */
12
+ function sourceEntries({ source, kind, path }) {
13
+ if (path === "*") return source.list(kind).map((item) => ({
14
+ from: item.path,
15
+ to: item.path
16
+ }));
17
+ if (source.resolve(kind, path)) return [{
18
+ from: path,
19
+ to: path
20
+ }];
21
+ return source.members(kind, path).map((member) => ({
22
+ from: member.path,
23
+ to: member.path
24
+ }));
25
+ }
26
+ /**
27
+ * The source's components a code component's render imports by module.
28
+ *
29
+ * A render names a sibling component through an import rather than a ref, and the source's file edges
30
+ * record which registered components those imports bind. Read off every file the component's module
31
+ * reaches, so a helper that imports a component counts too.
32
+ */
33
+ function renderImportedComponents({ source, path }) {
34
+ const { file } = source.resolve("component", path)?.body ?? {};
35
+ if (!file) return [];
36
+ const ref = splitRef(file.__ref);
37
+ if (ref.kind !== "file" || ref.source) return [];
38
+ const components = [];
39
+ for (const filePath of componentModuleFilePaths(source, ref.path)) for (const edge of componentRegistryImports(source, filePath)) for (const binding of edge.bindings) components.push(pathOf(binding.componentRef));
40
+ return components;
41
+ }
42
+ /**
43
+ * The source's files a code component renders from: the file its `file` names and every local file
44
+ * that module reaches through its imports. Stops at a sibling component's file, which comes along
45
+ * with the sibling ({@link renderImportedComponents}). Empty for a component generated from config.
46
+ */
47
+ function renderSourceFiles({ source, path }) {
48
+ const { file } = source.resolve("component", path)?.body ?? {};
49
+ if (!file) return [];
50
+ const ref = splitRef(file.__ref);
51
+ if (ref.kind !== "file" || ref.source) return [];
52
+ return componentModuleFilePaths(source, ref.path);
53
+ }
54
+ /** A folder's meta as this config would author it — without a pointer the source held, and without
55
+ * the build's mark, which no kind declares as a group field. */
56
+ function ownMeta(meta) {
57
+ const { ref: _pointer, [MINTED]: _mark, ...own } = meta;
58
+ return own;
59
+ }
60
+ /**
61
+ * What `copy` would do with this input, and the patches that do it.
62
+ *
63
+ * A copied row stands on its own: every ref into the source is followed and its target is taken too,
64
+ * unless this config already holds that path — then the copy points at what is here. A code
65
+ * component's files come along the same way, so the copy renders from its own rows. A ref through a
66
+ * third system is theirs to resolve and is left as spelled, and a kind this config can't hold stays
67
+ * qualified, since the pin survives to answer it.
68
+ *
69
+ * Refuses exactly what the op refuses, since the op is this plan applied.
70
+ */
71
+ function planCopy({ config, input }) {
72
+ const { path: slug } = input;
73
+ const wholesale = input.data === "*";
74
+ const source = config.sourceFor(slug);
75
+ if (!source) rejectData(`Cannot copy through "${slug}" — nothing has resolved that link.`);
76
+ /** The kinds named, with what to take of each. An accessor this config has no kind for is refused
77
+ * by name, since it is a typo rather than a source that offers nothing. */
78
+ const wanted = [];
79
+ if (input.data === "*") for (const kind of config.borrowableKinds(slug)) wanted.push({
80
+ kind,
81
+ paths: "*"
82
+ });
83
+ else {
84
+ const accessors = config.accessors();
85
+ for (const [accessor, paths] of Object.entries(input.data)) {
86
+ const cls = accessors[accessor];
87
+ if (!cls) rejectData(`Cannot copy through "${slug}" — this system has no "${accessor}".`, ["data", accessor]);
88
+ wanted.push({
89
+ kind: cls.kind,
90
+ paths
91
+ });
92
+ }
93
+ }
94
+ if (wanted.length === 0) rejectData(`Cannot copy through "${slug}" — name what to take in \`data\`.`);
95
+ /** One row landing: the source's path, the local path, and the delta a pointer there carried. */
96
+ const taking = [];
97
+ const folders = [];
98
+ const reused = [];
99
+ /** Every `kind:path` `take` has answered, whichever way, so the walk below visits each once. */
100
+ const seen = /* @__PURE__ */ new Set();
101
+ const folder = (kind, path) => {
102
+ if (!folders.some((f) => f.kind === kind && f.path === path)) folders.push({
103
+ kind,
104
+ path
105
+ });
106
+ };
107
+ /**
108
+ * Queue one entity of the source to land at `at`. Yours already — authored, a value you named over
109
+ * theirs, or borrowed through another pin — wins and is reused rather than copied, since copying is
110
+ * about this source's values and neither is one of them. `replace` writes theirs over a row of
111
+ * yours, and over a row held through another pin when the call named it; a row reached only through
112
+ * a ref stays that pin's, since the person pointed at what named it. A pointer through this pin is
113
+ * replaced by the literal it stood for.
114
+ */
115
+ const take = ({ kind, theirs, at, named }) => {
116
+ const key = `${kind}:${at}`;
117
+ if (seen.has(key)) return { ok: true };
118
+ seen.add(key);
119
+ const held = config.resolve(kind, at);
120
+ if (held && held.borrowedFrom !== slug) {
121
+ const own = held.borrowedFrom === void 0;
122
+ if (input.onConflict !== "replace" || !own && !named) {
123
+ reused.push({
124
+ kind,
125
+ path: at
126
+ });
127
+ return { ok: true };
128
+ }
129
+ const fit = config.canBorrow({
130
+ kind,
131
+ path: theirs,
132
+ slug
133
+ });
134
+ if (!fit.ok) return fit;
135
+ const stored = config.storedBody(kind, at);
136
+ const minted = stored !== void 0 && isMintedRow(stored);
137
+ taking.push({
138
+ kind,
139
+ theirs,
140
+ at,
141
+ named,
142
+ ...minted ? {} : { extend: {} },
143
+ overwrite: true
144
+ });
145
+ return { ok: true };
146
+ }
147
+ const fit = config.canBorrow({
148
+ kind,
149
+ path: theirs,
150
+ slug
151
+ });
152
+ if (!fit.ok) return fit;
153
+ const stored = held ? config.storedBody(kind, at) : void 0;
154
+ const extend = stored ? stored.extend : void 0;
155
+ taking.push({
156
+ kind,
157
+ theirs,
158
+ at,
159
+ named,
160
+ ...stored ? { extend: extend ?? {} } : {}
161
+ });
162
+ return { ok: true };
163
+ };
164
+ /**
165
+ * Queue one of the source's files to land at the same path. A file is never linked, so one already
166
+ * here is this config's own: the same bytes are one file and are reused, different bytes are two
167
+ * files and the copy refuses rather than binding the copied render to code the source never wrote
168
+ * for it — unless the call asked to replace what is here.
169
+ */
170
+ const takeFile = ({ path, component }) => {
171
+ const key = `file:${path}`;
172
+ if (seen.has(key)) return;
173
+ seen.add(key);
174
+ const mine = File.get(config, path);
175
+ if (!mine) {
176
+ taking.push({
177
+ kind: "file",
178
+ theirs: path,
179
+ at: path,
180
+ named: false
181
+ });
182
+ return;
183
+ }
184
+ if (mine.hash === File.get(source, path)?.hash) {
185
+ reused.push({
186
+ kind: "file",
187
+ path
188
+ });
189
+ return;
190
+ }
191
+ if (input.onConflict !== "replace") rejectData(`Cannot copy component "${component}" from "${slug}" — its code needs "${path}", and this system already holds a different file at that path. Pass \`onConflict: 'replace'\` to write the source's over it.`);
192
+ taking.push({
193
+ kind: "file",
194
+ theirs: path,
195
+ at: path,
196
+ named: false,
197
+ extend: {},
198
+ overwrite: true
199
+ });
200
+ };
201
+ for (const { kind, paths } of wanted) {
202
+ if (!kindBorrowable(config.entityOf(kind), {
203
+ config,
204
+ source
205
+ })) {
206
+ if (wholesale) continue;
207
+ rejectData(`Cannot copy ${kind} from "${slug}" — ${kind} is not borrowable. Its entries belong to the config that holds them, not to the system it draws on.`);
208
+ }
209
+ if (paths === "*") {
210
+ const entries = sourceEntries({
211
+ source,
212
+ kind,
213
+ path: "*"
214
+ });
215
+ if (entries.length === 0 && !wholesale) rejectData(`"${slug}" has no ${kind} entries to copy.`);
216
+ for (const { from: theirs, to: at } of entries) take({
217
+ kind,
218
+ theirs,
219
+ at,
220
+ named: true
221
+ });
222
+ for (const group of source.groups(kind)) folder(kind, group.path);
223
+ continue;
224
+ }
225
+ for (const from of paths) {
226
+ const isItem = source.resolve(kind, from) !== void 0;
227
+ if (!isItem && source.members(kind, from).length === 0) rejectData(`Cannot copy ${kind} "${from}" from "${slug}" — "${slug}" has no ${kind} "${from}".`);
228
+ for (const { from: theirs, to: at } of sourceEntries({
229
+ source,
230
+ kind,
231
+ path: from
232
+ })) {
233
+ const landed = take({
234
+ kind,
235
+ theirs,
236
+ at,
237
+ named: true
238
+ });
239
+ if (!landed.ok && isItem) rejectData(`Cannot copy ${kind} "${theirs}" from "${slug}" — ${landed.error}`);
240
+ }
241
+ if (!isItem) {
242
+ for (const group of source.groups(kind)) if (group.path === from || group.path.startsWith(`${from}/`)) folder(kind, group.path);
243
+ }
244
+ }
245
+ }
246
+ if (taking.length === 0 && wholesale) rejectData(`"${slug}" has nothing to copy.`);
247
+ for (let index = 0; index < taking.length; index++) {
248
+ const row = taking[index];
249
+ const body = source.resolve(row.kind, row.theirs)?.toJSON();
250
+ for (const target of collectRefs(body)) {
251
+ if (sourceOf(target) !== void 0) continue;
252
+ const depKind = kindOf(target);
253
+ const depPath = pathOf(target);
254
+ if (depPath === "" || !config.entityOf(depKind)) continue;
255
+ if (!kindBorrowable(config.entityOf(depKind), {
256
+ config,
257
+ source
258
+ })) continue;
259
+ if (source.resolve(depKind, depPath)) {
260
+ take({
261
+ kind: depKind,
262
+ theirs: depPath,
263
+ at: depPath,
264
+ named: false
265
+ });
266
+ continue;
267
+ }
268
+ const members = source.members(depKind, depPath);
269
+ if (members.length === 0) continue;
270
+ for (const member of members) take({
271
+ kind: depKind,
272
+ theirs: member.path,
273
+ at: member.path,
274
+ named: false
275
+ });
276
+ folder(depKind, depPath);
277
+ }
278
+ if (row.kind === "component") {
279
+ for (const sibling of renderImportedComponents({
280
+ source,
281
+ path: row.theirs
282
+ })) take({
283
+ kind: "component",
284
+ theirs: sibling,
285
+ at: sibling,
286
+ named: false
287
+ });
288
+ for (const path of renderSourceFiles({
289
+ source,
290
+ path: row.theirs
291
+ })) takeFile({
292
+ path,
293
+ component: row.theirs
294
+ });
295
+ }
296
+ }
297
+ const arriving = new Set([
298
+ ...taking.map((row) => `${row.kind}:${row.at}`),
299
+ ...reused.map((row) => `${row.kind}:${row.path}`),
300
+ ...folders.map((folder) => `${folder.kind}:${folder.path}`)
301
+ ]);
302
+ const patches = [];
303
+ for (const { kind, path } of folders) {
304
+ const meta = ownMeta(source.groups(kind).find((group) => group.path === path)?.meta ?? {});
305
+ const pointed = config.groupBorrowedFrom({
306
+ kind,
307
+ groupPath: path
308
+ }) === slug;
309
+ if (Object.keys(meta).length === 0 && !pointed) continue;
310
+ patches.push({
311
+ kind,
312
+ operation: "group-update",
313
+ path,
314
+ data: pointed ? {
315
+ ...meta,
316
+ ref: null
317
+ } : meta
318
+ });
319
+ }
320
+ const rebound = [];
321
+ const landing = new Set(taking.map((row) => `${row.kind}:${row.at}`));
322
+ const respell = (from, to) => {
323
+ for (const referrer of config.refs.dependents(from)) {
324
+ const [kind, path] = splitRef(referrer).kind ? [kindOf(referrer), pathOf(referrer)] : [void 0, void 0];
325
+ if (!kind || !path || landing.has(referrer)) continue;
326
+ const body = config.storedBody(kind, path);
327
+ if (!body || isMintedRow(body)) continue;
328
+ const rewritten = rewriteRefs(body, from, to);
329
+ if (JSON.stringify(rewritten) === JSON.stringify(body)) continue;
330
+ rebound.push({
331
+ kind,
332
+ path
333
+ });
334
+ patches.push({
335
+ kind,
336
+ operation: "replace",
337
+ path,
338
+ data: rewritten
339
+ });
340
+ }
341
+ };
342
+ const ordered = dependenciesFirst({
343
+ taking,
344
+ source
345
+ });
346
+ for (const { kind, theirs, at, extend } of ordered) {
347
+ const body = config.copyOf({
348
+ slug,
349
+ kind,
350
+ path: theirs,
351
+ alongside: arriving,
352
+ extend
353
+ });
354
+ if (!body) continue;
355
+ const data = {
356
+ ...body,
357
+ copiedFrom: `${theirs}@${slug}`
358
+ };
359
+ patches.push(extend === void 0 ? {
360
+ kind,
361
+ operation: "create",
362
+ path: at,
363
+ data
364
+ } : {
365
+ kind,
366
+ operation: "replace",
367
+ path: at,
368
+ data
369
+ });
370
+ }
371
+ for (const { kind, theirs, at } of taking) respell(`${kind}:${theirs}@${slug}`, `${kind}:${at}`);
372
+ for (const { kind, path } of folders) respell(`${kind}:${path}@${slug}`, `${kind}:${path}`);
373
+ const declared = declarationOf(config, slug);
374
+ if (declared !== void 0) {
375
+ const removal = /* @__PURE__ */ new Map();
376
+ for (const { kind, at, named } of taking) {
377
+ if (!named) continue;
378
+ const stored = config.storedBody(kind, at);
379
+ if (!stored || !isMintedRow(stored)) continue;
380
+ if (config.resolve(kind, at)?.borrowedFrom !== slug) continue;
381
+ const accessor = config.accessorOf(kind) ?? kind;
382
+ if (!covers({
383
+ declared,
384
+ accessor,
385
+ path: at
386
+ })) continue;
387
+ removal.set(accessor, [...removal.get(accessor) ?? [], at]);
388
+ }
389
+ if (removal.size > 0) {
390
+ const next = narrowDeclaration({
391
+ config,
392
+ slug,
393
+ current: declared,
394
+ removal,
395
+ verb: "copy"
396
+ });
397
+ patches.push({
398
+ kind: PIN_KIND,
399
+ operation: "update",
400
+ path: slug,
401
+ data: { link: next ?? null }
402
+ });
403
+ }
404
+ }
405
+ return {
406
+ rows: taking.map(({ kind, at, named, extend, overwrite }) => {
407
+ let status;
408
+ if (overwrite) status = "overwrite";
409
+ else if (extend === void 0) status = "create";
410
+ else status = "replace";
411
+ return {
412
+ kind,
413
+ path: at,
414
+ status,
415
+ named
416
+ };
417
+ }),
418
+ folders,
419
+ reused,
420
+ rebound,
421
+ patches
422
+ };
423
+ }
424
+ /** The rows to copy with each one's dependencies ahead of it, in a stable order otherwise. */
425
+ function dependenciesFirst({ taking, source }) {
426
+ const byKey = new Map(taking.map((row) => [`${row.kind}:${row.theirs}`, row]));
427
+ const placed = /* @__PURE__ */ new Set();
428
+ const ordered = [];
429
+ const place = (row) => {
430
+ const key = `${row.kind}:${row.theirs}`;
431
+ if (placed.has(key)) return;
432
+ placed.add(key);
433
+ const body = source.resolve(row.kind, row.theirs)?.toJSON();
434
+ for (const target of collectRefs(body)) {
435
+ if (sourceOf(target) !== void 0) continue;
436
+ const depKind = kindOf(target);
437
+ const depPath = pathOf(target);
438
+ const item = byKey.get(`${depKind}:${depPath}`);
439
+ if (item) place(item);
440
+ for (const member of source.members(depKind, depPath)) {
441
+ const memberRow = byKey.get(`${depKind}:${member.path}`);
442
+ if (memberRow) place(memberRow);
443
+ }
444
+ }
445
+ ordered.push(row);
446
+ };
447
+ for (const row of taking) place(row);
448
+ return ordered;
449
+ }
450
+ //#endregion
451
+ export { planCopy, sourceEntries };