@faicad/faijs 0.13.1 → 0.14.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/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +30 -4
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean.d.ts +19 -0
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +51 -10
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +8 -7
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/compound-geom.d.ts +45 -0
- package/dist/api/compound-geom.d.ts.map +1 -0
- package/dist/api/compound-geom.js +85 -0
- package/dist/api/compound-geom.js.map +1 -0
- package/dist/api/compound.d.ts +2 -0
- package/dist/api/compound.d.ts.map +1 -1
- package/dist/api/compound.js +2 -0
- package/dist/api/compound.js.map +1 -1
- package/dist/api/copy.d.ts +1 -0
- package/dist/api/copy.d.ts.map +1 -1
- package/dist/api/copy.js +4 -2
- package/dist/api/copy.js.map +1 -1
- package/dist/api/edge-ref.d.ts +3 -2
- package/dist/api/edge-ref.d.ts.map +1 -1
- package/dist/api/edge-ref.js +10 -6
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +1 -0
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +131 -3
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts.map +1 -1
- package/dist/api/face-ref.js +7 -4
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/fai_drill.d.ts +1 -1
- package/dist/api/fai_drill.d.ts.map +1 -1
- package/dist/api/fai_drill.js +31 -18
- package/dist/api/fai_drill.js.map +1 -1
- package/dist/api/fai_extrude.d.ts +1 -1
- package/dist/api/fai_extrude.d.ts.map +1 -1
- package/dist/api/fai_extrude.js +2 -1
- package/dist/api/fai_extrude.js.map +1 -1
- package/dist/api/fai_split.d.ts +1 -1
- package/dist/api/fai_split.d.ts.map +1 -1
- package/dist/api/fai_split.js +2 -1
- package/dist/api/fai_split.js.map +1 -1
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +6 -5
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/operations.js +16 -16
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js +0 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/script-face.d.ts +1 -4
- package/dist/api/generated/script-face.d.ts.map +1 -1
- package/dist/api/generated/script-face.js +2 -3
- package/dist/api/generated/script-face.js.map +1 -1
- package/dist/api/generated/sketching.js +1 -1
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/topology.d.ts +0 -48
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +20 -62
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/import-brep.d.ts +36 -0
- package/dist/api/import-brep.d.ts.map +1 -0
- package/dist/api/import-brep.js +72 -0
- package/dist/api/import-brep.js.map +1 -0
- package/dist/api/import-step.d.ts +28 -0
- package/dist/api/import-step.d.ts.map +1 -0
- package/dist/api/import-step.js +57 -0
- package/dist/api/import-step.js.map +1 -0
- package/dist/api/index.d.ts +7 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +19 -5
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +2 -0
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +10 -2
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +1 -0
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/load.d.ts +3 -1
- package/dist/api/load.d.ts.map +1 -1
- package/dist/api/load.js +3 -1
- package/dist/api/load.js.map +1 -1
- package/dist/api/pattern.d.ts +32 -0
- package/dist/api/pattern.d.ts.map +1 -0
- package/dist/api/pattern.js +121 -0
- package/dist/api/pattern.js.map +1 -0
- package/dist/api/place.d.ts +35 -0
- package/dist/api/place.d.ts.map +1 -0
- package/dist/api/place.js +113 -0
- package/dist/api/place.js.map +1 -0
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +10 -3
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +1 -0
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +1 -0
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/sketch.d.ts.map +1 -1
- package/dist/api/sketch.js +1 -0
- package/dist/api/sketch.js.map +1 -1
- package/dist/api/split.d.ts +31 -0
- package/dist/api/split.d.ts.map +1 -0
- package/dist/api/split.js +96 -0
- package/dist/api/split.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +9 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +49 -30
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/svgExtrude.d.ts.map +1 -1
- package/dist/api/svgExtrude.js +1 -0
- package/dist/api/svgExtrude.js.map +1 -1
- package/dist/api/text.d.ts.map +1 -1
- package/dist/api/text.js +1 -0
- package/dist/api/text.js.map +1 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +65 -3
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/transform.d.ts +4 -0
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +44 -12
- package/dist/api/transform.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +34 -1
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +62 -22
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +8 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +6 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +24 -1
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +17 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/types.d.ts +49 -6
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +6 -1
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/face-evolution.d.ts +78 -8
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +130 -17
- package/dist/brep/face-evolution.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +27 -1
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +0 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +2 -2
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +19 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +21 -1
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +44 -3
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +46 -3
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +2 -0
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +9 -1
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +14 -4
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/module-registry.d.ts +3 -1
- package/dist/cad-runtime/module-registry.d.ts.map +1 -1
- package/dist/cad-runtime/module-registry.js +13 -1
- package/dist/cad-runtime/module-registry.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +7 -0
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime-concurrent-error.d.ts +38 -0
- package/dist/cad-runtime/runtime-concurrent-error.d.ts.map +1 -0
- package/dist/cad-runtime/runtime-concurrent-error.js +43 -0
- package/dist/cad-runtime/runtime-concurrent-error.js.map +1 -0
- package/dist/cad-runtime/runtime.d.ts +54 -2
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +186 -10
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +22 -0
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +82 -12
- package/dist/define-op.js.map +1 -1
- package/dist/fcstd/attachment.d.ts +72 -0
- package/dist/fcstd/attachment.d.ts.map +1 -0
- package/dist/fcstd/attachment.js +93 -0
- package/dist/fcstd/attachment.js.map +1 -0
- package/dist/fcstd/build-fai-zip.d.ts +11 -0
- package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
- package/dist/fcstd/build-fai-zip.js +21 -8
- package/dist/fcstd/build-fai-zip.js.map +1 -1
- package/dist/fcstd/cli.d.ts +3 -0
- package/dist/fcstd/cli.d.ts.map +1 -0
- package/dist/fcstd/cli.js +37 -0
- package/dist/fcstd/cli.js.map +1 -0
- package/dist/fcstd/codegen.d.ts +23 -1
- package/dist/fcstd/codegen.d.ts.map +1 -1
- package/dist/fcstd/codegen.js +159 -48
- package/dist/fcstd/codegen.js.map +1 -1
- package/dist/fcstd/container.d.ts +16 -1
- package/dist/fcstd/container.d.ts.map +1 -1
- package/dist/fcstd/container.js +12 -1
- package/dist/fcstd/container.js.map +1 -1
- package/dist/fcstd/contour.d.ts +9 -1
- package/dist/fcstd/contour.d.ts.map +1 -1
- package/dist/fcstd/contour.js +28 -18
- package/dist/fcstd/contour.js.map +1 -1
- package/dist/fcstd/convert.d.ts +31 -2
- package/dist/fcstd/convert.d.ts.map +1 -1
- package/dist/fcstd/convert.js +73 -22
- package/dist/fcstd/convert.js.map +1 -1
- package/dist/fcstd/document.d.ts +8 -1
- package/dist/fcstd/document.d.ts.map +1 -1
- package/dist/fcstd/document.js +4 -1
- package/dist/fcstd/document.js.map +1 -1
- package/dist/fcstd/expressions.d.ts +14 -1
- package/dist/fcstd/expressions.d.ts.map +1 -1
- package/dist/fcstd/expressions.js +11 -1
- package/dist/fcstd/expressions.js.map +1 -1
- package/dist/fcstd/external-geo.d.ts +27 -2
- package/dist/fcstd/external-geo.d.ts.map +1 -1
- package/dist/fcstd/external-geo.js +23 -2
- package/dist/fcstd/external-geo.js.map +1 -1
- package/dist/fcstd/feature-translate.d.ts +85 -3
- package/dist/fcstd/feature-translate.d.ts.map +1 -1
- package/dist/fcstd/feature-translate.js +189 -9
- package/dist/fcstd/feature-translate.js.map +1 -1
- package/dist/fcstd/index.d.ts +23 -0
- package/dist/fcstd/index.d.ts.map +1 -0
- package/dist/fcstd/index.js +19 -0
- package/dist/fcstd/index.js.map +1 -0
- package/dist/fcstd/placement.d.ts +49 -6
- package/dist/fcstd/placement.d.ts.map +1 -1
- package/dist/fcstd/placement.js +46 -6
- package/dist/fcstd/placement.js.map +1 -1
- package/dist/fcstd/planegcs-backend.d.ts +16 -1
- package/dist/fcstd/planegcs-backend.d.ts.map +1 -1
- package/dist/fcstd/planegcs-backend.js +16 -1
- package/dist/fcstd/planegcs-backend.js.map +1 -1
- package/dist/fcstd/sketch-parse.d.ts +43 -0
- package/dist/fcstd/sketch-parse.d.ts.map +1 -1
- package/dist/fcstd/sketch-parse.js +26 -0
- package/dist/fcstd/sketch-parse.js.map +1 -1
- package/dist/fcstd/sketch-solver.d.ts +20 -2
- package/dist/fcstd/sketch-solver.d.ts.map +1 -1
- package/dist/fcstd/sketch-solver.js +6 -1
- package/dist/fcstd/sketch-solver.js.map +1 -1
- package/dist/fcstd/sketch-verify.d.ts +19 -1
- package/dist/fcstd/sketch-verify.d.ts.map +1 -1
- package/dist/fcstd/sketch-verify.js +14 -1
- package/dist/fcstd/sketch-verify.js.map +1 -1
- package/dist/fcstd/structural-types.d.ts +83 -0
- package/dist/fcstd/structural-types.d.ts.map +1 -0
- package/dist/fcstd/structural-types.js +116 -0
- package/dist/fcstd/structural-types.js.map +1 -0
- package/dist/fcstd/unpack.d.ts +21 -2
- package/dist/fcstd/unpack.d.ts.map +1 -1
- package/dist/fcstd/unpack.js +11 -2
- package/dist/fcstd/unpack.js.map +1 -1
- package/dist/fcstd-convert.d.ts +30 -0
- package/dist/fcstd-convert.d.ts.map +1 -0
- package/dist/fcstd-convert.js +27 -0
- package/dist/fcstd-convert.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts +62 -0
- package/dist/lang/determinism-scanner.d.ts.map +1 -0
- package/dist/lang/determinism-scanner.js +619 -0
- package/dist/lang/determinism-scanner.js.map +1 -0
- package/dist/lang/symbol-table.generated.d.ts +7 -3
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +7 -3
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +3 -2
- package/dist/mesh/index.js.map +1 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +56 -2
- package/dist/node-host/cli.js.map +1 -1
- package/dist/runtime-state.d.ts +18 -6
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +9 -1
- package/dist/runtime-state.js.map +1 -1
- package/dist/shape.d.ts +15 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +26 -3
- package/dist/shape.js.map +1 -1
- package/dist/topology/naming/build-naming.d.ts +14 -30
- package/dist/topology/naming/build-naming.d.ts.map +1 -1
- package/dist/topology/naming/build-naming.js +21 -54
- package/dist/topology/naming/build-naming.js.map +1 -1
- package/dist/topology/naming/capture-topo-ref.d.ts.map +1 -1
- package/dist/topology/naming/capture-topo-ref.js +5 -0
- package/dist/topology/naming/capture-topo-ref.js.map +1 -1
- package/dist/topology/naming/index.d.ts +3 -0
- package/dist/topology/naming/index.d.ts.map +1 -1
- package/dist/topology/naming/index.js +3 -0
- package/dist/topology/naming/index.js.map +1 -1
- package/dist/topology/naming/lineage-resolve.d.ts +80 -0
- package/dist/topology/naming/lineage-resolve.d.ts.map +1 -0
- package/dist/topology/naming/lineage-resolve.js +120 -0
- package/dist/topology/naming/lineage-resolve.js.map +1 -0
- package/dist/topology/naming/lineage.d.ts +349 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -0
- package/dist/topology/naming/lineage.js +398 -0
- package/dist/topology/naming/lineage.js.map +1 -0
- package/dist/topology/naming/migrate.d.ts +41 -0
- package/dist/topology/naming/migrate.d.ts.map +1 -0
- package/dist/topology/naming/migrate.js +88 -0
- package/dist/topology/naming/migrate.js.map +1 -0
- package/dist/topology/naming/role-name.d.ts +176 -0
- package/dist/topology/naming/role-name.d.ts.map +1 -0
- package/dist/topology/naming/role-name.js +344 -0
- package/dist/topology/naming/role-name.js.map +1 -0
- package/dist/topology/naming/roles.d.ts +20 -22
- package/dist/topology/naming/roles.d.ts.map +1 -1
- package/dist/topology/naming/roles.js +51 -49
- package/dist/topology/naming/roles.js.map +1 -1
- package/dist/topology/naming/types.d.ts +65 -18
- package/dist/topology/naming/types.d.ts.map +1 -1
- package/dist/topology/naming/types.js.map +1 -1
- package/dist/weapp.d.ts +22 -0
- package/dist/weapp.d.ts.map +1 -0
- package/dist/weapp.js +23 -0
- package/dist/weapp.js.map +1 -0
- package/package.json +18 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-resolve.js","sourceRoot":"","sources":["../../../src/topology/naming/lineage-resolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * lineage-resolve.ts — 回走推进器(1.10 前置②,计划 §4.5)。\n *\n * 「产物上的 roleTable 只是缓存」的重算引擎:缓存 miss 时沿血缘 DAG\n * 从身份原点 `(origin, role)` 走到目标 part,产出该 role 在目标 part 上的\n * 面 hash 集合——与 `slot.roleTable.get(origin)?.get(role)` 语义等价。\n *\n * ## 推进载体:序号(ordinal),不是 hash\n *\n * hash 是内存指针哈希,跨 Shape 实例必变(copy 一个新 handle,hash 全换),\n * **不能**作为跨节点推进的载体。跨节点稳定的是两样东西:\n * - role(因果坐标,本机制的存在理由);\n * - 面枚举序号(`slot.faceEvolution` 记录的正是 ordinal→ordinal[] 的演化,\n * 1.10 前置①已把每个 brep op 的演化挂到血缘节点)。\n *\n * 推进三步:\n * 1. **锚定**:root 语句的输出 part 上,role → hash 集合(读 root 的现存\n * roleTable——它现在是缓存,读它是合法的),再换算成 root 上的序号集合;\n * 2. **逐节点推进**:沿 DAG 每个节点用其 `evolution`(ordinal 键)把序号集合\n * 映射到输出序号(`evo.get(o) ?? [o]`——\"未变\"的两种上报形态都容纳);\n * 3. **落地**:目标 part 上把最终序号集合换算回 hash 集合。\n *\n * 任一步数据缺失 → 返回结构化失败原因(不静默返回空集——空集会被上层当成\n * \"面被删除\",那是另一个语义)。\n */\n\nimport type { PartName, StmtId } from '../../identity'\nimport type { LineageGraph } from './lineage'\nimport { parseRoleName, formatRoleName } from './role-name'\n\n/** 回走所需的外部读口(由调用方注入:runtime 持有 kernel 与 slots)。 */\nexport interface LineageResolveDeps {\n /** part 的 BREP 句柄(回走链上的中间产物经 solidCache 存活)。 */\n brepOf: (part: PartName) => unknown | undefined\n /** 句柄的全部面 hash(枚举序 = ordinal 1 起,与 faceEvolution 同序)。 */\n faceHashes: (handle: unknown) => readonly number[]\n /** 读某 part 的 roleTable 缓存(root 锚定用;返回 origin→role→hash[])。 */\n roleTableOf: (part: PartName) => ReadonlyMap<string, ReadonlyMap<string, readonly number[]>> | undefined\n}\n\n/** 回走失败原因(结构化,不静默)。 */\nexport type LineageResolveFailure =\n | { readonly reason: 'no-lineage-node'; readonly stmt: string }\n | { readonly reason: 'no-root-part'; readonly stmt: string }\n | { readonly reason: 'no-handle'; readonly part: string }\n | { readonly reason: 'no-role-table'; readonly part: string }\n | { readonly reason: 'role-not-in-table'; readonly origin: string; readonly role: string }\n | { readonly reason: 'hash-not-found'; readonly part: string; readonly count: number }\n | { readonly reason: 'no-evolution'; readonly stmt: string; readonly op: string }\n\n/** 回走成功:role 在目标 part 上的面 hash 集合。 */\nexport interface LineageResolveSuccess {\n readonly hashes: readonly number[]\n}\n\n/**\n * 沿血缘 DAG 回走:`(origin, role)` → 目标 part 上的 hash 集合。\n *\n * @param graph - the lineage graph (registered per execution).\n * @param origin - the origin statement id of the identity.\n * @param roleLine - the role in wire format (as stored in TopoRef).\n * @param targetPart - the part whose snapshot we resolve against.\n * @param deps - external readers (handles / hashes / role-table cache).\n * @returns success with the hash set, or a structured failure.\n */\nexport function resolveViaLineage(\n graph: LineageGraph,\n origin: StmtId,\n roleLine: string,\n targetPart: PartName,\n deps: LineageResolveDeps,\n): LineageResolveSuccess | LineageResolveFailure {\n const role = parseRoleName(roleLine)\n if (!role) return { reason: 'role-not-in-table', origin, role: roleLine }\n\n // ── 链收集:origin 节点 →(经消费者边)→ 产出 targetPart 的节点 ──\n // 行走方向是「origin → 谁消费了我的输出 → 谁又消费了它的输出」:\n // 中间 part 的产出方是 origin 自己(stmtOf 指回原点),不能用产出方找下一步。\n const chain: { stmt: StmtId; part: PartName; evolution?: Map<number, number[]> }[] = []\n {\n const start = graph.node(origin)\n if (!start) return { reason: 'no-lineage-node', stmt: String(origin) }\n const rootPart = start.outputs[0]\n if (!rootPart) return { reason: 'no-root-part', stmt: String(origin) }\n const startEvo = start.evolution && !('modified' in start.evolution) ? (start.evolution as Map<number, number[]>) : undefined\n chain.push({ stmt: origin, part: rootPart, evolution: startEvo })\n let currentPart: PartName = rootPart\n while (!chain[chain.length - 1]!.part || true) {\n if (currentPart === targetPart) break\n const consumer = graph.nodeConsuming(currentPart)\n if (!consumer) return { reason: 'no-lineage-node', stmt: String(currentPart) }\n const evo = consumer.evolution && !('modified' in consumer.evolution) ? (consumer.evolution as Map<number, number[]>) : undefined\n // 承载 part:消费者的输出里选一个(单输出链取第一个;多输出如 split 取含\n // targetPart 的那个,否则取第一个——多输出分支的精确选择由调用方语义决定)。\n const carry = consumer.outputs.includes(targetPart) ? targetPart : consumer.outputs[0]!\n chain.push({ stmt: consumer.stmt, part: carry, evolution: evo })\n currentPart = carry\n }\n }\n\n // ── 锚定:root part 上 role → hash → ordinal ──\n const root = chain[0]!\n const rootHandle = deps.brepOf(root.part)\n if (rootHandle === undefined) return { reason: 'no-handle', part: root.part }\n const rootTable = deps.roleTableOf(root.part)\n if (!rootTable) return { reason: 'no-role-table', part: root.part }\n // root 的 roleTable 键形:origin(StmtId 串)→ role 线格式 → hashes。\n const rootHashes = rootTable.get(String(origin))?.get(roleLine)\n if (rootHashes === undefined || rootHashes.length === 0) {\n return { reason: 'role-not-in-table', origin, role: roleLine }\n }\n const rootAll = deps.faceHashes(rootHandle)\n let ordinals: number[] = []\n for (const h of rootHashes) {\n const idx = rootAll.indexOf(h)\n if (idx < 0) return { reason: 'hash-not-found', part: root.part, count: rootHashes.length }\n ordinals.push(idx + 1) // ordinal 1 起\n }\n\n // ── 逐节点推进(ordinal 键演化;链上首节点是原点,其演化作用于其输入,\n // 因此推进从链的第二个节点开始)──\n for (let i = 1; i < chain.length; i++) {\n const node = chain[i]!\n if (!node.evolution) {\n // identity 类 op(copy/place/transform)登记时 slot 里有 identityEvolution;\n // 演化缺失说明该节点未按 1.10 前置①挂接 —— 显式失败,不默认恒等。\n const g = graph.node(node.stmt)\n return { reason: 'no-evolution', stmt: node.stmt, op: g?.op ?? '?' }\n }\n ordinals = ordinals.flatMap((o) => node.evolution!.get(o) ?? [o])\n }\n\n // ── 落地:目标 part 上 ordinal → hash ──\n const last = chain[chain.length - 1]!\n const targetHandle = deps.brepOf(last.part)\n if (targetHandle === undefined) return { reason: 'no-handle', part: last.part }\n const targetAll = deps.faceHashes(targetHandle)\n const hashes: number[] = []\n for (const o of ordinals) {\n const h = targetAll[o - 1]\n if (h === undefined) return { reason: 'hash-not-found', part: last.part, count: ordinals.length }\n hashes.push(h)\n }\n return { hashes }\n}\n\n// formatRoleName 在 API 面保留导出(role 线格式与 TopoRef 序列化的唯一权威),\n// 本模块仅经 parseRoleName 校验线格式合法性。\nexport { formatRoleName }\n"]}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lineage.ts — 血缘图登记(计划 §4.3)。
|
|
3
|
+
*
|
|
4
|
+
* 每个 op 执行完登记一条 `LineageNode`:**谁(`StmtId`)用什么 op、吃了哪些
|
|
5
|
+
* part、产出哪些 part、属哪个 provenance 类别**。两张表:
|
|
6
|
+
*
|
|
7
|
+
* | 表 | 键 → 值 | 用途 |
|
|
8
|
+
* |---|---|---|
|
|
9
|
+
* | `lineage` | `StmtId` → `LineageNode` | 从身份原点沿 DAG 前进 |
|
|
10
|
+
* | `partToStmt` | `PartName` → `StmtId` | 从 part 名字反查是哪条语句造的 |
|
|
11
|
+
*
|
|
12
|
+
* ## 为什么这一层必须存在
|
|
13
|
+
*
|
|
14
|
+
* 现状把身份表达成 **hash**(`face-evolution.ts` 的内存指针哈希),于是每次查询都在
|
|
15
|
+
* 付「对齐 hash」的利息:谁改了几何,谁的 hash 就变,身份就断。正确形态是
|
|
16
|
+
* `(StmtId, RoleName)` 的**因果坐标**——`StmtId` 说「哪条语句产生」,`RoleName` 说
|
|
17
|
+
* 「那条语句把它当作什么」。因果坐标不随几何变化,**也不需要知道中间过了几个 op**。
|
|
18
|
+
*
|
|
19
|
+
* ## 登记口只能有一个(但调用点有两个)
|
|
20
|
+
*
|
|
21
|
+
* 手写 op 走 `wrapBrepOne`(`define-op.ts`),生成投影走 `compatOp`
|
|
22
|
+
* (`api/internal/compat-op.ts`)——**两条路径都必须登记**,否则 42 条投影永远无名。
|
|
23
|
+
* 但两条路径共用一个 `register()`,规则才只有一处。
|
|
24
|
+
*
|
|
25
|
+
* ## 三条硬规则(这是「未来漏洞最少」的核心)
|
|
26
|
+
*
|
|
27
|
+
* | # | 规则 | 违反时 |
|
|
28
|
+
* |---|---|---|
|
|
29
|
+
* | **N1** | inputs 里任一 Shape 查不到 `PartName` → 报错 | `E_TOPO_UNTRACKED_INPUT` |
|
|
30
|
+
* | **N2** | 当前语句锚点缺失,或与声明的 `stmt` 不符 → 报错 | `E_TOPO_NO_ANCHOR` |
|
|
31
|
+
* | **N3** | 同一 `StmtId` 重复登记且**身份内容**不同 → 报错 | `E_TOPO_DUPLICATE_STMT` |
|
|
32
|
+
*
|
|
33
|
+
* **N1 为什么必须是错误而不是"默认成链根"**:op 内部常临时造 Shape(中间产物、
|
|
34
|
+
* 工具件)。若给它们默认一个 origin,「看起来对但语义错」的身份就诞生了——
|
|
35
|
+
* 引用能解析成功,但解析到**别的面**。这类错误不会在测试里暴露(测试用的参数恰好
|
|
36
|
+
* 让两者重合),只会在用户改参数、改尺寸时暴露。**宁可在执行期就炸。**
|
|
37
|
+
*
|
|
38
|
+
* **N2 为什么现在才敢做**:它依赖 `getCurrentStmt()` 是"当前语句的权威读法"。
|
|
39
|
+
* 这一点由约束 **C1(禁止并发多 runtime)** 保证(见 §4.7.1)——不是"全局态凑合能用"。
|
|
40
|
+
*
|
|
41
|
+
* ## 依赖注入,不读全局
|
|
42
|
+
*
|
|
43
|
+
* `register()` 收一个 `LineageDeps`(`nameOf` / `currentStmt`)而不是 import
|
|
44
|
+
* `runtime-state`。理由有两条:其一,`topology/` 现有模块(如 `roles.ts`)都是
|
|
45
|
+
* "把依赖当参数"的风格,读全局会破坏它;其二,N1/N2/N3 的测试不想去摆弄全局态。
|
|
46
|
+
*/
|
|
47
|
+
import type { PartName, StmtId } from '../../identity.js';
|
|
48
|
+
import type { HashEvolution } from '../../brep/face-evolution.js';
|
|
49
|
+
import { type RoleName } from './role-name.js';
|
|
50
|
+
/**
|
|
51
|
+
* 新造面的获取方式(只有 `kernel` / `construct` 需要)。
|
|
52
|
+
*
|
|
53
|
+
* - `byAdjacency`:靠结果形状与输入的**邻接关系**推出哪个面是新造的
|
|
54
|
+
* (布尔/倒角等:新面必然与已知面相邻,而幸存面有自己的坐标)
|
|
55
|
+
* - `explicit`:op 直接给出词汇表(构造类:底面 = profile、侧面 i = 第 i 条边扫掠)
|
|
56
|
+
*
|
|
57
|
+
* ⚠️ **不能靠内核的 `generated` 桶**(Phase 0.4 实测):它与 `modified` 同构分段、
|
|
58
|
+
* 键集相同,值是各输入面派生的**中间形**——`cut` 里 12 个 hash 结果里 0 存活,
|
|
59
|
+
* `fillet`/`fuse` 里整桶为空。故 `byAdjacency` / `explicit` 是**必填**。
|
|
60
|
+
*/
|
|
61
|
+
export type NewFaceRule = {
|
|
62
|
+
readonly via: 'byAdjacency';
|
|
63
|
+
} | {
|
|
64
|
+
readonly via: 'explicit';
|
|
65
|
+
readonly vocab: readonly RoleName[];
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* 六个 provenance 类别(计划 §4.4,封闭集)。
|
|
69
|
+
*
|
|
70
|
+
* **继承面的处置完全由类别决定,op 不写**;只有 `construct` 和 `kernel` 会造新面,
|
|
71
|
+
* 才有词汇这一项 ⇒ `identity` / `subdivide` / `replicate(k)` **零声明**。
|
|
72
|
+
*
|
|
73
|
+
* 本表是**类别归属**,不是接线状态(例:`sweep` 属 `construct` 类但未接线,见 §1 D10)。
|
|
74
|
+
*/
|
|
75
|
+
export type Provenance =
|
|
76
|
+
/** 内核给历史:boolean / fillet / chamfer / shell / offset / 刚体变换 */
|
|
77
|
+
{
|
|
78
|
+
readonly kind: 'kernel';
|
|
79
|
+
readonly newFaces: NewFaceRule;
|
|
80
|
+
}
|
|
81
|
+
/** 输出面 ↔ 输入的构造规则:extrude / revolve / sweep / loft / primitives / sketch / import_brep */
|
|
82
|
+
| {
|
|
83
|
+
readonly kind: 'construct';
|
|
84
|
+
readonly newFaces: Extract<NewFaceRule, {
|
|
85
|
+
via: 'explicit';
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
88
|
+
/** 1:1,第 i 面 → 第 i 面:copy / place / clone / locate / applyMatrix */
|
|
89
|
+
| {
|
|
90
|
+
readonly kind: 'identity';
|
|
91
|
+
}
|
|
92
|
+
/** 每输入面 → 若干片:split / section */
|
|
93
|
+
| {
|
|
94
|
+
readonly kind: 'subdivide';
|
|
95
|
+
}
|
|
96
|
+
/** 第 k 份第 i 面 ← 第 i 面:linearPattern / circularPattern / gridPattern / rectangularPattern / mirrorJoin */
|
|
97
|
+
| {
|
|
98
|
+
readonly kind: 'replicate';
|
|
99
|
+
readonly k: number;
|
|
100
|
+
}
|
|
101
|
+
/** 显式记账:算不出来。应趋近于 0;审计测试必须列出全部并给出理由 */
|
|
102
|
+
| {
|
|
103
|
+
readonly kind: 'unmodeled';
|
|
104
|
+
readonly reason: string;
|
|
105
|
+
};
|
|
106
|
+
/** `Provenance` 的类别标签(封闭六值)。 */
|
|
107
|
+
export type ProvenanceKind = Provenance['kind'];
|
|
108
|
+
/** 六个类别标签,供审计测试枚举(新增类别必须同步此处)。 */
|
|
109
|
+
export declare const PROVENANCE_KINDS: readonly ["kernel", "construct", "identity", "subdivide", "replicate", "unmodeled"];
|
|
110
|
+
/**
|
|
111
|
+
* 演化记录(`kind='kernel'` 时执行期补挂)。
|
|
112
|
+
*
|
|
113
|
+
* 两种形态并存(1.10 前置①实测):
|
|
114
|
+
* - **序号键**(`slot.faceEvolution` 的实际存储形态,`Map<ordinal, ordinal[]>`):
|
|
115
|
+
* boolean/fillet/chamfer 走 `decodeEvolution`(逐句柄 hashCode),copy/transform/place
|
|
116
|
+
* 走 `identityEvolution`(恒等)。回走推进 identity 类与"序号不变"的 kernel 路径用它。
|
|
117
|
+
* - **哈希键**(`HashEvolution`,`decodeHashEvolution` 的输出):只在 booleanWithRoleTable
|
|
118
|
+
* 等组合函数内部瞬时存在,不落 slot。回走按哈希集合推进时用它。
|
|
119
|
+
*/
|
|
120
|
+
export type EvolutionRecord = Map<number, number[]> | HashEvolution;
|
|
121
|
+
/**
|
|
122
|
+
* 判断演化记录是否为哈希键形态(`HashEvolution` 有 `modified`/`deleted` 字段)。
|
|
123
|
+
*
|
|
124
|
+
* @param e - the evolution record to test.
|
|
125
|
+
* @returns true when the record is the hash-key form (`HashEvolution`).
|
|
126
|
+
*/
|
|
127
|
+
export declare function isHashEvolution(e: EvolutionRecord): e is HashEvolution;
|
|
128
|
+
/**
|
|
129
|
+
* 血缘图的一个节点 = 一条语句的登记记录。
|
|
130
|
+
*
|
|
131
|
+
* `inputs`/`outputs` 是 `PartName`(不是 Shape):Shape 是执行期的活对象,
|
|
132
|
+
* 身份层必须只留**可序列化、可比较**的东西,否则节点会随 arena 释放而失去意义。
|
|
133
|
+
*/
|
|
134
|
+
export interface LineageNode {
|
|
135
|
+
/** 该语句的 id(`ExecutionAnchor.id`),全局唯一。 */
|
|
136
|
+
readonly stmt: StmtId;
|
|
137
|
+
/** op 名(如 `cad.fillet`)——用于报错信息与审计。 */
|
|
138
|
+
readonly op: string;
|
|
139
|
+
/** 输入 part 名(`inputs.map(nameOf)` 的结果,已保证全部有名字)。 */
|
|
140
|
+
readonly inputs: readonly PartName[];
|
|
141
|
+
/** 产出 part 名(至少一个)。 */
|
|
142
|
+
readonly outputs: readonly PartName[];
|
|
143
|
+
/** provenance 类别 + 该类别的载荷。 */
|
|
144
|
+
readonly provenance: Provenance;
|
|
145
|
+
/** `kind='kernel'` 时执行期记录的 hash 演化(`attachEvolution` 事后补上)。 */
|
|
146
|
+
readonly evolution?: EvolutionRecord;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 登记入参(尚未解析成 `PartName` 的形态)。
|
|
150
|
+
*
|
|
151
|
+
* `inputs` 故意收 **Shape 句柄**而不是 `PartName`:N1 的判据就是
|
|
152
|
+
* "这个 Shape 有没有名字",若调用方先自己 map 成名字,就正好把
|
|
153
|
+
* "查不到名字"这一步跳过/默认了——那正是 N1 要防的。
|
|
154
|
+
*/
|
|
155
|
+
export interface LineageDraft {
|
|
156
|
+
/** 声明本条语句的 id(N2 会与当前锚点核对)。 */
|
|
157
|
+
readonly stmt: StmtId;
|
|
158
|
+
/** op 名。 */
|
|
159
|
+
readonly op: string;
|
|
160
|
+
/** 输入 Shape 句柄(N1 在 register 内解析)。 */
|
|
161
|
+
readonly inputs: readonly object[];
|
|
162
|
+
/** 产出 part 名(非空;调用方从锚点/nameOf 拿到)。 */
|
|
163
|
+
readonly outputs: readonly [PartName, ...PartName[]];
|
|
164
|
+
/** provenance 类别 + 载荷。 */
|
|
165
|
+
readonly provenance: Provenance;
|
|
166
|
+
}
|
|
167
|
+
/** 登记所需的外部读口(由调用点注入,见文件头「依赖注入」)。 */
|
|
168
|
+
export interface LineageDeps {
|
|
169
|
+
/** Shape → PartName(`runtime-state` 的 `nameOf`)。 */
|
|
170
|
+
readonly nameOf: (shape: object) => PartName | undefined;
|
|
171
|
+
/** 当前执行语句锚点(`runtime-state` 的 `getCurrentStmt`)。 */
|
|
172
|
+
readonly currentStmt: () => {
|
|
173
|
+
readonly id: string;
|
|
174
|
+
} | undefined;
|
|
175
|
+
}
|
|
176
|
+
/** 血缘登记错误码(三条规则 N1/N2/N3)。 */
|
|
177
|
+
export type LineageErrorCode = 'E_TOPO_UNTRACKED_INPUT' | 'E_TOPO_NO_ANCHOR' | 'E_TOPO_DUPLICATE_STMT';
|
|
178
|
+
/** 血缘登记失败。带稳定错误码,禁止静默兜底。 */
|
|
179
|
+
export declare class LineageError extends Error {
|
|
180
|
+
/** 稳定错误码(宿主/args 校验按码识别)。 */
|
|
181
|
+
readonly code: LineageErrorCode;
|
|
182
|
+
/** 出错的语句 id(若能确定)。 */
|
|
183
|
+
readonly stmt?: string;
|
|
184
|
+
/**
|
|
185
|
+
* @param code - the stable error code.
|
|
186
|
+
* @param message - what went wrong, with the offending statement named.
|
|
187
|
+
* @param stmt - the statement id, when known.
|
|
188
|
+
*/
|
|
189
|
+
constructor(code: LineageErrorCode, message: string, stmt?: string);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 两个 `RoleName` 是否相等(按值、递归)。
|
|
193
|
+
*
|
|
194
|
+
* 手写而不是 `JSON.stringify` 比较:键序会随写字面量的顺序变化
|
|
195
|
+
* (`{index, op}` 与 `{op, index}` 是同一个值、不同的 JSON),
|
|
196
|
+
* 而这两个函数是 N3「内容不同才报错」的判据——键序敏感会**误报冲突**。
|
|
197
|
+
*
|
|
198
|
+
* @param a - one role name.
|
|
199
|
+
* @param b - the other role name.
|
|
200
|
+
* @returns true when the two roles are structurally identical.
|
|
201
|
+
*/
|
|
202
|
+
export declare function roleNameEquals(a: RoleName, b: RoleName): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* 两条新造面规则是否相等(词汇表**逐项按序**比较——顺序是构造语义的一部分:
|
|
205
|
+
* 侧面 i 对应第 i 条 profile 边,重排就是换了一个 role)。
|
|
206
|
+
*
|
|
207
|
+
* @param a - one rule.
|
|
208
|
+
* @param b - the other rule.
|
|
209
|
+
* @returns true when the two rules are structurally identical.
|
|
210
|
+
*/
|
|
211
|
+
export declare function newFaceRuleEquals(a: NewFaceRule, b: NewFaceRule): boolean;
|
|
212
|
+
/**
|
|
213
|
+
* 两个 `Provenance` 是否相等(按值)。
|
|
214
|
+
*
|
|
215
|
+
* @param a - one provenance.
|
|
216
|
+
* @param b - the other provenance.
|
|
217
|
+
* @returns true when they are structurally identical.
|
|
218
|
+
*/
|
|
219
|
+
export declare function provenanceEquals(a: Provenance, b: Provenance): boolean;
|
|
220
|
+
/**
|
|
221
|
+
* 血缘图:两张表 + 一个登记函数。
|
|
222
|
+
*
|
|
223
|
+
* 实例化而非全局单例,是为了让 N1/N2/N3 的测试各用各的图、互不污染;
|
|
224
|
+
* 执行期由 `runtime-state` 侧持有唯一实例(C1 保证单 runtime,不存在两图并存)。
|
|
225
|
+
*/
|
|
226
|
+
export declare class LineageGraph {
|
|
227
|
+
private readonly nodes;
|
|
228
|
+
private readonly partOwner;
|
|
229
|
+
/**
|
|
230
|
+
* 执行期旁挂:语句输出 part 的 roleTable(1.10 前置③)。
|
|
231
|
+
*
|
|
232
|
+
* 回走锚定需要 root 语句的「origin→role→hash[]」表;它本来只存在
|
|
233
|
+
* `slot.roleTable`(解析缓存)里,删字段后唯一落点就是这里。
|
|
234
|
+
* 不进 `LineageNode`(节点是身份数据,N3 比较不含它)。
|
|
235
|
+
*/
|
|
236
|
+
private readonly outputTables;
|
|
237
|
+
/**
|
|
238
|
+
* 执行期旁挂:语句输出 part 的 BREP 句柄(回走锚定/落地做 ordinal↔hash 换算用)。
|
|
239
|
+
* 句柄是活对象不进节点;随 `clear()` 一起清(句柄生命周期由 solidCache 管)。
|
|
240
|
+
*/
|
|
241
|
+
private readonly outputHandles;
|
|
242
|
+
/**
|
|
243
|
+
* 执行期旁挂:**part 名键**的 roleTable(1.10 前置③,op 读输入表用)。
|
|
244
|
+
*
|
|
245
|
+
* 为什么有语句键还要 part 键:op 实现读的是「输入 part 的表」。按语句反查
|
|
246
|
+
* (stmtOf(part))在重赋值下会指到**本语句**——register 先于 impl 执行,
|
|
247
|
+
* `part0 = translate(part0)` 的 partOwner 已被 s2 覆盖,impl 读输入表时
|
|
248
|
+
* 拿到的是自己的输出。part 键表只在 `recordOutput`(impl 内 fromBrep 时)
|
|
249
|
+
* 才覆盖 ⇒ impl 读表时看到的仍是上一条语句记录的旧表——时序天然正确。
|
|
250
|
+
*/
|
|
251
|
+
private readonly outputTablesByPart;
|
|
252
|
+
/**
|
|
253
|
+
* 登记一条语句(N1/N2/N3 全在这里校验)。
|
|
254
|
+
*
|
|
255
|
+
* @param draft - the statement's lineage facts (inputs still as Shape handles).
|
|
256
|
+
* @param deps - the injected readers (`nameOf` / `currentStmt`).
|
|
257
|
+
* @returns the stored node.
|
|
258
|
+
* @throws LineageError on N1 (untracked input), N2 (anchor mismatch), or N3 (conflicting re-register).
|
|
259
|
+
*/
|
|
260
|
+
register(draft: LineageDraft, deps: LineageDeps): LineageNode;
|
|
261
|
+
/**
|
|
262
|
+
* 事后补挂 hash 演化(`kind='kernel'` 用)。
|
|
263
|
+
*
|
|
264
|
+
* 与 `register` 分开是因为演化记录发生在几何算完之后,而登记发生在调用边界;
|
|
265
|
+
* 合成一个操作会让 N3 的"内容比较"必须处理"evolution 可能晚到"的时序问题。
|
|
266
|
+
*
|
|
267
|
+
* @param stmt - the statement whose evolution to attach.
|
|
268
|
+
* @param evolution - the hash evolution produced by this statement.
|
|
269
|
+
* @throws LineageError when the statement was never registered.
|
|
270
|
+
*/
|
|
271
|
+
attachEvolution(stmt: StmtId, evolution: EvolutionRecord): void;
|
|
272
|
+
/**
|
|
273
|
+
* 按语句 id 取节点。
|
|
274
|
+
*
|
|
275
|
+
* @param stmt - the statement id to look up.
|
|
276
|
+
* @returns the statement's LineageNode, or undefined when not registered.
|
|
277
|
+
*/
|
|
278
|
+
node(stmt: StmtId): LineageNode | undefined;
|
|
279
|
+
/**
|
|
280
|
+
* 按 part 名反查产出它的语句 id。
|
|
281
|
+
*
|
|
282
|
+
* @param part - the part name to look up.
|
|
283
|
+
* @returns the producing statement id, or undefined when unowned.
|
|
284
|
+
*/
|
|
285
|
+
stmtOf(part: PartName): StmtId | undefined;
|
|
286
|
+
/**
|
|
287
|
+
* 按 part 名反查产出它的节点。
|
|
288
|
+
*
|
|
289
|
+
* @param part - the part name to look up.
|
|
290
|
+
* @returns the producing node, or undefined when unowned.
|
|
291
|
+
*/
|
|
292
|
+
nodeOfPart(part: PartName): LineageNode | undefined;
|
|
293
|
+
/**
|
|
294
|
+
* 找把 `part` 作为输入的下游节点(回走推进用,1.10 前置②)。
|
|
295
|
+
*
|
|
296
|
+
* 链行走的方向是「origin → 消费者 → 消费者的消费者」:中间 part 的产出方
|
|
297
|
+
* 是 origin 自己(`stmtOf` 指回原点),不能用产出方找下一步。
|
|
298
|
+
*
|
|
299
|
+
* @param part - the part name consumed by the wanted node.
|
|
300
|
+
* @returns the first (registration-order) node whose inputs contain the part.
|
|
301
|
+
*/
|
|
302
|
+
nodeConsuming(part: PartName): LineageNode | undefined;
|
|
303
|
+
/** 已登记的语句数。 */
|
|
304
|
+
get size(): number;
|
|
305
|
+
/** 清空(每次执行开始时调用——一次执行内 `StmtId` 稳定)。 */
|
|
306
|
+
clear(): void;
|
|
307
|
+
/**
|
|
308
|
+
* 记录语句输出 part 的 roleTable 与句柄(1.10 前置③,执行期旁挂)。
|
|
309
|
+
*
|
|
310
|
+
* 调用点:`define-op.wrapped` 的 brep 分支——登记血缘时(或补挂演化时)
|
|
311
|
+
* 顺手记录,读口是 `getSlot(outShape)`。表/句柄都可选(构造类 op 可能两者皆无)。
|
|
312
|
+
*
|
|
313
|
+
* @param stmt - the statement whose output is recorded.
|
|
314
|
+
* @param roleTable - the output part's role table (origin→role→hash[]), if any.
|
|
315
|
+
* @param solid - the output part's BREP handle, if any.
|
|
316
|
+
* @param part - the output part name to also key the table under (part-key authority), if any.
|
|
317
|
+
*/
|
|
318
|
+
recordOutput(stmt: StmtId, roleTable?: ReadonlyMap<string, ReadonlyMap<string, readonly number[]>>, solid?: unknown, part?: PartName): void;
|
|
319
|
+
/** 读语句输出 part 的 roleTable(回走锚定用)。
|
|
320
|
+
*
|
|
321
|
+
* @param stmt - the statement whose output table to read.
|
|
322
|
+
* @returns the statement-keyed role table, or undefined when none was recorded.
|
|
323
|
+
*/
|
|
324
|
+
outputTableOf(stmt: StmtId): ReadonlyMap<string, ReadonlyMap<string, readonly number[]>> | undefined;
|
|
325
|
+
/** 读语句输出 part 的 BREP 句柄(回走 ordinal↔hash 换算用)。
|
|
326
|
+
*
|
|
327
|
+
* @param stmt - the statement whose output handle to read.
|
|
328
|
+
* @returns the statement-keyed BREP handle, or undefined when none was recorded.
|
|
329
|
+
*/
|
|
330
|
+
outputHandleOf(stmt: StmtId): unknown | undefined;
|
|
331
|
+
/**
|
|
332
|
+
* 读 part 名键的 roleTable(op 实现读**输入**表用,1.10 前置③)。
|
|
333
|
+
*
|
|
334
|
+
* 语义 = 旧 `getSlot(input)?.roleTable`:impl 执行时刻,该 part 的表是
|
|
335
|
+
* 上一条语句 `recordOutput` 记录的那份(本语句的覆盖发生在 impl 内
|
|
336
|
+
* fromBrep 时,晚于任何输入读)。未记录(mesh 产物 / 未接血缘)→ undefined。
|
|
337
|
+
*
|
|
338
|
+
* @param part - the output part name whose role table to read.
|
|
339
|
+
* @returns the part-keyed role table, or undefined when not recorded.
|
|
340
|
+
*/
|
|
341
|
+
tableOfPart(part: PartName): ReadonlyMap<string, ReadonlyMap<string, readonly number[]>> | undefined;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* 执行期共用的血缘图实例。
|
|
345
|
+
*
|
|
346
|
+
* 唯一性由约束 C1(禁止并发多 runtime)保证;测试请自建 `new LineageGraph()`。
|
|
347
|
+
*/
|
|
348
|
+
export declare const runtimeLineage: LineageGraph;
|
|
349
|
+
//# sourceMappingURL=lineage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage.d.ts","sourceRoot":"","sources":["../../../src/topology/naming/lineage.ts"],"names":[],"mappings":"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"}
|