@faicad/faijs 0.14.1 → 0.16.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 +7 -0
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +23 -22
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +26 -8
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +4 -1
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/generated/cad/script-face.d.ts +1 -1
- package/dist/api/generated/cad/script-face.d.ts.map +1 -1
- package/dist/api/generated/cad/script-face.js +1 -2
- package/dist/api/generated/cad/script-face.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 -8
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +19 -26
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/index.d.ts +1 -10
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +10 -18
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +3 -1
- package/dist/api/internal/compat-projection.d.ts.map +1 -1
- package/dist/api/internal/compat-projection.js +8 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/replica-role-table.d.ts +36 -0
- package/dist/api/internal/replica-role-table.d.ts.map +1 -0
- package/dist/api/internal/replica-role-table.js +73 -0
- package/dist/api/internal/replica-role-table.js.map +1 -0
- package/dist/api/internal/result-unwrap.d.ts +3 -1
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +2 -2
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/occt-kernel-bridge.d.ts +105 -27
- package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
- package/dist/api/occt-kernel-bridge.js +255 -41
- package/dist/api/occt-kernel-bridge.js.map +1 -1
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +25 -61
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/replicate.d.ts +145 -0
- package/dist/api/replicate.d.ts.map +1 -0
- package/dist/api/replicate.js +351 -0
- package/dist/api/replicate.js.map +1 -0
- package/dist/api/revolve.d.ts +36 -0
- package/dist/api/revolve.d.ts.map +1 -0
- package/dist/api/revolve.js +165 -0
- package/dist/api/revolve.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +8 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +37 -36
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface/projection-overrides.d.ts.map +1 -1
- package/dist/api/surface/projection-overrides.js +6 -0
- package/dist/api/surface/projection-overrides.js.map +1 -1
- package/dist/boolean/deriveNormals.d.ts +5 -4
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +24 -7
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +58 -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 +39 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -5
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +232 -18
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +79 -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 +18 -1
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +81 -11
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +6 -28
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -17
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +13 -18
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +25 -18
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +4 -2
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +2 -0
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +4 -6
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +4 -9
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +0 -7
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +1 -3
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +13 -18
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/env-agnostic.d.ts +38 -0
- package/dist/env-agnostic.d.ts.map +1 -0
- package/dist/env-agnostic.js +29 -0
- package/dist/env-agnostic.js.map +1 -0
- package/dist/fcstd/codegen.d.ts.map +1 -1
- package/dist/fcstd/codegen.js +8 -1
- package/dist/fcstd/codegen.js.map +1 -1
- package/dist/fcstd/expressions.d.ts +24 -0
- package/dist/fcstd/expressions.d.ts.map +1 -1
- package/dist/fcstd/expressions.js +91 -0
- package/dist/fcstd/expressions.js.map +1 -1
- package/dist/fcstd/feature-translate.d.ts.map +1 -1
- package/dist/fcstd/feature-translate.js +16 -2
- package/dist/fcstd/feature-translate.js.map +1 -1
- package/dist/fcstd/structural-types.d.ts.map +1 -1
- package/dist/fcstd/structural-types.js +5 -0
- package/dist/fcstd/structural-types.js.map +1 -1
- package/dist/index.d.ts +7 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -16
- package/dist/index.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts +9 -0
- package/dist/lang/determinism-scanner.d.ts.map +1 -1
- package/dist/lang/determinism-scanner.js +7 -1
- package/dist/lang/determinism-scanner.js.map +1 -1
- package/dist/lang/symbol-table.d.ts +31 -0
- package/dist/lang/symbol-table.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +6 -16
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +6 -16
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/symbol-table.js +50 -1
- package/dist/lang/symbol-table.js.map +1 -1
- package/dist/mesh/creased-normals.d.ts +50 -0
- package/dist/mesh/creased-normals.d.ts.map +1 -0
- package/dist/mesh/creased-normals.js +114 -0
- package/dist/mesh/creased-normals.js.map +1 -0
- package/dist/mesh/decoration-provider.d.ts +53 -0
- package/dist/mesh/decoration-provider.d.ts.map +1 -0
- package/dist/mesh/decoration-provider.js +21 -0
- package/dist/mesh/decoration-provider.js.map +1 -0
- package/dist/mesh/engrave.d.ts +4 -0
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +22 -31
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/index.d.ts +5 -14
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +7 -19
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +2 -1
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +5 -7
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.d.ts +5 -18
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +4 -48
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/stl-loader.d.ts +23 -0
- package/dist/mesh/stl-loader.d.ts.map +1 -0
- package/dist/mesh/stl-loader.js +139 -0
- package/dist/mesh/stl-loader.js.map +1 -0
- package/dist/module-resolver/parse-imports.d.ts +37 -0
- package/dist/module-resolver/parse-imports.d.ts.map +1 -0
- package/dist/module-resolver/parse-imports.js +39 -0
- package/dist/module-resolver/parse-imports.js.map +1 -0
- package/dist/module-resolver/resolver.d.ts +1 -1
- package/dist/module-resolver/resolver.js +2 -2
- package/dist/module-resolver/resolver.js.map +1 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +1 -22
- package/dist/node-host/cli.js.map +1 -1
- package/dist/primitives/text/cjk-font.d.ts +42 -0
- package/dist/primitives/text/cjk-font.d.ts.map +1 -0
- package/dist/primitives/text/cjk-font.js +86 -0
- package/dist/primitives/text/cjk-font.js.map +1 -0
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.js +2 -2
- package/dist/sdk.js.map +1 -1
- package/dist/symbol-table.d.ts +15 -0
- package/dist/symbol-table.d.ts.map +1 -0
- package/dist/symbol-table.js +14 -0
- package/dist/symbol-table.js.map +1 -0
- package/dist/topology/naming/lineage-resolve.js +1 -1
- package/dist/topology/naming/lineage-resolve.js.map +1 -1
- package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
- package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
- package/dist/vendored/brepjs/kernel/index.js +11 -0
- package/dist/vendored/brepjs/kernel/index.js.map +1 -1
- package/dist/weapp.d.ts +3 -3
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +6 -3
- package/dist/weapp.js.map +1 -1
- package/package.json +16 -14
- package/dist/api/compat/index.d.ts +0 -173
- package/dist/api/compat/index.d.ts.map +0 -1
- package/dist/api/compat/index.js +0 -222
- package/dist/api/compat/index.js.map +0 -1
- package/dist/api/compound.d.ts +0 -110
- package/dist/api/compound.d.ts.map +0 -1
- package/dist/api/compound.js +0 -164
- package/dist/api/compound.js.map +0 -1
- package/dist/api/copy.d.ts +0 -40
- package/dist/api/copy.d.ts.map +0 -1
- package/dist/api/copy.js +0 -83
- package/dist/api/copy.js.map +0 -1
- package/dist/api/fai_drill.d.ts +0 -46
- package/dist/api/fai_drill.d.ts.map +0 -1
- package/dist/api/fai_drill.js +0 -243
- package/dist/api/fai_drill.js.map +0 -1
- package/dist/api/fai_extrude.d.ts +0 -36
- package/dist/api/fai_extrude.d.ts.map +0 -1
- package/dist/api/fai_extrude.js +0 -79
- package/dist/api/fai_extrude.js.map +0 -1
- package/dist/api/fai_split.d.ts +0 -46
- package/dist/api/fai_split.d.ts.map +0 -1
- package/dist/api/fai_split.js +0 -254
- package/dist/api/fai_split.js.map +0 -1
- package/dist/api/load.d.ts +0 -41
- package/dist/api/load.d.ts.map +0 -1
- package/dist/api/load.js +0 -84
- package/dist/api/load.js.map +0 -1
- package/dist/api/svgExtrude.d.ts +0 -32
- package/dist/api/svgExtrude.d.ts.map +0 -1
- package/dist/api/svgExtrude.js +0 -74
- package/dist/api/svgExtrude.js.map +0 -1
- package/dist/api/text.d.ts +0 -34
- package/dist/api/text.d.ts.map +0 -1
- package/dist/api/text.js +0 -101
- package/dist/api/text.js.map +0 -1
- package/dist/brep/text/fontTestHelper.d.ts +0 -30
- package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
- package/dist/brep/text/fontTestHelper.js +0 -57
- package/dist/brep/text/fontTestHelper.js.map +0 -1
- package/dist/cad-runtime/module-executor.d.ts +0 -271
- package/dist/cad-runtime/module-executor.d.ts.map +0 -1
- package/dist/cad-runtime/module-executor.js +0 -630
- package/dist/cad-runtime/module-executor.js.map +0 -1
- package/dist/cad-runtime/terminal-dag.d.ts +0 -65
- package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
- package/dist/cad-runtime/terminal-dag.js +0 -167
- package/dist/cad-runtime/terminal-dag.js.map +0 -1
- package/dist/faqts/browser.d.ts +0 -16
- package/dist/faqts/browser.d.ts.map +0 -1
- package/dist/faqts/browser.js +0 -13
- package/dist/faqts/browser.js.map +0 -1
- package/dist/faqts/exec-blob.d.ts +0 -14
- package/dist/faqts/exec-blob.d.ts.map +0 -1
- package/dist/faqts/exec-blob.js +0 -22
- package/dist/faqts/exec-blob.js.map +0 -1
- package/dist/faqts/exec-node.d.ts +0 -15
- package/dist/faqts/exec-node.d.ts.map +0 -1
- package/dist/faqts/exec-node.js +0 -29
- package/dist/faqts/exec-node.js.map +0 -1
- package/dist/faqts/imports.d.ts +0 -74
- package/dist/faqts/imports.d.ts.map +0 -1
- package/dist/faqts/imports.js +0 -95
- package/dist/faqts/imports.js.map +0 -1
- package/dist/faqts/index.d.ts +0 -22
- package/dist/faqts/index.d.ts.map +0 -1
- package/dist/faqts/index.js +0 -21
- package/dist/faqts/index.js.map +0 -1
- package/dist/faqts/node.d.ts +0 -23
- package/dist/faqts/node.d.ts.map +0 -1
- package/dist/faqts/node.js +0 -23
- package/dist/faqts/node.js.map +0 -1
- package/dist/faqts/run.d.ts +0 -62
- package/dist/faqts/run.d.ts.map +0 -1
- package/dist/faqts/run.js +0 -62
- package/dist/faqts/run.js.map +0 -1
- package/dist/faqts/transform.d.ts +0 -43
- package/dist/faqts/transform.d.ts.map +0 -1
- package/dist/faqts/transform.js +0 -35
- package/dist/faqts/transform.js.map +0 -1
- package/dist/lang/compile.d.ts +0 -50
- package/dist/lang/compile.d.ts.map +0 -1
- package/dist/lang/compile.js +0 -368
- package/dist/lang/compile.js.map +0 -1
- package/dist/lang/keep.d.ts +0 -109
- package/dist/lang/keep.d.ts.map +0 -1
- package/dist/lang/keep.js +0 -226
- package/dist/lang/keep.js.map +0 -1
- package/dist/lang/parser.d.ts +0 -91
- package/dist/lang/parser.d.ts.map +0 -1
- package/dist/lang/parser.js +0 -1594
- package/dist/lang/parser.js.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
- package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
- package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
- package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
- package/dist/mesh/drill-hole/drill-types.js +0 -7
- package/dist/mesh/drill-hole/drill-types.js.map +0 -1
- package/dist/mesh/fai_drill.d.ts +0 -21
- package/dist/mesh/fai_drill.d.ts.map +0 -1
- package/dist/mesh/fai_drill.js +0 -92
- package/dist/mesh/fai_drill.js.map +0 -1
- package/dist/mesh/fai_extrude.d.ts +0 -24
- package/dist/mesh/fai_extrude.d.ts.map +0 -1
- package/dist/mesh/fai_extrude.js +0 -42
- package/dist/mesh/fai_extrude.js.map +0 -1
- package/dist/mesh/fai_split.d.ts +0 -164
- package/dist/mesh/fai_split.d.ts.map +0 -1
- package/dist/mesh/fai_split.js +0 -269
- package/dist/mesh/fai_split.js.map +0 -1
- package/dist/primitives/svg-extrude.d.ts +0 -43
- package/dist/primitives/svg-extrude.d.ts.map +0 -1
- package/dist/primitives/svg-extrude.js +0 -78
- package/dist/primitives/svg-extrude.js.map +0 -1
- package/dist/primitives/text/cjk.d.ts +0 -61
- package/dist/primitives/text/cjk.d.ts.map +0 -1
- package/dist/primitives/text/cjk.js +0 -215
- package/dist/primitives/text/cjk.js.map +0 -1
- package/dist/primitives/text-geometry.d.ts +0 -47
- package/dist/primitives/text-geometry.d.ts.map +0 -1
- package/dist/primitives/text-geometry.js +0 -127
- package/dist/primitives/text-geometry.js.map +0 -1
- package/dist/test-helpers.d.ts +0 -31
- package/dist/test-helpers.d.ts.map +0 -1
- package/dist/test-helpers.js +0 -55
- package/dist/test-helpers.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
- package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cjk-font — CJK character classification and system font loading.
|
|
3
|
+
*
|
|
4
|
+
* Zero-three module: the geometry half of the former `primitives/text/cjk.ts`
|
|
5
|
+
* (`createMixedTextGeometry`) consumers on the editor extension library, whose
|
|
6
|
+
* `cad.text` BREP path still needs the character test and the Local Font Access
|
|
7
|
+
* API loader. Keeping the font half here means the platform `cad.text` BREP path
|
|
8
|
+
* (and the CJK fallback it shares with the mesh path) no longer drags three's
|
|
9
|
+
* `Shape`/`ExtrudeGeometry` into the platform surface.
|
|
10
|
+
*
|
|
11
|
+
* Uses the Local Font Access API (window.queryLocalFonts) to load system CJK
|
|
12
|
+
* fonts; glyph path parsing lives in the consumer.
|
|
13
|
+
*/
|
|
14
|
+
import * as opentype from 'opentype.js';
|
|
15
|
+
/**
|
|
16
|
+
* Check if a character is CJK (CJK Unified Ideographs + extensions).
|
|
17
|
+
*
|
|
18
|
+
* @param ch - the single character to test.
|
|
19
|
+
* @returns true when the character falls in a CJK code point range.
|
|
20
|
+
*/
|
|
21
|
+
export function isCjkChar(ch) {
|
|
22
|
+
const code = ch.charCodeAt(0);
|
|
23
|
+
return ((code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified Ideographs
|
|
24
|
+
(code >= 0x3400 && code <= 0x4DBF) || // CJK Extension A
|
|
25
|
+
(code >= 0x2F800 && code <= 0x2FA1F) || // CJK Compatibility Ideographs Supplement
|
|
26
|
+
(code >= 0x3000 && code <= 0x303F) || // CJK Symbols and Punctuation
|
|
27
|
+
(code >= 0xFF00 && code <= 0xFFEF) // Fullwidth Forms
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if a text string contains any CJK characters.
|
|
32
|
+
*
|
|
33
|
+
* @param text - the text to scan.
|
|
34
|
+
* @returns true when at least one character is CJK.
|
|
35
|
+
*/
|
|
36
|
+
export function containsCjk(text) {
|
|
37
|
+
for (const ch of text) {
|
|
38
|
+
if (isCjkChar(ch))
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load a CJK font from the system using the Local Font Access API.
|
|
45
|
+
* Returns null if unavailable (no permission, unsupported browser, or no CJK font found).
|
|
46
|
+
*
|
|
47
|
+
* @returns a promise resolving to the parsed CJK font and its family name,
|
|
48
|
+
* or null when no usable system CJK font is available.
|
|
49
|
+
*/
|
|
50
|
+
export async function loadSystemCjkFont() {
|
|
51
|
+
const w = typeof window !== 'undefined' ? window : undefined;
|
|
52
|
+
if (!w || typeof w.queryLocalFonts !== 'function') {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const fonts = await w.queryLocalFonts();
|
|
57
|
+
// Find a font that supports CJK
|
|
58
|
+
const cjkFont = fonts.find((f) => f.family.includes('Microsoft YaHei') ||
|
|
59
|
+
f.family.includes('SimSun') ||
|
|
60
|
+
f.family.includes('Noto Sans') ||
|
|
61
|
+
f.family.includes('Noto Serif') ||
|
|
62
|
+
f.fullName.includes('CJK') ||
|
|
63
|
+
f.fullName.includes('SC') ||
|
|
64
|
+
f.fullName.includes('CN') ||
|
|
65
|
+
f.fullName.includes('JP') ||
|
|
66
|
+
f.fullName.includes('KR') ||
|
|
67
|
+
f.family.includes('Source Han') ||
|
|
68
|
+
f.family.includes('思源') ||
|
|
69
|
+
f.family.includes('微软雅黑') ||
|
|
70
|
+
f.family.includes('宋体') ||
|
|
71
|
+
f.family.includes('黑体') ||
|
|
72
|
+
f.family.includes('楷体') ||
|
|
73
|
+
f.family.includes('仿宋'));
|
|
74
|
+
if (!cjkFont)
|
|
75
|
+
return null;
|
|
76
|
+
const fontData = await cjkFont.blob();
|
|
77
|
+
const buf = await fontData.arrayBuffer();
|
|
78
|
+
const font = opentype.parse(buf);
|
|
79
|
+
return { font, family: cjkFont.family };
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// User denied permission or other error
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=cjk-font.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cjk-font.js","sourceRoot":"","sources":["../../../src/primitives/text/cjk-font.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * cjk-font — CJK character classification and system font loading.\n *\n * Zero-three module: the geometry half of the former `primitives/text/cjk.ts`\n * (`createMixedTextGeometry`) consumers on the editor extension library, whose\n * `cad.text` BREP path still needs the character test and the Local Font Access\n * API loader. Keeping the font half here means the platform `cad.text` BREP path\n * (and the CJK fallback it shares with the mesh path) no longer drags three's\n * `Shape`/`ExtrudeGeometry` into the platform surface.\n *\n * Uses the Local Font Access API (window.queryLocalFonts) to load system CJK\n * fonts; glyph path parsing lives in the consumer.\n */\nimport * as opentype from 'opentype.js'\n\n/**\n * Check if a character is CJK (CJK Unified Ideographs + extensions).\n *\n * @param ch - the single character to test.\n * @returns true when the character falls in a CJK code point range.\n */\nexport function isCjkChar(ch: string): boolean {\n const code = ch.charCodeAt(0)\n return (\n (code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified Ideographs\n (code >= 0x3400 && code <= 0x4DBF) || // CJK Extension A\n (code >= 0x2F800 && code <= 0x2FA1F) || // CJK Compatibility Ideographs Supplement\n (code >= 0x3000 && code <= 0x303F) || // CJK Symbols and Punctuation\n (code >= 0xFF00 && code <= 0xFFEF) // Fullwidth Forms\n )\n}\n\n/**\n * Check if a text string contains any CJK characters.\n *\n * @param text - the text to scan.\n * @returns true when at least one character is CJK.\n */\nexport function containsCjk(text: string): boolean {\n for (const ch of text) {\n if (isCjkChar(ch)) return true\n }\n return false\n}\n\n/** Result of loading a system CJK font. */\nexport interface CjkFontResult {\n font: opentype.Font\n family: string\n}\n\n/**\n * Load a CJK font from the system using the Local Font Access API.\n * Returns null if unavailable (no permission, unsupported browser, or no CJK font found).\n *\n * @returns a promise resolving to the parsed CJK font and its family name,\n * or null when no usable system CJK font is available.\n */\nexport async function loadSystemCjkFont(): Promise<CjkFontResult | null> {\n const w = typeof window !== 'undefined' ? (window as any) : undefined\n if (!w || typeof w.queryLocalFonts !== 'function') {\n return null\n }\n\n try {\n const fonts: Array<{ family: string; fullName: string; style: string; postscriptName: string; blob: () => Promise<Blob> }> = await w.queryLocalFonts()\n\n // Find a font that supports CJK\n const cjkFont = fonts.find((f) =>\n f.family.includes('Microsoft YaHei') ||\n f.family.includes('SimSun') ||\n f.family.includes('Noto Sans') ||\n f.family.includes('Noto Serif') ||\n f.fullName.includes('CJK') ||\n f.fullName.includes('SC') ||\n f.fullName.includes('CN') ||\n f.fullName.includes('JP') ||\n f.fullName.includes('KR') ||\n f.family.includes('Source Han') ||\n f.family.includes('思源') ||\n f.family.includes('微软雅黑') ||\n f.family.includes('宋体') ||\n f.family.includes('黑体') ||\n f.family.includes('楷体') ||\n f.family.includes('仿宋')\n )\n\n if (!cjkFont) return null\n\n const fontData = await cjkFont.blob()\n const buf = await fontData.arrayBuffer()\n const font = opentype.parse(buf)\n\n return { font, family: cjkFont.family }\n } catch {\n // User denied permission or other error\n return null\n }\n}\n"]}
|
package/dist/sdk.d.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* sdk — 第三方库开发面(F3 / roadmap V2.2)
|
|
3
3
|
*
|
|
4
4
|
*
|
|
5
|
-
* 第三方库模块(`import * as
|
|
5
|
+
* 第三方库模块(`import * as gear from 'my-lib'` 的目标)用它开发:
|
|
6
6
|
* ```ts
|
|
7
7
|
* import { solid, fromBrep, isShape, keep, getBackends, CONTRACT_VERSION } from '@faicad/faijs/sdk'
|
|
8
8
|
* export const contractVersion = CONTRACT_VERSION
|
|
9
|
-
* export function
|
|
9
|
+
* export function makeSpurGear(params) { ... }
|
|
10
10
|
* ```
|
|
11
11
|
*
|
|
12
12
|
* 本入口**零 heavy 运行时依赖**:只 re-export runtime-state(L0+ 零依赖锚点层)
|
package/dist/sdk.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* sdk — 第三方库开发面(F3 / roadmap V2.2)
|
|
3
3
|
*
|
|
4
4
|
*
|
|
5
|
-
* 第三方库模块(`import * as
|
|
5
|
+
* 第三方库模块(`import * as gear from 'my-lib'` 的目标)用它开发:
|
|
6
6
|
* ```ts
|
|
7
7
|
* import { solid, fromBrep, isShape, keep, getBackends, CONTRACT_VERSION } from '@faicad/faijs/sdk'
|
|
8
8
|
* export const contractVersion = CONTRACT_VERSION
|
|
9
|
-
* export function
|
|
9
|
+
* export function makeSpurGear(params) { ... }
|
|
10
10
|
* ```
|
|
11
11
|
*
|
|
12
12
|
* 本入口**零 heavy 运行时依赖**:只 re-export runtime-state(L0+ 零依赖锚点层)
|
package/dist/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iDAAiD;AAEjD,OAAO,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,OAAO,EACP,UAAU,GACX,MAAM,SAAS,CAAA;AAUhB,oDAAoD;AAEpD,OAAO,EACL,IAAI,EACJ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAUxB,wCAAwC;AACxC,8EAA8E;AAC9E,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGxE,8CAA8C;AAC9C,gFAAgF;AAChF,2DAA2D;AAC3D,gDAAgD;AAChD,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA","sourcesContent":["/**\n * sdk — 第三方库开发面(F3 / roadmap V2.2)\n *\n *\n * 第三方库模块(`import * as
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iDAAiD;AAEjD,OAAO,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,YAAY,EACZ,OAAO,EACP,UAAU,GACX,MAAM,SAAS,CAAA;AAUhB,oDAAoD;AAEpD,OAAO,EACL,IAAI,EACJ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAUxB,wCAAwC;AACxC,8EAA8E;AAC9E,oCAAoC;AAEpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGxE,8CAA8C;AAC9C,gFAAgF;AAChF,2DAA2D;AAC3D,gDAAgD;AAChD,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA","sourcesContent":["/**\n * sdk — 第三方库开发面(F3 / roadmap V2.2)\n *\n *\n * 第三方库模块(`import * as gear from 'my-lib'` 的目标)用它开发:\n * ```ts\n * import { solid, fromBrep, isShape, keep, getBackends, CONTRACT_VERSION } from '@faicad/faijs/sdk'\n * export const contractVersion = CONTRACT_VERSION\n * export function makeSpurGear(params) { ... }\n * ```\n *\n * 本入口**零 heavy 运行时依赖**:只 re-export runtime-state(L0+ 零依赖锚点层)\n * 与 stdlib/shape(构造器 + 身份表,仅 type-import mesh 类型)。\n * 值导入闭包不含 three / occt-wasm / manifold / node:*——由守卫测试保证\n * (dist/sdk.js 静态 import 扫描)。\n *\n * 与主入口的关系:sdk 是主入口的**子集 + 极薄 re-export**,供库作者按需导入;\n * 主入口 / browser / stdlib 不受影响(additive)。\n */\n\n// ── 构造器与身份表(stdlib/shape:类型化构造器 + BREP 句柄登记) ──\n\nexport {\n solid,\n fromBrep,\n compound,\n isShape,\n isCompound,\n hasBrep,\n brepOf,\n nameOfShapes,\n getSlot,\n ensureSlot,\n} from './shape'\nexport type {\n SolidShape,\n CompoundShape,\n ShapeKind,\n StdShape,\n BrepHolder,\n} from './shape'\nexport type { Shape } from './mesh/types'\n\n// ── 运行时状态锚点(零依赖层:keep / backends / 契约版本 / 错误类型) ──\n\nexport {\n keep,\n keepHidden,\n getBackends,\n configureBackends,\n assertContractVersion,\n CONTRACT_VERSION,\n BrepUnsupportedError,\n MeshUnsupportedError,\n} from './runtime-state'\nexport type {\n Backends,\n RuntimeExecutionMode,\n StdlibFn,\n StdlibNamespace,\n ShapeSlot,\n KeepSink,\n} from './runtime-state'\n\n// ── BREP 桥接(B1:第三方库造 BREP 产物的三角化入口) ──\n// handle-bridge 只 import runtime-state / stdlib/shape / type-only mesh/types,\n// 零 heavy 依赖——dist/sdk.js 守卫测试继续通过。\n\nexport { getKernel, meshHandle, fromHandle } from './brep/handle-bridge'\nexport type { MeshHandleOptions } from './brep/handle-bridge'\n\n// ── 双路径实现声明(D 面契约:mesh 必选、BREP 可选;几何函数专用) ──\n// define-op 只依赖 runtime-state / stdlib/shape / handle-bridge / backend-dispatch\n// 与 type-only mesh、brep 类型——零 heavy 依赖,dist/sdk.js 守卫继续通过。\n// 第三方库作者用 defineOp 声明实现集合;dispatchPath 不再直接导出——\n// 分派由 defineOp 包装器内部调用(规则仍是引擎 backend-dispatch.ts 单点)。\n\nexport { defineOp, assertLibConforms, hasDualOp, DUAL_OP_META } from './define-op'\nexport type {\n DualOpMeta,\n DualOpOptions,\n DualOpImpls,\n MeshImpl,\n BrepImpl,\n MeshData,\n BrepResult,\n} from './define-op'\nexport type { BrepCapabilityName } from './cad-runtime/backend-dispatch'\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* symbol-table — public subpath for the standard-library symbol table.
|
|
3
|
+
*
|
|
4
|
+
* The table itself lives in `lang/symbol-table.ts` (generated file plus the P5
|
|
5
|
+
* host-extension registry). This root-level module exists so library authors can
|
|
6
|
+
* reach it environment-agnostically — `@faicad/faijs/symbol-table` has no
|
|
7
|
+
* three / occt / node dependency, so a browser or weapp host may import it
|
|
8
|
+
* without touching the node entry.
|
|
9
|
+
*
|
|
10
|
+
* Consumers: hosts that install a library namespace (`registerSymbolTableEntries`)
|
|
11
|
+
* and tooling that resolves `cad.<name>` statically.
|
|
12
|
+
*/
|
|
13
|
+
export { SYMBOL_TABLE, getFunctionSymbol, registerSymbolTableEntries, unregisterSymbolTableEntries, symbolTableNames, } from './lang/symbol-table.js';
|
|
14
|
+
export type { SymbolTable, FunctionSymbol } from './lang/symbol-table.js';
|
|
15
|
+
//# sourceMappingURL=symbol-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../src/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,YAAY,EAAE,iBAAiB,EAC/B,0BAA0B,EAAE,4BAA4B,EAAE,gBAAgB,GAC3E,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* symbol-table — public subpath for the standard-library symbol table.
|
|
3
|
+
*
|
|
4
|
+
* The table itself lives in `lang/symbol-table.ts` (generated file plus the P5
|
|
5
|
+
* host-extension registry). This root-level module exists so library authors can
|
|
6
|
+
* reach it environment-agnostically — `@faicad/faijs/symbol-table` has no
|
|
7
|
+
* three / occt / node dependency, so a browser or weapp host may import it
|
|
8
|
+
* without touching the node entry.
|
|
9
|
+
*
|
|
10
|
+
* Consumers: hosts that install a library namespace (`registerSymbolTableEntries`)
|
|
11
|
+
* and tooling that resolves `cad.<name>` statically.
|
|
12
|
+
*/
|
|
13
|
+
export { SYMBOL_TABLE, getFunctionSymbol, registerSymbolTableEntries, unregisterSymbolTableEntries, symbolTableNames, } from './lang/symbol-table.js';
|
|
14
|
+
//# sourceMappingURL=symbol-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-table.js","sourceRoot":"","sources":["../src/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,YAAY,EAAE,iBAAiB,EAC/B,0BAA0B,EAAE,4BAA4B,EAAE,gBAAgB,GAC3E,MAAM,qBAAqB,CAAA","sourcesContent":["/**\n * symbol-table — public subpath for the standard-library symbol table.\n *\n * The table itself lives in `lang/symbol-table.ts` (generated file plus the P5\n * host-extension registry). This root-level module exists so library authors can\n * reach it environment-agnostically — `@faicad/faijs/symbol-table` has no\n * three / occt / node dependency, so a browser or weapp host may import it\n * without touching the node entry.\n *\n * Consumers: hosts that install a library namespace (`registerSymbolTableEntries`)\n * and tooling that resolves `cad.<name>` statically.\n */\nexport {\n SYMBOL_TABLE, getFunctionSymbol,\n registerSymbolTableEntries, unregisterSymbolTableEntries, symbolTableNames,\n} from './lang/symbol-table'\nexport type { SymbolTable, FunctionSymbol } from './lang/symbol-table'\n"]}
|
|
@@ -52,7 +52,7 @@ export function resolveViaLineage(graph, origin, roleLine, targetPart, deps) {
|
|
|
52
52
|
const startEvo = start.evolution && !('modified' in start.evolution) ? start.evolution : undefined;
|
|
53
53
|
chain.push({ stmt: origin, part: rootPart, evolution: startEvo });
|
|
54
54
|
let currentPart = rootPart;
|
|
55
|
-
while (
|
|
55
|
+
while (true) {
|
|
56
56
|
if (currentPart === targetPart)
|
|
57
57
|
break;
|
|
58
58
|
const consumer = graph.nodeConsuming(currentPart);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineage-resolve.js","sourceRoot":"","sources":["../../../src/topology/naming/lineage-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA2B3D;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,UAAoB,EACpB,IAAwB;IAExB,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAEzE,kDAAkD;IAClD,wCAAwC;IACxC,mDAAmD;IACnD,MAAM,KAAK,GAA0E,EAAE,CAAA;IACvF,CAAC;QACC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,SAAmC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7H,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QACjE,IAAI,WAAW,GAAa,QAAQ,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YAC9C,IAAI,WAAW,KAAK,UAAU;gBAAE,MAAK;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAA;YAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,SAAmC,CAAC,CAAC,CAAC,SAAS,CAAA;YACjI,4CAA4C;YAC5C,8CAA8C;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,CAAA;YACvF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;YAChE,WAAW,GAAG,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACnE,2DAA2D;IAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/D,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChE,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAC3C,IAAI,QAAQ,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAA;QAC3F,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA,CAAC,cAAc;IACvC,CAAC;IAED,2CAA2C;IAC3C,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,oEAAoE;YACpE,wCAAwC;YACxC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAA;QACtE,CAAC;QACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,oCAAoC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAA;QACjG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC;AAED,0DAA0D;AAC1D,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,CAAA","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"]}
|
|
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 (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"]}
|
|
@@ -65,4 +65,9 @@ export declare function syncRegistryFromGlobal(): void;
|
|
|
65
65
|
export declare function syncRegistryToGlobal(): void;
|
|
66
66
|
/** Current tessellation quality tier. */
|
|
67
67
|
export declare function currentQualityTier(): string;
|
|
68
|
+
/**
|
|
69
|
+
* Test-only: reset the kernel registry (clear kernels, unfreeze) so a host
|
|
70
|
+
* re-assembly in tests can register a different engine. Never called in prod.
|
|
71
|
+
*/
|
|
72
|
+
export declare function __resetKernelRegistryForTests(): void;
|
|
68
73
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vendored/brepjs/kernel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE1E,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC;AAqD1E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CAcpD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,kBAAkB,CAM3E;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAErE;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AACD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vendored/brepjs/kernel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE1E,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC;AAqD1E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CAcpD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,kBAAkB,CAM3E;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAErE;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AACD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAMpD"}
|
|
@@ -147,4 +147,15 @@ export function syncRegistryToGlobal() {
|
|
|
147
147
|
export function currentQualityTier() {
|
|
148
148
|
return currentQuality();
|
|
149
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Test-only: reset the kernel registry (clear kernels, unfreeze) so a host
|
|
152
|
+
* re-assembly in tests can register a different engine. Never called in prod.
|
|
153
|
+
*/
|
|
154
|
+
export function __resetKernelRegistryForTests() {
|
|
155
|
+
_kernels.clear();
|
|
156
|
+
_defaultKernelId = null;
|
|
157
|
+
_cachedDefault = null;
|
|
158
|
+
_frozen = false;
|
|
159
|
+
syncToGlobal();
|
|
160
|
+
}
|
|
150
161
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vendored/brepjs/kernel/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Kernel registry facade — vendored port (layer L0 contact surface / D10).\n *\n * brepjs `src/kernel/index.ts`, trimmed to the faijs-compatible surface\n * (see docs/plans/2026-09-01-layered-api-architecture.md §D10 / §D8):\n *\n * - `getKernel()` is a **frozen read-only reader**: it is bound once at\n * assembly time and never switches at runtime. The runtime-switching\n * `withKernel` and the three-tier `init()` WASM fallback are both cut\n * (D10 — faijs already runs the same philosophy in\n * `brep/engine/registry.ts`'s `freezeEngineRegistries()`).\n * - The single occt-wasm module instance is injected through the faijs\n * `initOcctWasm` chain (D10): the faijs L3 bridge builds an\n * {@link OcctWasmAdapter} over that same instance and registers it here.\n * A second registration after `freezeKernels()` throws.\n *\n * Until an adapter is registered, `getKernel()` throws the same\n * \"not initialized\" error brepjs provides.\n */\n\nimport type { KernelAdapter } from './types.js';\nimport type { Kernel2DCapability } from './kernel2dTypes.js';\nimport type { KernelCapabilities } from './capabilities.js';\nimport { supportsKernel2D } from './kernel2dTypes.js';\nimport { currentQuality } from './quality.js';\nimport { supportsProjection, supportsConstraintSketch } from './types.js';\n// Re-export the L0 type surface used by ported L1/L2 code (identically to brepjs).\nexport type {\n KernelAdapter,\n KernelMeshResult,\n DistanceResult,\n KernelInstance,\n BooleanOptions,\n ShapeType,\n SurfaceType,\n ShapeOrientation,\n MeshOptions,\n KernelShape,\n KernelType,\n StepAssemblyPart,\n ShapeEvolution,\n OperationResult,\n} from './types.js';\nexport type {\n ProjectionCapability,\n ConstraintSketchCapability,\n} from './types.js';\nexport type {\n KernelBooleanOps,\n KernelBuilderOps,\n KernelCore,\n KernelCurveOps,\n KernelEvolutionOps,\n KernelIOOps,\n KernelMeasureOps,\n KernelMeshOps,\n KernelModifierOps,\n KernelPrimitiveOps,\n KernelRepairOps,\n KernelSurfaceOps,\n KernelSweepOps,\n KernelTopologyOps,\n KernelTransformOps,\n} from './interfaces/index.js';\nexport type { Kernel2DCapability } from './kernel2dTypes.js';\nexport type { KernelCapabilities } from './capabilities.js';\nexport { supportsKernel2D, supportsProjection, supportsConstraintSketch };\n\n// Kernel registry lives on globalThis (same pattern as runtime-state\n// '__FAICAD_FAIJS_RUNTIME__'): a CDN-bundled faijs subpath (e.g.\n// `/npm/@faicad/faijs@x/brepjs-compat/+esm`) is a SEPARATE module instance from\n// the host bundle, so module-level `const _kernels` would give the CDN copy an\n// empty registry even though the host already bound occt-wasm — every BREP op\n// then fails with \"kernel not initialized\". Sharing via globalThis keeps one\n// registry across all faijs instances (D10 single-instance holds: all copies\n// see the same occt-wasm adapter).\nconst GLOBAL_KEY = '__FAICAD_FAIJS_KERNEL_REGISTRY__';\ntype KernelRegistryState = {\n stateVersion: 1;\n kernels: Map<string, KernelAdapter>;\n defaultKernelId: string | null;\n cachedDefault: KernelAdapter | null;\n frozen: boolean;\n};\nfunction registryState(): KernelRegistryState {\n const g = globalThis as unknown as Record<string, KernelRegistryState | undefined>;\n let st = g[GLOBAL_KEY];\n if (!st) {\n st = { stateVersion: 1, kernels: new Map<string, KernelAdapter>(), defaultKernelId: null, cachedDefault: null, frozen: false };\n g[GLOBAL_KEY] = st;\n } else if (st.stateVersion !== 1) {\n throw new Error(`[faijs] kernel registry state version mismatch: loaded=${st.stateVersion}, expected=1`);\n }\n return st;\n}\nconst _kernels = new Map<string, KernelAdapter>();\nlet _defaultKernelId: string | null = null;\nlet _cachedDefault: KernelAdapter | null = null;\nlet _frozen = false;\n\n// Sync pass-through accessors over the global registry state. Every exported\n// function calls syncFromGlobal() first so a host-bundle bind is visible to a\n// CDN subpath instance and vice versa; mutations call syncToGlobal().\nfunction syncFromGlobal(): void {\n const st = registryState();\n _kernels.clear();\n for (const [k, v] of st.kernels) _kernels.set(k, v);\n _defaultKernelId = st.defaultKernelId;\n _cachedDefault = st.cachedDefault;\n _frozen = st.frozen;\n}\nfunction syncToGlobal(): void {\n const st = registryState();\n st.kernels = new Map(_kernels);\n st.defaultKernelId = _defaultKernelId;\n st.cachedDefault = _cachedDefault;\n st.frozen = _frozen;\n}\n\n/**\n * Freeze the kernel registry (D10 冻结,同 `freezeEngineRegistries` 时机)。\n * Faijs host calls this at the end of assembly; afterwards any\n * `registerKernel` throws.\n */\nexport function freezeKernels(): void {\n syncFromGlobal();\n _frozen = true;\n syncToGlobal();\n}\n\n/**\n * Register a kernel adapter (DIO injection: L3 bridge registers exactly one\n * 'occt-wasm' adapter over the faijs single wasm instance).\n * @throws If the registry is frozen (post-assembly, D10).\n */\nexport function registerKernel(id: string, adapter: KernelAdapter): void {\n syncFromGlobal();\n if (_frozen) {\n throw new Error(\n `faijs kernel registry frozen — cannot register '${id}' after assembly (D10)`\n );\n }\n _kernels.set(id, adapter);\n if (_defaultKernelId === null) _defaultKernelId = id;\n if (id === _defaultKernelId) _cachedDefault = adapter;\n syncToGlobal();\n}\n\n/**\n * Return a kernel adapter by id, or the default kernel if no id is given.\n *\n * @throws If no kernel has been registered via {@link registerKernel}\n * (D10: bound by the faijs host at assembly, then frozen).\n */\nexport function getKernel(id?: string): KernelAdapter {\n syncFromGlobal();\n if (!id && _cachedDefault) return _cachedDefault;\n const targetId = id ?? _defaultKernelId;\n if (!targetId) {\n throw new Error(\n 'faijs kernel not initialized. The faijs host must bind occt-wasm before use (D10).'\n );\n }\n const kernel = _kernels.get(targetId);\n if (!kernel) {\n throw new Error(`faijs: kernel '${targetId}' is not registered.`);\n }\n return kernel;\n}\n\n/**\n * Return the default kernel narrowed to {@link Kernel2DCapability}.\n * @throws If the kernel does not support 2D operations.\n */\nexport function getKernel2D(id?: string): KernelAdapter & Kernel2DCapability {\n const kernel = getKernel(id);\n if (!supportsKernel2D(kernel)) {\n throw new Error('faijs: current kernel does not support 2D operations.');\n }\n return kernel;\n}\n\n/** Capabilities of the active kernel (defaults to the active). */\nexport function getKernelCapabilities(id?: string): KernelCapabilities {\n return getKernel(id).capabilities;\n}\n\n/** Return the id of the currently active default kernel, or `null` if none. */\nexport function getActiveKernelId(): string | null {\n syncFromGlobal();\n return _defaultKernelId;\n}\n\n/**\n * Cross-instance sync hooks (globalThis registry singleton): exported for the\n * L3 bridge (`api/occt-kernel-bridge.ts`) so a CDN-bundled faijs instance with\n * its own module-level `_bound = false` can observe a host-bundle binding.\n */\nexport function syncRegistryFromGlobal(): void {\n syncFromGlobal();\n}\nexport function syncRegistryToGlobal(): void {\n syncToGlobal();\n}\n\n/** Current tessellation quality tier. */\nexport function currentQualityTier(): string {\n return currentQuality();\n}"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vendored/brepjs/kernel/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Kernel registry facade — vendored port (layer L0 contact surface / D10).\n *\n * brepjs `src/kernel/index.ts`, trimmed to the faijs-compatible surface\n * (see docs/plans/2026-09-01-layered-api-architecture.md §D10 / §D8):\n *\n * - `getKernel()` is a **frozen read-only reader**: it is bound once at\n * assembly time and never switches at runtime. The runtime-switching\n * `withKernel` and the three-tier `init()` WASM fallback are both cut\n * (D10 — faijs already runs the same philosophy in\n * `brep/engine/registry.ts`'s `freezeEngineRegistries()`).\n * - The single occt-wasm module instance is injected through the faijs\n * `initOcctWasm` chain (D10): the faijs L3 bridge builds an\n * {@link OcctWasmAdapter} over that same instance and registers it here.\n * A second registration after `freezeKernels()` throws.\n *\n * Until an adapter is registered, `getKernel()` throws the same\n * \"not initialized\" error brepjs provides.\n */\n\nimport type { KernelAdapter } from './types.js';\nimport type { Kernel2DCapability } from './kernel2dTypes.js';\nimport type { KernelCapabilities } from './capabilities.js';\nimport { supportsKernel2D } from './kernel2dTypes.js';\nimport { currentQuality } from './quality.js';\nimport { supportsProjection, supportsConstraintSketch } from './types.js';\n// Re-export the L0 type surface used by ported L1/L2 code (identically to brepjs).\nexport type {\n KernelAdapter,\n KernelMeshResult,\n DistanceResult,\n KernelInstance,\n BooleanOptions,\n ShapeType,\n SurfaceType,\n ShapeOrientation,\n MeshOptions,\n KernelShape,\n KernelType,\n StepAssemblyPart,\n ShapeEvolution,\n OperationResult,\n} from './types.js';\nexport type {\n ProjectionCapability,\n ConstraintSketchCapability,\n} from './types.js';\nexport type {\n KernelBooleanOps,\n KernelBuilderOps,\n KernelCore,\n KernelCurveOps,\n KernelEvolutionOps,\n KernelIOOps,\n KernelMeasureOps,\n KernelMeshOps,\n KernelModifierOps,\n KernelPrimitiveOps,\n KernelRepairOps,\n KernelSurfaceOps,\n KernelSweepOps,\n KernelTopologyOps,\n KernelTransformOps,\n} from './interfaces/index.js';\nexport type { Kernel2DCapability } from './kernel2dTypes.js';\nexport type { KernelCapabilities } from './capabilities.js';\nexport { supportsKernel2D, supportsProjection, supportsConstraintSketch };\n\n// Kernel registry lives on globalThis (same pattern as runtime-state\n// '__FAICAD_FAIJS_RUNTIME__'): a CDN-bundled faijs subpath (e.g.\n// `/npm/@faicad/faijs@x/brepjs-compat/+esm`) is a SEPARATE module instance from\n// the host bundle, so module-level `const _kernels` would give the CDN copy an\n// empty registry even though the host already bound occt-wasm — every BREP op\n// then fails with \"kernel not initialized\". Sharing via globalThis keeps one\n// registry across all faijs instances (D10 single-instance holds: all copies\n// see the same occt-wasm adapter).\nconst GLOBAL_KEY = '__FAICAD_FAIJS_KERNEL_REGISTRY__';\ntype KernelRegistryState = {\n stateVersion: 1;\n kernels: Map<string, KernelAdapter>;\n defaultKernelId: string | null;\n cachedDefault: KernelAdapter | null;\n frozen: boolean;\n};\nfunction registryState(): KernelRegistryState {\n const g = globalThis as unknown as Record<string, KernelRegistryState | undefined>;\n let st = g[GLOBAL_KEY];\n if (!st) {\n st = { stateVersion: 1, kernels: new Map<string, KernelAdapter>(), defaultKernelId: null, cachedDefault: null, frozen: false };\n g[GLOBAL_KEY] = st;\n } else if (st.stateVersion !== 1) {\n throw new Error(`[faijs] kernel registry state version mismatch: loaded=${st.stateVersion}, expected=1`);\n }\n return st;\n}\nconst _kernels = new Map<string, KernelAdapter>();\nlet _defaultKernelId: string | null = null;\nlet _cachedDefault: KernelAdapter | null = null;\nlet _frozen = false;\n\n// Sync pass-through accessors over the global registry state. Every exported\n// function calls syncFromGlobal() first so a host-bundle bind is visible to a\n// CDN subpath instance and vice versa; mutations call syncToGlobal().\nfunction syncFromGlobal(): void {\n const st = registryState();\n _kernels.clear();\n for (const [k, v] of st.kernels) _kernels.set(k, v);\n _defaultKernelId = st.defaultKernelId;\n _cachedDefault = st.cachedDefault;\n _frozen = st.frozen;\n}\nfunction syncToGlobal(): void {\n const st = registryState();\n st.kernels = new Map(_kernels);\n st.defaultKernelId = _defaultKernelId;\n st.cachedDefault = _cachedDefault;\n st.frozen = _frozen;\n}\n\n/**\n * Freeze the kernel registry (D10 冻结,同 `freezeEngineRegistries` 时机)。\n * Faijs host calls this at the end of assembly; afterwards any\n * `registerKernel` throws.\n */\nexport function freezeKernels(): void {\n syncFromGlobal();\n _frozen = true;\n syncToGlobal();\n}\n\n/**\n * Register a kernel adapter (DIO injection: L3 bridge registers exactly one\n * 'occt-wasm' adapter over the faijs single wasm instance).\n * @throws If the registry is frozen (post-assembly, D10).\n */\nexport function registerKernel(id: string, adapter: KernelAdapter): void {\n syncFromGlobal();\n if (_frozen) {\n throw new Error(\n `faijs kernel registry frozen — cannot register '${id}' after assembly (D10)`\n );\n }\n _kernels.set(id, adapter);\n if (_defaultKernelId === null) _defaultKernelId = id;\n if (id === _defaultKernelId) _cachedDefault = adapter;\n syncToGlobal();\n}\n\n/**\n * Return a kernel adapter by id, or the default kernel if no id is given.\n *\n * @throws If no kernel has been registered via {@link registerKernel}\n * (D10: bound by the faijs host at assembly, then frozen).\n */\nexport function getKernel(id?: string): KernelAdapter {\n syncFromGlobal();\n if (!id && _cachedDefault) return _cachedDefault;\n const targetId = id ?? _defaultKernelId;\n if (!targetId) {\n throw new Error(\n 'faijs kernel not initialized. The faijs host must bind occt-wasm before use (D10).'\n );\n }\n const kernel = _kernels.get(targetId);\n if (!kernel) {\n throw new Error(`faijs: kernel '${targetId}' is not registered.`);\n }\n return kernel;\n}\n\n/**\n * Return the default kernel narrowed to {@link Kernel2DCapability}.\n * @throws If the kernel does not support 2D operations.\n */\nexport function getKernel2D(id?: string): KernelAdapter & Kernel2DCapability {\n const kernel = getKernel(id);\n if (!supportsKernel2D(kernel)) {\n throw new Error('faijs: current kernel does not support 2D operations.');\n }\n return kernel;\n}\n\n/** Capabilities of the active kernel (defaults to the active). */\nexport function getKernelCapabilities(id?: string): KernelCapabilities {\n return getKernel(id).capabilities;\n}\n\n/** Return the id of the currently active default kernel, or `null` if none. */\nexport function getActiveKernelId(): string | null {\n syncFromGlobal();\n return _defaultKernelId;\n}\n\n/**\n * Cross-instance sync hooks (globalThis registry singleton): exported for the\n * L3 bridge (`api/occt-kernel-bridge.ts`) so a CDN-bundled faijs instance with\n * its own module-level `_bound = false` can observe a host-bundle binding.\n */\nexport function syncRegistryFromGlobal(): void {\n syncFromGlobal();\n}\nexport function syncRegistryToGlobal(): void {\n syncToGlobal();\n}\n\n/** Current tessellation quality tier. */\nexport function currentQualityTier(): string {\n return currentQuality();\n}\n\n/**\n * Test-only: reset the kernel registry (clear kernels, unfreeze) so a host\n * re-assembly in tests can register a different engine. Never called in prod.\n */\nexport function __resetKernelRegistryForTests(): void {\n _kernels.clear();\n _defaultKernelId = null;\n _cachedDefault = null;\n _frozen = false;\n syncToGlobal();\n}"]}
|
package/dist/weapp.d.ts
CHANGED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
* 导出面受 entry-boundary.test.ts 白名单守卫约束——新增导出必须同步更新白名单。
|
|
12
12
|
* web/desktop 宿主禁止 import 本入口(brepkit 是 weapp 专属 BREP 引擎)。
|
|
13
13
|
*/
|
|
14
|
+
export * from './env-agnostic.js';
|
|
14
15
|
export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
|
|
15
16
|
export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit.js';
|
|
16
17
|
export { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries } from './brep/engine/registry.js';
|
|
17
18
|
export type { BrepEngine, BrepEngineProvider } from './brep/engine/registry.js';
|
|
18
19
|
export type { BrepEngineApi } from './brep/engine/primitives.js';
|
|
19
|
-
export { createRuntime } from './cad-runtime/
|
|
20
|
-
export type { CadRuntime } from './cad-runtime/
|
|
21
|
-
export { createApiNamespace } from './api/api-namespace.js';
|
|
20
|
+
export { createRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
|
21
|
+
export type { CadRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
|
22
22
|
//# sourceMappingURL=weapp.d.ts.map
|
package/dist/weapp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weapp.d.ts","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"weapp.d.ts","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAG1G,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAG9H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACxI,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAI7D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA"}
|
package/dist/weapp.js
CHANGED
|
@@ -11,13 +11,16 @@
|
|
|
11
11
|
* 导出面受 entry-boundary.test.ts 白名单守卫约束——新增导出必须同步更新白名单。
|
|
12
12
|
* web/desktop 宿主禁止 import 本入口(brepkit 是 weapp 专属 BREP 引擎)。
|
|
13
13
|
*/
|
|
14
|
+
// 共享面(env-agnostic:identity + runtime-state + lang/*)——三处 umbrella 统一
|
|
15
|
+
// re-export(§9.1),weapp worker 由此获得 analyzeCode 等语言层符号。
|
|
16
|
+
export * from './env-agnostic.js';
|
|
14
17
|
// brepkit wasm 装载(weapp 专属注入点;宿主装配期调用一次 setBrepkitWasmInitFn)
|
|
15
18
|
export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
|
|
16
19
|
// brepkit BREP 引擎注册(weapp 只注册 brepkit,不注册 occt)
|
|
17
20
|
export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit.js';
|
|
18
21
|
// BREP 引擎注册表(环境无关;ensureBrepChain 见已注册引擎即跳过 OCCT)
|
|
19
22
|
export { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries } from './brep/engine/registry.js';
|
|
20
|
-
// cad-runtime
|
|
21
|
-
|
|
22
|
-
export {
|
|
23
|
+
// cad-runtime(环境无关执行栈):createRuntime 为 with-cad 变体(§9.2),与
|
|
24
|
+
// browser/node 入口同口径——自带 cad 命名空间注册,宿主无需手工补注册。
|
|
25
|
+
export { createRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
|
23
26
|
//# sourceMappingURL=weapp.js.map
|
package/dist/weapp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weapp.js","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,8DAA8D;AAC9D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAE1G,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAE9H,kDAAkD;AAClD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAIxI,
|
|
1
|
+
{"version":3,"file":"weapp.js","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sEAAsE;AACtE,wDAAwD;AACxD,cAAc,gBAAgB,CAAA;AAE9B,8DAA8D;AAC9D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAE1G,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAE9H,kDAAkD;AAClD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAIxI,2DAA2D;AAC3D,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA","sourcesContent":["/**\n * @faicad/faijs-core/weapp — weapp 专用宿主入口(docs/plans/2026-09-20-weapp-host-entry-design.md)\n *\n * 小程序(无 OCCT 环境)宿主的最小导出面:brepkit wasm 装载注入点 + brepkit BREP\n * 引擎注册 + 环境无关执行栈。全部为 re-export,零新实现。\n *\n * 为什么独立成入口:browser umbrella 曾 re-export brepkit 符号,导致 web 端模块图\n * 包含 brepkitWasm.js(其 node 分支 import('brepkit-wasm') 被 vite 静态解析而报错)。\n * 宿主边界必须由静态入口声明,而不是靠构建脚本事后 stub 剔除。\n *\n * 导出面受 entry-boundary.test.ts 白名单守卫约束——新增导出必须同步更新白名单。\n * web/desktop 宿主禁止 import 本入口(brepkit 是 weapp 专属 BREP 引擎)。\n */\n\n// 共享面(env-agnostic:identity + runtime-state + lang/*)——三处 umbrella 统一\n// re-export(§9.1),weapp worker 由此获得 analyzeCode 等语言层符号。\nexport * from './env-agnostic'\n\n// brepkit wasm 装载(weapp 专属注入点;宿主装配期调用一次 setBrepkitWasmInitFn)\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\n\n// brepkit BREP 引擎注册(weapp 只注册 brepkit,不注册 occt)\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\n\n// BREP 引擎注册表(环境无关;ensureBrepChain 见已注册引擎即跳过 OCCT)\nexport { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries } from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider } from './brep/engine/registry'\nexport type { BrepEngineApi } from './brep/engine/primitives'\n\n// cad-runtime(环境无关执行栈):createRuntime 为 with-cad 变体(§9.2),与\n// browser/node 入口同口径——自带 cad 命名空间注册,宿主无需手工补注册。\nexport { createRuntime } from './cad-runtime/createRuntimeWithCad'\nexport type { CadRuntime } from './cad-runtime/createRuntimeWithCad'\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faicad/faijs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
"types": "./dist/sdk.d.ts",
|
|
38
38
|
"default": "./dist/sdk.js"
|
|
39
39
|
},
|
|
40
|
+
"./symbol-table": {
|
|
41
|
+
"types": "./dist/symbol-table.d.ts",
|
|
42
|
+
"default": "./dist/symbol-table.js"
|
|
43
|
+
},
|
|
40
44
|
"./csg": {
|
|
41
45
|
"types": "./dist/csg.d.ts",
|
|
42
46
|
"default": "./dist/csg.js"
|
|
@@ -77,14 +81,6 @@
|
|
|
77
81
|
"types": "./dist/shape.d.ts",
|
|
78
82
|
"default": "./dist/shape.js"
|
|
79
83
|
},
|
|
80
|
-
"./faqts": {
|
|
81
|
-
"types": "./dist/faqts/index.d.ts",
|
|
82
|
-
"default": "./dist/faqts/index.js"
|
|
83
|
-
},
|
|
84
|
-
"./faqts/*": {
|
|
85
|
-
"types": "./dist/faqts/*.d.ts",
|
|
86
|
-
"default": "./dist/faqts/*.js"
|
|
87
|
-
},
|
|
88
84
|
"./module-resolver": {
|
|
89
85
|
"types": "./dist/module-resolver/index.d.ts",
|
|
90
86
|
"default": "./dist/module-resolver/index.js"
|
|
@@ -146,14 +142,18 @@
|
|
|
146
142
|
"fflate": "^0.8.2",
|
|
147
143
|
"flatbush": "^4.6.2",
|
|
148
144
|
"manifold-3d": "^3.5.1",
|
|
149
|
-
"opentype.js": "^1.3.4"
|
|
150
|
-
"sucrase": "^3.35.1",
|
|
151
|
-
"three": "^0.184.0"
|
|
145
|
+
"opentype.js": "^1.3.4"
|
|
152
146
|
},
|
|
153
147
|
"peerDependencies": {
|
|
154
|
-
"occt-wasm": "^3.8.4"
|
|
148
|
+
"occt-wasm": "^3.8.4",
|
|
149
|
+
"three": "^0.162.0 || ^0.184.0"
|
|
155
150
|
},
|
|
156
151
|
"devDependencies": {
|
|
152
|
+
"@types/three": "^0.184.1",
|
|
153
|
+
"brepkit-wasm": "^3.4.18",
|
|
154
|
+
"sucrase": "^3.35.1",
|
|
155
|
+
"three": "^0.184.0",
|
|
156
|
+
"three-162": "npm:three@^0.162.0",
|
|
157
157
|
"typescript": "*",
|
|
158
158
|
"vitest": "*"
|
|
159
159
|
},
|
|
@@ -162,6 +162,8 @@
|
|
|
162
162
|
"typecheck": "tsc --noEmit",
|
|
163
163
|
"test": "vitest run",
|
|
164
164
|
"lint": "eslint src",
|
|
165
|
-
"fcstd:convert": "tsx src/fcstd/cli.ts"
|
|
165
|
+
"fcstd:convert": "tsx src/fcstd/cli.ts",
|
|
166
|
+
"gen:capability-map": "tsx scripts/gen-capability-map.ts",
|
|
167
|
+
"gen:brepkit-surface": "tsx scripts/gen-brepkit-surface.ts"
|
|
166
168
|
}
|
|
167
169
|
}
|