@yahoo/uds-create-config 2.45.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -0
- package/dist/ai-lanes.d.ts +23 -0
- package/dist/ai-lanes.js +34 -0
- package/dist/authoring/define-component.d.ts +85 -0
- package/dist/configs/CanvasConfig.d.ts +3237 -0
- package/dist/configs/CanvasConfig.js +332 -0
- package/dist/configs/build-options.d.ts +10 -0
- package/dist/configs/build-options.js +68 -0
- package/dist/configs/platform.d.ts +15 -0
- package/dist/configs/platform.js +17 -0
- package/dist/configs/react-native-system.d.ts +3026 -0
- package/dist/configs/react-native-system.js +64 -0
- package/dist/configs/system.d.ts +2771 -0
- package/dist/configs/system.js +74 -0
- package/dist/css/properties.generated.d.ts +14 -0
- package/dist/css/properties.generated.js +6260 -0
- package/dist/css/value-type.d.ts +48 -0
- package/dist/css/value-type.js +131 -0
- package/dist/css/values.d.ts +33 -0
- package/dist/css/values.js +116 -0
- package/dist/entities/native/NativeModifier.d.ts +25 -0
- package/dist/entities/native/NativeModifier.js +41 -0
- package/dist/entities/native/NativeSettings.d.ts +44 -0
- package/dist/entities/native/NativeSettings.js +39 -0
- package/dist/entities/native/NativeStyleProperty.d.ts +355 -0
- package/dist/entities/native/NativeStyleProperty.js +28 -0
- package/dist/entities/native/NativeToken.d.ts +31 -0
- package/dist/entities/native/NativeToken.js +49 -0
- package/dist/entities/system/CanvasRole.d.ts +34 -0
- package/dist/entities/system/CanvasRole.js +45 -0
- package/dist/entities/system/Component.d.ts +1287 -0
- package/dist/entities/system/Component.js +1840 -0
- package/dist/entities/system/Composite.d.ts +12 -0
- package/dist/entities/system/Composite.js +26 -0
- package/dist/entities/system/Device.d.ts +11 -0
- package/dist/entities/system/Device.js +18 -0
- package/dist/entities/system/File.d.ts +72 -0
- package/dist/entities/system/File.js +136 -0
- package/dist/entities/system/Font.d.ts +48 -0
- package/dist/entities/system/Font.js +56 -0
- package/dist/entities/system/GlobalStyle.d.ts +26 -0
- package/dist/entities/system/GlobalStyle.js +54 -0
- package/dist/entities/system/Guidance.d.ts +85 -0
- package/dist/entities/system/Guidance.js +59 -0
- package/dist/entities/system/GuidanceStyle.d.ts +14 -0
- package/dist/entities/system/GuidanceStyle.js +8 -0
- package/dist/entities/system/Icon.d.ts +46 -0
- package/dist/entities/system/Icon.js +46 -0
- package/dist/entities/system/LinkedSystem.d.ts +504 -0
- package/dist/entities/system/LinkedSystem.js +814 -0
- package/dist/entities/system/Modifier.d.ts +92 -0
- package/dist/entities/system/Modifier.js +120 -0
- package/dist/entities/system/Motion.d.ts +28 -0
- package/dist/entities/system/Motion.js +48 -0
- package/dist/entities/system/Operation.d.ts +100 -0
- package/dist/entities/system/Operation.js +236 -0
- package/dist/entities/system/Package.d.ts +42 -0
- package/dist/entities/system/Package.js +75 -0
- package/dist/entities/system/Settings.d.ts +94 -0
- package/dist/entities/system/Settings.js +166 -0
- package/dist/entities/system/StyleProperty.d.ts +135 -0
- package/dist/entities/system/StyleProperty.js +438 -0
- package/dist/entities/system/Token.d.ts +67 -0
- package/dist/entities/system/Token.js +129 -0
- package/dist/entities/system/Tool.d.ts +134 -0
- package/dist/entities/system/Tool.js +124 -0
- package/dist/entities/system/color.d.ts +64 -0
- package/dist/entities/system/color.js +123 -0
- package/dist/entities/system/component-module.d.ts +63 -0
- package/dist/entities/system/component-module.js +258 -0
- package/dist/entities/system/copy-plan.d.ts +98 -0
- package/dist/entities/system/copy-plan.js +451 -0
- package/dist/entities/system/defineComponent.d.ts +428 -0
- package/dist/entities/system/defineComponent.js +337 -0
- package/dist/entities/system/element.d.ts +101 -0
- package/dist/entities/system/element.js +171 -0
- package/dist/entities/system/icon-library.d.ts +64 -0
- package/dist/entities/system/icon-library.js +112 -0
- package/dist/entities/system/icon-metadata.d.ts +72 -0
- package/dist/entities/system/icon-metadata.js +111 -0
- package/dist/entities/system/link-declaration.d.ts +27 -0
- package/dist/entities/system/link-declaration.js +64 -0
- package/dist/entities/system/link-plan.d.ts +160 -0
- package/dist/entities/system/link-plan.js +770 -0
- package/dist/entities/system/runtime-modules.d.ts +25 -0
- package/dist/entities/system/runtime-modules.js +38 -0
- package/dist/entities/system/style-bag.d.ts +20 -0
- package/dist/entities/system/style-bag.js +246 -0
- package/dist/entities/system/token-index.d.ts +89 -0
- package/dist/entities/system/token-index.js +112 -0
- package/dist/framework/Config.d.ts +2472 -0
- package/dist/framework/Config.js +5023 -0
- package/dist/framework/Entity.d.ts +127 -0
- package/dist/framework/Entity.js +125 -0
- package/dist/framework/authoring.d.ts +24 -0
- package/dist/framework/authoring.js +7 -0
- package/dist/framework/change-hooks.d.ts +119 -0
- package/dist/framework/change-hooks.js +131 -0
- package/dist/framework/changes.d.ts +88 -0
- package/dist/framework/changes.js +246 -0
- package/dist/framework/class-names.d.ts +260 -0
- package/dist/framework/class-names.js +630 -0
- package/dist/framework/coalesce.d.ts +25 -0
- package/dist/framework/coalesce.js +60 -0
- package/dist/framework/config-op.d.ts +76 -0
- package/dist/framework/config-op.js +43 -0
- package/dist/framework/config-operation-kind.d.ts +14 -0
- package/dist/framework/config-operation-kind.js +14 -0
- package/dist/framework/config-ops.d.ts +34 -0
- package/dist/framework/config-ops.js +187 -0
- package/dist/framework/defineConfig.d.ts +196 -0
- package/dist/framework/defineConfig.js +100 -0
- package/dist/framework/defineDerivedEntity.d.ts +74 -0
- package/dist/framework/defineDerivedEntity.js +83 -0
- package/dist/framework/defineEntity.d.ts +318 -0
- package/dist/framework/defineEntity.js +183 -0
- package/dist/framework/defineSubEntity.d.ts +148 -0
- package/dist/framework/defineSubEntity.js +121 -0
- package/dist/framework/derived-mutations.d.ts +20 -0
- package/dist/framework/derived-mutations.js +38 -0
- package/dist/framework/entity-search.d.ts +29 -0
- package/dist/framework/entity-search.js +117 -0
- package/dist/framework/inline-sources.d.ts +49 -0
- package/dist/framework/inline-sources.js +388 -0
- package/dist/framework/layer-styles.d.ts +25 -0
- package/dist/framework/layer-styles.js +49 -0
- package/dist/framework/memo.d.ts +48 -0
- package/dist/framework/memo.js +84 -0
- package/dist/framework/overlay.d.ts +49 -0
- package/dist/framework/overlay.js +17 -0
- package/dist/framework/plan.d.ts +49 -0
- package/dist/framework/plan.js +73 -0
- package/dist/framework/projections.d.ts +480 -0
- package/dist/framework/projections.js +974 -0
- package/dist/framework/prop-surface.d.ts +132 -0
- package/dist/framework/prop-surface.js +278 -0
- package/dist/framework/ref-graph.d.ts +71 -0
- package/dist/framework/ref-graph.js +158 -0
- package/dist/framework/ref-integrity.d.ts +55 -0
- package/dist/framework/ref-integrity.js +171 -0
- package/dist/framework/registered.d.ts +95 -0
- package/dist/framework/registry-dir.d.ts +42 -0
- package/dist/framework/registry-dir.js +48 -0
- package/dist/framework/registry.d.ts +300 -0
- package/dist/framework/registry.js +104 -0
- package/dist/framework/rejection.d.ts +58 -0
- package/dist/framework/rejection.js +111 -0
- package/dist/framework/rename-inference.d.ts +26 -0
- package/dist/framework/rename-inference.js +50 -0
- package/dist/framework/render-spec.d.ts +296 -0
- package/dist/framework/render-spec.js +809 -0
- package/dist/framework/schema-version.d.ts +140 -0
- package/dist/framework/schema-version.js +214 -0
- package/dist/framework/schemas.d.ts +109 -0
- package/dist/framework/schemas.js +615 -0
- package/dist/framework/session.d.ts +196 -0
- package/dist/framework/session.js +367 -0
- package/dist/framework/signature.d.ts +15 -0
- package/dist/framework/signature.js +83 -0
- package/dist/framework/snapshot.d.ts +115 -0
- package/dist/framework/snapshot.js +277 -0
- package/dist/framework/source-integrity.d.ts +226 -0
- package/dist/framework/source-integrity.js +478 -0
- package/dist/framework/sources.d.ts +211 -0
- package/dist/framework/sources.js +89 -0
- package/dist/framework/utils/compiled-schema.d.ts +23 -0
- package/dist/framework/utils/compiled-schema.js +46 -0
- package/dist/framework/utils/content-key.d.ts +15 -0
- package/dist/framework/utils/content-key.js +33 -0
- package/dist/framework/utils/enumerated.d.ts +13 -0
- package/dist/framework/utils/enumerated.js +19 -0
- package/dist/framework/utils/field-path.d.ts +95 -0
- package/dist/framework/utils/field-path.js +136 -0
- package/dist/framework/utils/field-schema.d.ts +55 -0
- package/dist/framework/utils/field-schema.js +183 -0
- package/dist/framework/utils/group.d.ts +37 -0
- package/dist/framework/utils/group.js +13 -0
- package/dist/framework/utils/package-path.d.ts +37 -0
- package/dist/framework/utils/package-path.js +61 -0
- package/dist/framework/utils/refs.d.ts +194 -0
- package/dist/framework/utils/refs.js +403 -0
- package/dist/framework/validate-spec.d.ts +27 -0
- package/dist/framework/validate-spec.js +45 -0
- package/dist/framework/value-domain.d.ts +26 -0
- package/dist/framework/value-domain.js +202 -0
- package/dist/framework/views-facade.d.ts +15 -0
- package/dist/framework/views-facade.js +19 -0
- package/dist/index.d.ts +90 -42
- package/dist/index.js +86 -37
- package/dist/migrations/2.0.0/raw-css.d.ts +11 -0
- package/dist/migrations/2.0.0/raw-css.js +72 -0
- package/dist/migrations/2.0.0/v1-artifact.d.ts +1559 -0
- package/dist/migrations/2.0.0/v1-artifact.js +1018 -0
- package/dist/migrations/20260908171448_settings_as_kind.d.ts +22 -0
- package/dist/migrations/20260908171448_settings_as_kind.js +89 -0
- package/dist/migrations/20260908194245_visible_state_pointer.d.ts +19 -0
- package/dist/migrations/20260908194245_visible_state_pointer.js +115 -0
- package/dist/migrations/20260909183001_icon_knockout_variants.d.ts +18 -0
- package/dist/migrations/20260909183001_icon_knockout_variants.js +8 -0
- package/dist/migrations/20260910212453_linked_system_link_ops.d.ts +13 -0
- package/dist/migrations/20260910212453_linked_system_link_ops.js +8 -0
- package/dist/migrations/index.d.ts +2 -0
- package/dist/migrations/index.js +2 -0
- package/dist/react-native/style-keys.generated.d.ts +10 -0
- package/dist/react-native/style-keys.generated.js +167 -0
- package/dist/renderer/RendererErrorBoundary.d.ts +32 -5
- package/dist/renderer/RendererErrorBoundary.js +59 -10
- package/dist/renderer/UdsRenderer.d.ts +11 -10
- package/dist/renderer/UdsRenderer.js +1 -1
- package/dist/renderer/assetEntries.d.ts +37 -0
- package/dist/renderer/assetEntries.js +39 -0
- package/dist/renderer/assetRenderable.d.ts +14 -6
- package/dist/renderer/assetRenderable.js +8 -2
- package/dist/renderer/componentEntry.d.ts +58 -0
- package/dist/renderer/componentEntry.js +71 -0
- package/dist/renderer/icon-library.d.ts +20 -0
- package/dist/renderer/index.d.ts +7 -7
- package/dist/renderer/index.js +5 -5
- package/dist/renderer/primitives/SlotRenderer.d.ts +1 -1
- package/dist/renderer/primitives/SlotRenderer.js +1 -1
- package/dist/renderer/runtimeComponent.d.ts +33 -0
- package/dist/renderer/runtimeComponent.js +113 -0
- package/dist/renderer/spec-content.d.ts +43 -0
- package/dist/renderer/spec-content.js +95 -0
- package/dist/renderer/wrapRegistry.d.ts +22 -37
- package/dist/renderer/wrapRegistry.js +10 -20
- package/dist/renderer/wrappers/event-bridge.js +6 -5
- package/dist/renderer/wrappers/hex-normalize.js +6 -5
- package/dist/renderer/wrappers/html-aliases.d.ts +7 -2
- package/dist/renderer/wrappers/html-aliases.js +36 -19
- package/dist/renderer/wrappers/inline-styles.js +7 -6
- package/dist/spec/asset-jsx.d.ts +18 -5
- package/dist/spec/asset-jsx.js +27 -16
- package/dist/spec/collapse-text-labels.d.ts +5 -15
- package/dist/spec/collapse-text-labels.js +26 -19
- package/dist/spec/empty-node-slots.d.ts +56 -34
- package/dist/spec/empty-node-slots.js +87 -47
- package/dist/spec/index.d.ts +21 -10
- package/dist/spec/index.js +21 -10
- package/dist/spec/jsxToSpec.d.ts +14 -9
- package/dist/spec/jsxToSpec.js +20 -3
- package/dist/spec/preview-elements.d.ts +63 -0
- package/dist/spec/preview-elements.js +89 -0
- package/dist/spec/rewrite-refs.d.ts +58 -0
- package/dist/spec/rewrite-refs.js +250 -0
- package/dist/spec/specToJsx.js +18 -29
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +39 -52
- package/dist/AssetGroup.d.ts +0 -77
- package/dist/AssetGroup.js +0 -125
- package/dist/Component.d.ts +0 -333
- package/dist/Component.js +0 -1061
- package/dist/ComponentGroup.d.ts +0 -22
- package/dist/ComponentGroup.js +0 -51
- package/dist/CompositeStyle.d.ts +0 -30
- package/dist/CompositeStyle.js +0 -59
- package/dist/Config.d.ts +0 -528
- package/dist/Config.js +0 -1712
- package/dist/Mode.d.ts +0 -41
- package/dist/Mode.js +0 -81
- package/dist/Modifier.d.ts +0 -51
- package/dist/Modifier.js +0 -97
- package/dist/MotionDef.d.ts +0 -81
- package/dist/MotionDef.js +0 -212
- package/dist/Props.d.ts +0 -332
- package/dist/Props.js +0 -35
- package/dist/Provider.d.ts +0 -20
- package/dist/Provider.js +0 -14
- package/dist/StyleProp.d.ts +0 -145
- package/dist/StyleProp.js +0 -239
- package/dist/Token.d.ts +0 -76
- package/dist/Token.js +0 -133
- package/dist/TokenGroup.d.ts +0 -33
- package/dist/TokenGroup.js +0 -69
- package/dist/asset-kind.d.ts +0 -55
- package/dist/asset-kind.js +0 -29
- package/dist/asset-value.d.ts +0 -23
- package/dist/asset-value.js +0 -40
- package/dist/brands.d.ts +0 -30
- package/dist/brands.js +0 -20
- package/dist/captureCallerPath.d.ts +0 -48
- package/dist/captureCallerPath.js +0 -95
- package/dist/colorExpressions.d.ts +0 -131
- package/dist/colorExpressions.js +0 -148
- package/dist/component-referrers.d.ts +0 -30
- package/dist/component-referrers.js +0 -40
- package/dist/config-diagnostics.d.ts +0 -21
- package/dist/config-diagnostics.js +0 -12
- package/dist/defineAssetGroup.d.ts +0 -200
- package/dist/defineAssetGroup.js +0 -323
- package/dist/defineProvider.d.ts +0 -29
- package/dist/defineProvider.js +0 -60
- package/dist/element-marker.d.ts +0 -63
- package/dist/element-marker.js +0 -113
- package/dist/entity-utils.d.ts +0 -56
- package/dist/entity-utils.js +0 -105
- package/dist/extension.d.ts +0 -55
- package/dist/extension.js +0 -214
- package/dist/factories.d.ts +0 -863
- package/dist/factories.js +0 -475
- package/dist/font-face.d.ts +0 -25
- package/dist/font-face.js +0 -72
- package/dist/foreign-component-name.d.ts +0 -21
- package/dist/foreign-component-name.js +0 -42
- package/dist/interpolate.d.ts +0 -20
- package/dist/interpolate.js +0 -10
- package/dist/jsx/__fixtures__/cross-component-preview.d.ts +0 -3
- package/dist/jsx/__fixtures__/cross-component-preview.js +0 -15
- package/dist/jsx/jsx-dev-runtime.d.ts +0 -15
- package/dist/jsx/jsx-dev-runtime.js +0 -11
- package/dist/jsx/jsx-runtime.d.ts +0 -48
- package/dist/jsx/jsx-runtime.js +0 -305
- package/dist/linked-system-pins.d.ts +0 -30
- package/dist/linked-system-pins.js +0 -45
- package/dist/linkedNodePrefixes.d.ts +0 -73
- package/dist/linkedNodePrefixes.js +0 -99
- package/dist/markers.d.ts +0 -235
- package/dist/markers.js +0 -70
- package/dist/motion-constants.d.ts +0 -37
- package/dist/motion-constants.js +0 -61
- package/dist/native/NativeConfig.d.ts +0 -56
- package/dist/native/NativeConfig.js +0 -162
- package/dist/native/assets.d.ts +0 -20
- package/dist/native/assets.js +0 -17
- package/dist/native/components.d.ts +0 -139
- package/dist/native/components.js +0 -67
- package/dist/native/index.d.ts +0 -18
- package/dist/native/index.js +0 -17
- package/dist/native/modes.d.ts +0 -10
- package/dist/native/modes.js +0 -11
- package/dist/native/types.d.ts +0 -95
- package/dist/native/types.js +0 -0
- package/dist/native/validation.d.ts +0 -8
- package/dist/native/validation.js +0 -885
- package/dist/native/values.d.ts +0 -7
- package/dist/native/values.js +0 -15
- package/dist/native.d.ts +0 -12
- package/dist/native.js +0 -10
- package/dist/refs.d.ts +0 -204
- package/dist/refs.js +0 -129
- package/dist/registry-aliases.d.ts +0 -33
- package/dist/registry-aliases.js +0 -35
- package/dist/registry-dir.d.ts +0 -22
- package/dist/registry-dir.js +0 -10
- package/dist/renderer/makeRegistry.d.ts +0 -34
- package/dist/renderer/makeRegistry.js +0 -52
- package/dist/renderer/makeUdsRenderer.d.ts +0 -13
- package/dist/renderer/makeUdsRenderer.js +0 -51
- package/dist/renderer/wrappers/component-slots.d.ts +0 -41
- package/dist/renderer/wrappers/component-slots.js +0 -66
- package/dist/renderer/wrappers/slot-resolution.d.ts +0 -25
- package/dist/renderer/wrappers/slot-resolution.js +0 -68
- package/dist/renderer/wrappers/void-elements.d.ts +0 -37
- package/dist/renderer/wrappers/void-elements.js +0 -40
- package/dist/spec/layer-props.d.ts +0 -52
- package/dist/spec/layer-props.js +0 -149
- package/dist/spec/preview-controls.d.ts +0 -44
- package/dist/spec/preview-controls.js +0 -139
- package/dist/spec/slot-refs.d.ts +0 -39
- package/dist/spec/slot-refs.js +0 -56
- package/dist/token-override-rows.d.ts +0 -68
- package/dist/token-override-rows.js +0 -233
- package/dist/tokenValueType.d.ts +0 -34
- package/dist/tokenValueType.js +0 -138
- package/dist/types/css-properties.d.ts +0 -233
- package/dist/types/css-properties.js +0 -14
- package/dist/types/css-property-keywords.d.ts +0 -156
- package/dist/types/css-property-keywords.js +0 -616
- package/dist/types/css-values.d.ts +0 -63
- package/dist/types/css-values.js +0 -16
- package/dist/types.d.ts +0 -1138
- package/dist/types.js +0 -12
- package/dist/units.d.ts +0 -14
- package/dist/units.js +0 -16
- package/dist/utils/index.d.ts +0 -4
- 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 };
|