@faicad/faijs 0.13.2 → 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.map +1 -1
- package/dist/api/edge-ref.js +7 -4
- 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.map +1 -1
- package/dist/api/internal/compat-op.js +2 -1
- 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/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 +8 -1
- package/dist/fcstd/attachment.d.ts.map +1 -1
- package/dist/fcstd/attachment.js +7 -1
- package/dist/fcstd/attachment.js.map +1 -1
- package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
- package/dist/fcstd/build-fai-zip.js +12 -7
- package/dist/fcstd/build-fai-zip.js.map +1 -1
- package/dist/fcstd/codegen.d.ts +10 -1
- package/dist/fcstd/codegen.d.ts.map +1 -1
- package/dist/fcstd/codegen.js +150 -48
- package/dist/fcstd/codegen.js.map +1 -1
- package/dist/fcstd/contour.d.ts.map +1 -1
- package/dist/fcstd/contour.js +23 -24
- package/dist/fcstd/contour.js.map +1 -1
- package/dist/fcstd/convert.d.ts +2 -18
- package/dist/fcstd/convert.d.ts.map +1 -1
- package/dist/fcstd/convert.js +35 -53
- package/dist/fcstd/convert.js.map +1 -1
- package/dist/fcstd/external-geo.d.ts +12 -1
- package/dist/fcstd/external-geo.d.ts.map +1 -1
- package/dist/fcstd/external-geo.js +15 -1
- package/dist/fcstd/external-geo.js.map +1 -1
- package/dist/fcstd/feature-translate.d.ts +21 -1
- package/dist/fcstd/feature-translate.d.ts.map +1 -1
- package/dist/fcstd/feature-translate.js +108 -6
- package/dist/fcstd/feature-translate.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/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 +1 -1
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"determinism-scanner.js","sourceRoot":"","sources":["../../src/lang/determinism-scanner.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * determinism-scanner — .fai.js determinism gate (B-tier, conservative taint)\n *\n * Decides statically whether any non-deterministic value (`Math.random`,\n * `Date.now` / `new Date`, `crypto.*`, `performance.now`) flows into geometry\n * generation. Conservative policy: anything the analysis cannot prove safe is a\n * violation — \"when in doubt, reject\".\n *\n * Model:\n * - **sources** produce tainted values.\n * - **propagation** moves taint through arithmetic, member access, assignment,\n * arrays/objects, calls, and implicit control flow.\n * - **sinks** are geometry-generating call sites: members of the `cad`\n * namespace (and any library namespace), named library callees, and unknown\n * function calls (conservative). `console.*` and the pure built-ins are safe\n * containers — taint may pass through them but does not, by itself, violate.\n *\n * This gate is entry prevention; exit equivalence is checked separately by\n * cross-kernel parity tests (docs/reproducibility-contract.md §5).\n */\n\nimport { parse as acornParse } from 'acorn'\n\n// ── types ──\n\n/** Determinism gate policy for execution-time scanning. */\nexport type DeterminismPolicy = 'off' | 'warn' | 'error'\n\n/** Why a value is non-deterministic (a source). */\nexport type DeterminismSource =\n | 'Math.random'\n | 'Date'\n | 'crypto'\n | 'performance.now'\n | 'getRandomValues'\n\n/** A single conservatively-flagged violation. */\nexport interface DeterminismViolation {\n /** 1-based line of the offending sink / flow. */\n lineNo: number\n /** The non-deterministic source kind that reached geometry. */\n source: DeterminismSource\n /** Human-readable message (for tooling / self-correction). */\n message: string\n}\n\n/** Scan options. */\nexport interface DeterminismScanOptions {\n /** Default geometry namespace name (default `'cad'`). */\n defaultNs?: string\n /**\n * Extra geometry namespace binding names (`import * as sheet from ...` →\n * `'sheet'`). Member calls on these are geometry sinks.\n */\n extraNamespaces?: string[]\n /**\n * Extra named callees treated as geometry functions (`import { gear } from\n * ...` → `'gear'`). Direct calls to these are geometry sinks.\n */\n extraCallees?: string[]\n}\n\n/** Scan result. */\nexport interface DeterminismScanResult {\n /** True iff `violations` is empty. */\n ok: boolean\n violations: DeterminismViolation[]\n}\n\n// ── rule tables ──\n\n/** Containers (identifier → member) whose member access is a non-deterministic source. */\nconst SOURCE_MEMBERS: Record<string, Set<string>> = {\n Math: new Set(['random']),\n Date: new Set(['now', 'parse', 'UTC']),\n performance: new Set(['now']),\n crypto: new Set(['getRandomValues', 'randomUUID']),\n}\n\n/**\n * Identifiers that are themselves non-deterministic values (a bare `Date` or\n * `crypto` reference is a source — `new Date()` / `crypto.subtle` alias paths).\n */\nconst SOURCE_IDENTS = new Set<string>(['Date', 'crypto', 'getRandomValues', 'performance'])\n\n/**\n * Safe containers: member calls on these neither violate nor introduce taint;\n * taint only propagates through their arguments (pure/observable-only globals).\n */\nconst SAFE_CONTAINERS = new Set<string>([\n 'console', 'Math', 'JSON', 'Number', 'String', 'Boolean', 'Object', 'Array',\n 'Map', 'Set', 'Symbol', 'RegExp', 'Promise', 'Error', 'Intl', 'Reflect',\n])\n\n/** Safe top-level functions (pure/known, not geometry). */\nconst SAFE_FUNCTIONS = new Set<string>([\n 'parseInt', 'parseFloat', 'isNaN', 'isFinite', 'String', 'Number', 'Boolean',\n 'encodeURI', 'encodeURIComponent', 'decodeURI', 'decodeURIComponent',\n])\n\n// ── scope ──\n\ninterface Scope {\n parent: Scope | null\n tainted: Map<string, boolean>\n}\n\nfunction childScope(parent: Scope): Scope {\n return { parent, tainted: new Map() }\n}\n\nfunction lookupTaint(scope: Scope, name: string): boolean {\n let s: Scope | null = scope\n while (s) {\n const v = s.tainted.get(name)\n if (v !== undefined) return v\n s = s.parent\n }\n return false\n}\n\nfunction markTaint(scope: Scope, name: string): void {\n // Write through to the nearest scope that declares `name`, else current scope.\n let s: Scope | null = scope\n while (s) {\n if (s.tainted.has(name)) {\n s.tainted.set(name, true)\n return\n }\n s = s.parent\n }\n scope.tainted.set(name, true)\n}\n\n// ── scanner ──\n\n/** acorn node (structural access only; see security-scanner for the same pattern). */\ntype Node = any\n\n/**\n * Static non-determinism scanner (B-tier, conservative).\n * @param code - the `.fai.js` / library source text.\n * @param opts - scan options (geometry namespace/callee hints).\n * @returns scan result with all violations.\n */\nexport function scanDeterminism(code: string, opts: DeterminismScanOptions = {}): DeterminismScanResult {\n const defaultNs = opts.defaultNs ?? 'cad'\n const geometryNamespaces = new Set<string>([defaultNs, ...(opts.extraNamespaces ?? [])])\n const geometryCallees = new Set<string>(opts.extraCallees ?? [])\n\n const violations: DeterminismViolation[] = []\n\n let ast: Node\n try {\n ast = acornParse(code, {\n ecmaVersion: 'latest',\n sourceType: 'module',\n locations: true,\n })\n } catch {\n // A syntax error is not a determinism violation; the main parse path owns\n // syntax diagnostics. Return ok (empty).\n return { ok: true, violations: [] }\n }\n\n const rootScope: Scope = { parent: null, tainted: new Map() }\n\n function lineOf(node: Node): number {\n return node?.loc?.start?.line ?? 1\n }\n\n function report(node: Node, source: DeterminismSource, detail: string): void {\n violations.push({\n lineNo: lineOf(node),\n source,\n message: `[determinism] ${detail} (non-deterministic value reaches geometry)`,\n })\n }\n\n /** Return the source kind of a call/construct callee, else null. */\n function sourceKindOfCallee(callee: Node): DeterminismSource | null {\n if (\n callee?.type === 'MemberExpression' &&\n callee.object?.type === 'Identifier' &&\n !callee.computed &&\n callee.property?.type === 'Identifier'\n ) {\n const members = SOURCE_MEMBERS[callee.object.name]\n if (members?.has(callee.property.name)) {\n const o = callee.object.name\n if (o === 'Math') return 'Math.random'\n if (o === 'Date') return 'Date'\n if (o === 'crypto') return callee.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues'\n return 'performance.now'\n }\n }\n if (callee?.type === 'Identifier' && SOURCE_IDENTS.has(callee.name)) {\n if (callee.name === 'performance') return 'performance.now'\n if (callee.name === 'getRandomValues') return 'getRandomValues'\n return callee.name as DeterminismSource\n }\n return null\n }\n\n /**\n * Whether a call/construct site is a geometry sink, and if so, check its\n * arguments for taint. Returns the tainted-ness of the call result.\n */\n function handleCall(node: Node, scope: Scope): boolean {\n const callee = node.callee\n let resultTainted = false\n\n // A source call (Date.now / Math.random / crypto.* / performance.now)\n // produces a tainted result regardless of its arguments.\n const srcKind = sourceKindOfCallee(callee)\n if (srcKind) {\n lastSource = srcKind\n // Still walk arguments: nested calls inside may themselves violate.\n for (const a of node.arguments ?? []) {\n evalTaint(a?.type === 'SpreadElement' ? a.argument : a, scope)\n }\n return true\n }\n\n // Evaluate argument taint (propagation, eager evaluation).\n const argTaints: boolean[] = []\n for (const a of node.arguments ?? []) {\n if (a?.type === 'SpreadElement') {\n argTaints.push(evalTaint(a.argument, scope))\n } else {\n argTaints.push(evalTaint(a, scope))\n }\n if (argTaints[argTaints.length - 1]) resultTainted = true\n }\n\n // Determine the call target kind.\n // 1) Geometry namespace member call: `cad.box(...)` / `sheet.fn(...)`.\n if (callee?.type === 'MemberExpression') {\n const obj = callee.object\n const prop = callee.computed ? null : callee.property?.name\n const objName = obj?.type === 'Identifier' ? obj.name : null\n\n if (objName !== null && geometryNamespaces.has(objName)) {\n // Geometry op: any tainted argument violates.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${objName}.${prop ?? '(computed)'} receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n if (objName !== null && SAFE_CONTAINERS.has(objName)) {\n // Safe container (console/math/json/...): propagate only.\n return resultTainted\n }\n\n // Object itself tainted (e.g. `d.getSeconds()` where `d = new Date()`)\n // → result conservatively tainted (method may return a dependent value).\n if (objName !== null && evalTaint(obj, scope)) resultTainted = true\n }\n\n // 2) Direct named geometry callee: `gear(...)` from `import { gear }`.\n if (callee?.type === 'Identifier' && geometryCallees.has(callee.name)) {\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${callee.name}(...) receives a non-deterministic argument`)\n }\n return resultTainted\n }\n\n // 3) Known safe top-level function: propagate only.\n if (callee?.type === 'Identifier' && SAFE_FUNCTIONS.has(callee.name)) {\n return resultTainted\n }\n\n // 4) Unknown function call: conservative — a tainted argument may feed\n // geometry, and we cannot prove otherwise.\n const taintedArg = argTaints.findIndex((t) => t)\n if (taintedArg >= 0) {\n report(callee, inferSourceForArgs(), `${calleeName(callee)}(...) receives a non-deterministic argument through an unknown callee`)\n }\n return resultTainted\n }\n\n function inferSourceForArgs(): DeterminismSource {\n // Best-effort attribution; the precise source is tracked per-node via lastSource.\n return lastSource ?? 'Date'\n }\n\n function calleeName(node: Node): string {\n if (!node) return '(unknown)'\n if (node.type === 'Identifier') return node.name\n if (node.type === 'MemberExpression') {\n const o = node.object?.type === 'Identifier' ? node.object.name : '?'\n const p = node.computed ? '[...]' : node.property?.name ?? '?'\n return `${o}.${p}`\n }\n return node.type\n }\n\n // Track the most recent source kind seen (for coarse attribution in reports).\n let lastSource: DeterminismSource | undefined\n\n /**\n * Evaluate whether an expression is tainted, recording sources as side\n * effects. Memo-free (exponential-free because the AST is a tree).\n */\n function evalTaint(node: Node, scope: Scope): boolean {\n if (!node) return false\n switch (node.type) {\n case 'Literal':\n return false\n\n case 'Identifier': {\n if (node.name === 'undefined' || node.name === 'NaN' || node.name === 'Infinity') return false\n // Source: bare `Date` / `crypto` / `performance` reference.\n if (SOURCE_IDENTS.has(node.name)) {\n lastSource = node.name !== 'performance' ? (node.name as DeterminismSource) : 'performance.now'\n return true\n }\n return lookupTaint(scope, node.name)\n }\n\n case 'MemberExpression': {\n // Source: `Math.random`, `Date.now`, `crypto.getRandomValues`, ...\n if (node.object?.type === 'Identifier') {\n const members = SOURCE_MEMBERS[node.object.name]\n if (members && !node.computed && node.property?.type === 'Identifier' && members.has(node.property.name)) {\n const kind =\n node.object.name === 'Math' ? 'Math.random'\n : node.object.name === 'Date' ? 'Date'\n : node.object.name === 'crypto' ? (node.property.name === 'randomUUID' ? 'crypto' : 'getRandomValues')\n : 'performance.now'\n lastSource = kind\n return true\n }\n }\n // Otherwise: taint flows through the object (and, conservatively, the key).\n const objTaint = evalTaint(node.object, scope)\n const keyTaint = node.computed ? evalTaint(node.property, scope) : false\n return objTaint || keyTaint\n }\n\n case 'NewExpression':\n // `new Date(...)` is a source regardless of arguments (timezone/sytem\n // clock dependence). `new crypto.X` likewise.\n if (node.callee?.type === 'Identifier' && SOURCE_IDENTS.has(node.callee.name)) {\n lastSource = node.callee.name === 'Date' ? 'Date' : 'crypto'\n return true\n }\n return handleCall(node, scope)\n\n case 'CallExpression':\n return handleCall(node, scope)\n\n case 'ArrayExpression': {\n let t = false\n for (const el of node.elements ?? []) {\n if (el && evalTaint(el, scope)) t = true\n }\n return t\n }\n\n case 'ObjectExpression': {\n let t = false\n for (const prop of node.properties ?? []) {\n if (prop.type === 'SpreadElement') {\n if (evalTaint(prop.argument, scope)) t = true\n } else if (prop.value && evalTaint(prop.value, scope)) {\n t = true\n }\n }\n return t\n }\n\n case 'UnaryExpression':\n return evalTaint(node.argument, scope)\n\n case 'UpdateExpression':\n return evalTaint(node.argument, scope)\n\n case 'BinaryExpression':\n case 'LogicalExpression':\n return evalTaint(node.left, scope) || evalTaint(node.right, scope)\n\n case 'ConditionalExpression': {\n const testT = evalTaint(node.test, scope)\n const consT = evalTaint(node.consequent, scope)\n const altT = evalTaint(node.alternate, scope)\n return testT || consT || altT\n }\n\n case 'AssignmentExpression': {\n const rhsT = evalTaint(node.right, scope)\n if (rhsT) {\n markAssignTarget(node.left, scope)\n }\n return rhsT\n }\n\n case 'SequenceExpression': {\n let t = false\n for (const e of node.expressions ?? []) {\n if (evalTaint(e, scope)) t = true\n }\n return t\n }\n\n case 'TemplateLiteral': {\n let t = false\n for (const expr of node.expressions ?? []) {\n if (evalTaint(expr, scope)) t = true\n }\n return t\n }\n\n case 'ChainExpression':\n return evalTaint(node.expression, scope)\n\n case 'AwaitExpression':\n return evalTaint(node.argument, scope)\n\n case 'SpreadElement':\n return evalTaint(node.argument, scope)\n\n case 'ArrowFunctionExpression':\n case 'FunctionExpression': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) {\n collectPatternTaintDefault(p, fnScope)\n }\n walkFunctionBody(node, fnScope)\n return false\n }\n\n default:\n return false\n }\n }\n\n /** Mark an assignment/declaration target tainted. */\n function markAssignTarget(left: Node, scope: Scope): void {\n if (left.type === 'Identifier') {\n markTaint(scope, left.name)\n return\n }\n if (left.type === 'MemberExpression') {\n // Conservatively taint the base object; the precise key is unknown.\n if (left.object?.type === 'Identifier') markTaint(scope, left.object.name)\n return\n }\n if (left.type === 'ArrayPattern' || left.type === 'ObjectPattern') {\n collectPattern(left, (name) => markTaint(scope, name))\n return\n }\n }\n\n /** Collect binding names from a destructuring pattern. */\n function collectPattern(pattern: Node, cb: (name: string) => void): void {\n if (!pattern) return\n if (pattern.type === 'Identifier') {\n cb(pattern.name)\n return\n }\n if (pattern.type === 'RestElement') {\n collectPattern(pattern.argument, cb)\n return\n }\n if (pattern.type === 'ArrayPattern') {\n for (const el of pattern.elements ?? []) if (el) collectPattern(el, cb)\n return\n }\n if (pattern.type === 'ObjectPattern') {\n for (const prop of pattern.properties ?? []) {\n if (prop.type === 'RestElement') collectPattern(prop.argument, cb)\n else if (prop.value) collectPattern(prop.value, cb)\n }\n return\n }\n if (pattern.type === 'AssignmentPattern') {\n collectPattern(pattern.left, cb)\n return\n }\n }\n\n /** Register a parameter, evaluating its default for taint. */\n function collectPatternTaintDefault(pattern: Node, scope: Scope): void {\n if (pattern?.type === 'AssignmentPattern') {\n collectPattern(pattern.left, (name) => {\n scope.tainted.set(name, evalTaint(pattern.right, scope))\n })\n return\n }\n collectPattern(pattern, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n\n /** Walk a function body (its own scope; statements inside analyzed eagerly). */\n function walkFunctionBody(node: Node, fnScope: Scope): void {\n if (node.body?.type === 'BlockStatement') walkBody(node.body.body ?? [], fnScope)\n else if (node.body) {\n // Expression body: `x => expr`.\n evalTaint(node.body, fnScope)\n }\n }\n\n /** Walk a statement list, carrying implicit-flow taint. */\n function walkBody(body: Node[], scope: Scope, implicitTaint = false): void {\n // Hoist declarations first so assignments resolve in this scope.\n for (const stmt of body) {\n if (stmt?.type === 'VariableDeclaration') {\n for (const decl of stmt.declarations ?? []) {\n collectPattern(decl.id, (name) => {\n if (!scope.tainted.has(name)) scope.tainted.set(name, false)\n })\n }\n }\n if (stmt?.type === 'FunctionDeclaration' && stmt.id?.name) {\n if (!scope.tainted.has(stmt.id.name)) scope.tainted.set(stmt.id.name, false)\n }\n }\n if (implicitTaint) {\n // Any assignment target inside a tainted control flow becomes tainted.\n for (const stmt of body) markStmtTargets(stmt, scope)\n }\n for (const stmt of body) walkStmt(stmt, scope)\n }\n\n /** Conservatively mark every LHS a block writes through as tainted. */\n function markStmtTargets(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'VariableDeclaration':\n for (const d of node.declarations ?? []) collectPattern(d.id, (n) => markTaint(scope, n))\n return\n case 'ExpressionStatement':\n if (node.expression?.type === 'AssignmentExpression') markAssignTarget(node.expression.left, scope)\n if (node.expression?.type === 'UpdateExpression') markAssignTarget(node.expression.argument, scope)\n if (node.expression?.type === 'CallExpression') {\n // In-place mutation ergonomics: taint the first argument receiver.\n const first = node.expression.arguments?.[0]\n if (first?.type === 'Identifier') markTaint(scope, first.name)\n }\n return\n case 'FunctionDeclaration':\n if (node.id?.name) markTaint(scope, node.id.name)\n return\n default:\n return\n }\n }\n\n function walkStmt(node: Node, scope: Scope): void {\n if (!node) return\n switch (node.type) {\n case 'ExpressionStatement':\n evalTaint(node.expression, scope)\n return\n\n case 'VariableDeclaration':\n for (const decl of node.declarations ?? []) {\n if (decl.init && evalTaint(decl.init, scope)) {\n collectPattern(decl.id, (name) => markTaint(scope, name))\n }\n }\n return\n\n case 'BlockStatement':\n walkBody(node.body ?? [], childScope(scope))\n return\n\n case 'IfStatement': {\n const testT = evalTaint(node.test, scope)\n walkBody(toList(node.consequent), childScope(scope), testT)\n if (node.alternate) walkBody(toList(node.alternate), childScope(scope), testT)\n return\n }\n\n case 'ForStatement': {\n const forScope = childScope(scope)\n if (node.init?.type === 'VariableDeclaration') {\n for (const d of node.init.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n if (d.init && evalTaint(d.init, forScope)) collectPattern(d.id, (n) => markTaint(forScope, n))\n }\n } else if (node.init) {\n evalTaint(node.init, forScope)\n }\n const testT = node.test ? evalTaint(node.test, forScope) : false\n if (node.update) evalTaint(node.update, forScope)\n walkBody(toList(node.body), forScope, testT)\n return\n }\n\n case 'ForInStatement':\n case 'ForOfStatement': {\n const forScope = childScope(scope)\n const rightT = evalTaint(node.right, forScope)\n if (node.left?.type === 'VariableDeclaration') {\n for (const d of node.left.declarations ?? []) {\n collectPattern(d.id, (n) => { if (!forScope.tainted.has(n)) forScope.tainted.set(n, false) })\n }\n }\n walkBody(toList(node.body), forScope, rightT)\n return\n }\n\n case 'WhileStatement':\n case 'DoWhileStatement': {\n const loopScope = childScope(scope)\n const testT = evalTaint(node.test, loopScope)\n walkBody(toList(node.body), loopScope, testT)\n return\n }\n\n case 'SwitchStatement': {\n const swScope = childScope(scope)\n const discT = evalTaint(node.discriminant, swScope)\n for (const c of node.cases ?? []) {\n if (c.test) evalTaint(c.test, swScope)\n walkBody(c.consequent ?? [], childScope(swScope), discT)\n }\n return\n }\n\n case 'ReturnStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'ThrowStatement':\n if (node.argument) evalTaint(node.argument, scope)\n return\n\n case 'TryStatement': {\n walkBody(toList(node.block?.body ?? []), scope)\n if (node.handler) {\n const catchScope = childScope(scope)\n if (node.handler.param) collectPattern(node.handler.param, (n) => { catchScope.tainted.set(n, false) })\n walkBody(node.handler.body?.body ?? [], catchScope)\n }\n if (node.finalizer) walkBody(node.finalizer.body ?? [], scope)\n return\n }\n\n case 'FunctionDeclaration': {\n const fnScope = childScope(scope)\n for (const p of node.params ?? []) collectPatternTaintDefault(p, fnScope)\n walkFunctionBody(node, fnScope)\n return\n }\n\n case 'LabeledStatement':\n if (node.body) walkStmt(node.body, scope)\n return\n\n case 'ImportDeclaration':\n case 'ExportNamedDeclaration':\n case 'ExportDefaultDeclaration':\n // Imports are handled by the caller (namespace/callee hints). A default\n // export with a declaration still needs its body walked.\n if (node.type === 'ExportDefaultDeclaration' && node.declaration && node.declaration.type !== 'Identifier') {\n walkStmt(node.declaration, scope)\n }\n if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n walkStmt(node.declaration, scope)\n }\n return\n\n case 'ClassDeclaration': {\n const clsScope = childScope(scope)\n for (const m of node.body?.body ?? []) {\n if (m.value) walkFunctionBody(m.value, childScope(clsScope))\n }\n return\n }\n\n case 'EmptyStatement':\n case 'BreakStatement':\n case 'ContinueStatement':\n case 'DebuggerStatement':\n return\n\n default: {\n // Unknown statement node: conservatively walk children via evalTaint on\n // expression-shaped child properties is error-prone; skip structurally.\n return\n }\n }\n }\n\n function toList(node: Node): Node[] {\n if (!node) return []\n return node.type === 'BlockStatement' ? (node.body ?? []) : [node]\n }\n\n walkBody(ast.body ?? [], rootScope)\n\n return { ok: violations.length === 0, violations }\n}"]}
|
|
@@ -45,12 +45,18 @@ declare const _default: {
|
|
|
45
45
|
inverseKinematics: {};
|
|
46
46
|
mechanismDOF: {};
|
|
47
47
|
asset: {};
|
|
48
|
+
import_brep: {};
|
|
49
|
+
import_step: {};
|
|
50
|
+
compound: {};
|
|
51
|
+
place: {};
|
|
52
|
+
cut: {};
|
|
53
|
+
split: {};
|
|
54
|
+
linearPattern: {};
|
|
48
55
|
torus: {};
|
|
49
56
|
fuse: {};
|
|
50
57
|
viewCamera: {};
|
|
51
58
|
projectView: {};
|
|
52
59
|
projectSheet: {};
|
|
53
|
-
linearPattern: {};
|
|
54
60
|
circularPattern: {};
|
|
55
61
|
gridPattern: {};
|
|
56
62
|
drill: {};
|
|
@@ -67,8 +73,6 @@ declare const _default: {
|
|
|
67
73
|
applyMatrix: {};
|
|
68
74
|
transformCopy: {};
|
|
69
75
|
locate: {};
|
|
70
|
-
cut: {};
|
|
71
|
-
split: {};
|
|
72
76
|
offset: {};
|
|
73
77
|
heal: {};
|
|
74
78
|
simplify: {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBA2EC"}
|
|
@@ -45,12 +45,18 @@ export default {
|
|
|
45
45
|
"inverseKinematics": {},
|
|
46
46
|
"mechanismDOF": {},
|
|
47
47
|
"asset": {},
|
|
48
|
+
"import_brep": {},
|
|
49
|
+
"import_step": {},
|
|
50
|
+
"compound": {},
|
|
51
|
+
"place": {},
|
|
52
|
+
"cut": {},
|
|
53
|
+
"split": {},
|
|
54
|
+
"linearPattern": {},
|
|
48
55
|
"torus": {},
|
|
49
56
|
"fuse": {},
|
|
50
57
|
"viewCamera": {},
|
|
51
58
|
"projectView": {},
|
|
52
59
|
"projectSheet": {},
|
|
53
|
-
"linearPattern": {},
|
|
54
60
|
"circularPattern": {},
|
|
55
61
|
"gridPattern": {},
|
|
56
62
|
"drill": {},
|
|
@@ -67,8 +73,6 @@ export default {
|
|
|
67
73
|
"applyMatrix": {},
|
|
68
74
|
"transformCopy": {},
|
|
69
75
|
"locate": {},
|
|
70
|
-
"cut": {},
|
|
71
|
-
"split": {},
|
|
72
76
|
"offset": {},
|
|
73
77
|
"heal": {},
|
|
74
78
|
"simplify": {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-table.generated.js","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAe;IACb,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,
|
|
1
|
+
{"version":3,"file":"symbol-table.generated.js","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAe;IACb,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,EAAE;IACd,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,EAAE;IACnB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB,oBAAoB,EAAE,EAAE;IACxB,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;CAChB,CAAA","sourcesContent":["/**\n * symbol-table 生成文件 — 禁手改。\n * 由 scripts/gen-symbol-table.ts 从 api-namespace 的 cad 命名空间生成(键存在性)。\n * keep-syntax P1 后符号表只承载 check() 符号检查(\"函数不存在\"判定);\n * 保留语义由 keep 声明表达,不再有 readonly 标注。\n */\nexport default {\n \"box\": {},\n \"sphere\": {},\n \"cylinder\": {},\n \"cone\": {},\n \"wedge\": {},\n \"text\": {},\n \"screw\": {},\n \"svgExtrude\": {},\n \"sketch\": {},\n \"sdf\": {},\n \"load\": {},\n \"translate\": {},\n \"rotate_euler\": {},\n \"scale\": {},\n \"scale3d\": {},\n \"fai_drill\": {},\n \"fai_extrude\": {},\n \"engrave\": {},\n \"chamfer\": {},\n \"fillet\": {},\n \"knurl\": {},\n \"union\": {},\n \"subtract\": {},\n \"intersect\": {},\n \"extrude\": {},\n \"revolve\": {},\n \"fai_split\": {},\n \"group\": {},\n \"assembly\": {},\n \"copy\": {},\n \"faceNormal\": {},\n \"bboxCenter\": {},\n \"bboxMin\": {},\n \"bboxMax\": {},\n \"edgeRef\": {},\n \"faceRef\": {},\n \"jointTrajectory\": {},\n \"inverseKinematics\": {},\n \"mechanismDOF\": {},\n \"asset\": {},\n \"import_brep\": {},\n \"import_step\": {},\n \"compound\": {},\n \"place\": {},\n \"cut\": {},\n \"split\": {},\n \"linearPattern\": {},\n \"torus\": {},\n \"fuse\": {},\n \"viewCamera\": {},\n \"projectView\": {},\n \"projectSheet\": {},\n \"circularPattern\": {},\n \"gridPattern\": {},\n \"drill\": {},\n \"pocket\": {},\n \"boss\": {},\n \"mirrorJoin\": {},\n \"rectangularPattern\": {},\n \"convexHull\": {},\n \"makeBaseBox\": {},\n \"ellipsoid\": {},\n \"rotate\": {},\n \"mirror\": {},\n \"clone\": {},\n \"applyMatrix\": {},\n \"transformCopy\": {},\n \"locate\": {},\n \"offset\": {},\n \"heal\": {},\n \"simplify\": {},\n \"autoHeal\": {},\n \"fixShape\": {},\n \"healSolid\": {}\n}\n"]}
|
package/dist/mesh/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,YAAY,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,CAAA;AAI7B;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,YAAY,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,CAAA;AAI7B;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEf,CAAA;AAID,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACvE,YAAY,EACV,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAChE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EACvC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACtD,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,GACjF,MAAM,SAAS,CAAA;AAGhB,YAAY,EACV,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EACjE,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAC/D,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAA"}
|
package/dist/mesh/index.js
CHANGED
|
@@ -57,8 +57,9 @@ export const cad = {
|
|
|
57
57
|
subtract: booleanOps.subtract,
|
|
58
58
|
intersect: booleanOps.intersect,
|
|
59
59
|
// 分割
|
|
60
|
-
// fai_* 键为 mesh
|
|
61
|
-
//
|
|
60
|
+
// fai_* 键为 mesh 侧实现入口。`../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):
|
|
61
|
+
// `fai_` 前缀 op 为编辑器应用提供,不属 faijs 平台面;
|
|
62
|
+
// **变更其 API 形态必须同步更新 `../3d_editor`**(见 api/fai_*.ts 的 @deprecated)。
|
|
62
63
|
fai_split: splitOps.split,
|
|
63
64
|
fai_splitWithParams: splitOps.splitWithParams,
|
|
64
65
|
dovetailSplit: splitOps.dovetailSplit,
|
package/dist/mesh/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,YAAY,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,CAAA;AAE7B,sBAAsB;AAEtB;;;;GAIG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,cAAc;IACd,GAAG,EAAE,UAAU,CAAC,GAAG;IACnB,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;IAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;IACrB,KAAK,EAAE,UAAU,CAAC,KAAK;IACvB,IAAI,EAAE,UAAU,CAAC,IAAI;IACrB,KAAK,EAAE,UAAU,CAAC,KAAK;IACvB,UAAU,EAAE,UAAU,CAAC,UAAU;IACjC,GAAG,EAAE,UAAU,CAAC,GAAG;IAEnB,6BAA6B;IAC7B,OAAO,EAAE,cAAc,CAAC,OAAO;IAC/B,UAAU,EAAE,cAAc,CAAC,UAAU;IACrC,YAAY,EAAE,cAAc,CAAC,YAAY;IACzC,QAAQ,EAAE,cAAc,CAAC,QAAQ;IACjC,SAAS,EAAE,cAAc,CAAC,SAAS;IAEnC,KAAK;IACL,SAAS,EAAE,YAAY,CAAC,SAAS;IACjC,YAAY,EAAE,YAAY,CAAC,YAAY;IACvC,KAAK,EAAE,YAAY,CAAC,KAAK;IACzB,OAAO,EAAE,YAAY,CAAC,OAAO;IAC7B,eAAe,EAAE,YAAY,CAAC,eAAe;IAE7C,KAAK;IACL,KAAK,EAAE,UAAU,CAAC,KAAK;IACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;IAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;IAE/B,KAAK;IACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * mesh — 纯数据几何 API 统一入口\n *\n * See docs/api-contract.md §1 (architecture layers) and §10 (stdlib function catalog).\n *\n * 原则(§5.1):\n * 1. 全部纯数据:输入输出是 Shape (ManifoldMeshData),不碰 THREE 场景、不读 store\n * 2. 不可变:每个 API 返回新几何,不修改输入\n * 3. 同步签名、异步执行:API 签名同步(或 async);worker 边界由 ScriptEngine 处理\n * 4. 坐标系:右手系 +Z 向上、毫米、角度用度\n *\n * P1 阶段:mesh 是对现有纯函数的薄包装层,行为完全不变。\n * P3+ 阶段:mesh 将由 ScriptEngine 驱动,在 worker 中执行。\n */\n\nimport * as primitives from './primitives'\nimport * as brepPrimitives from '../brep/primitives-brep'\nimport * as brepOps from '../brep'\nimport * as booleanOps from './boolean'\nimport * as splitOps from './fai_split'\nimport * as drillOps from './fai_drill'\nimport * as extrudeOps from './fai_extrude'\nimport * as engraveOps from './engrave'\nimport * as transformOps from './transform'\nimport * as queryOps from './query'\nimport * as ioOps from './io'\n\n// ── 统一 cad API 对象 ──\n\n/**\n * Unified `cad` API object aggregating the pure-data mesh operations: mesh and\n * BREP primitives, transforms, booleans, splits, drill/extrude/engrave/knurl,\n * geometry queries, file IO, and BREP feature operations.\n */\nexport const cad = {\n // 创建(mesh 路径)\n box: primitives.box,\n sphere: primitives.sphere,\n cylinder: primitives.cylinder,\n cone: primitives.cone,\n wedge: primitives.wedge,\n text: primitives.text,\n screw: primitives.screw,\n svgExtrude: primitives.svgExtrude,\n sdf: primitives.sdf,\n\n // 创建(BREP 路径 — OCCT 精确实体三角化)\n boxBrep: brepPrimitives.boxBrep,\n sphereBrep: brepPrimitives.sphereBrep,\n cylinderBrep: brepPrimitives.cylinderBrep,\n coneBrep: brepPrimitives.coneBrep,\n wedgeBrep: brepPrimitives.wedgeBrep,\n\n // 变换\n translate: transformOps.translate,\n rotate_euler: transformOps.rotate_euler,\n scale: transformOps.scale,\n scale3d: transformOps.scale3d,\n transformMatrix: transformOps.transformMatrix,\n\n // 布尔\n union: booleanOps.union,\n subtract: booleanOps.subtract,\n intersect: booleanOps.intersect,\n\n // 分割\n // fai_* 键为 mesh 侧实现入口。`../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):\n // `fai_` 前缀 op 为编辑器应用提供,不属 faijs 平台面;\n // **变更其 API 形态必须同步更新 `../3d_editor`**(见 api/fai_*.ts 的 @deprecated)。\n fai_split: splitOps.split,\n fai_splitWithParams: splitOps.splitWithParams,\n dovetailSplit: splitOps.dovetailSplit,\n dowelSplit: splitOps.dowelSplit,\n tenonSplit: splitOps.tenonSplit,\n\n // 钻孔\n fai_drill: drillOps.drill,\n\n // 拉伸\n fai_extrude: extrudeOps.extrude,\n\n // 雕刻\n engrave: engraveOps.engrave,\n knurl: engraveOps.knurl,\n\n // 查询\n boundingBox: queryOps.boundingBox,\n bboxCenter: queryOps.bboxCenter,\n volume: queryOps.volume,\n faceAt: queryOps.faceAt,\n\n // IO\n load: ioOps.importFile,\n\n // BREP 特征操作(Phase 2 — OCCT 精确实体运算)\n translateBrep: brepOps.translateBrep,\n rotateBrep: brepOps.rotateBrep,\n scaleBrep: brepOps.scaleBrep,\n fuseBrep: brepOps.fuseBrep,\n cutBrep: brepOps.cutBrep,\n commonBrep: brepOps.commonBrep,\n drillBrep: brepOps.drillBrep,\n splitBrep: brepOps.splitBrep,\n extrudeBrep: brepOps.extrudeBrep,\n loadBrep: brepOps.loadBrep,\n solidToShape: brepOps.solidToShape,\n}\n\n// ── 类型导出 ──\n\nexport type { Shape, Vec3, BoundingBox, FaceDescriptor } from './types'\nexport type {\n BoxParams, SphereParams, CylinderParams, ConeParams, WedgeParams,\n TextParams, SvgExtrudeParams, SdfParams,\n DrillParams, ExtrudeParams, EngraveParams, KnurlParams,\n SplitPlane, SplitResult, DovetailSplitParams, DowelSplitParams, TenonSplitParams,\n} from './types'\n\n// BREP ops 类型导出\nexport type {\n BrepChainState, DrillBrepParams, SplitBrepParams, SplitBrepResult,\n ExtrudeBrepParams,\n} from '../brep'\nexport {\n createBrepChainState, initBrepChainState, releaseBrepChainState,\n solidToShape,\n isCadFormat,\n} from '../brep'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAA;AAgB/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAgHvD,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qJAAqJ;IACrJ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,EAAE,EAAE,OAAO,CAAA;IACX,8CAA8C;IAC9C,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjF,qDAAqD;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CACnD;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,EAAE,EAAE,OAAO,CAAA;IACX,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,EAAE,EAAE,OAAO,CAAA;IACX,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,cAAc,CAmBlF;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAsHD;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,aAAa,CAAC,CAqExB;AAyID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CA4CA;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA2HrG"}
|
package/dist/node-host/cli.js
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
* — (view) 单视图方向(默认 front)
|
|
18
18
|
* --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)
|
|
19
19
|
*/
|
|
20
|
-
import { readFileSync, writeFileSync } from 'node:fs';
|
|
20
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
21
21
|
import { createRequire } from 'node:module';
|
|
22
|
-
import { resolve, extname } from 'node:path';
|
|
22
|
+
import { resolve, extname, dirname, join } from 'node:path';
|
|
23
23
|
import { createRuntime } from '../cad-runtime/runtime.js';
|
|
24
24
|
import { createNodePorts } from './index.js';
|
|
25
25
|
import { createFsProjectLoader, findProjectRoot, projectKeyOf } from './fs-project-loader.js';
|
|
@@ -65,6 +65,21 @@ function readLibAutoLift(pkg) {
|
|
|
65
65
|
return undefined;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Phase 2.11-②:读库 package.json 的 `faijs.naming` 外置字段(与 `faijs.autoLift`
|
|
70
|
+
* 同构)。未声明 → undefined(回落 admitCompatLib 的 blanket unmodeled 兜底)。
|
|
71
|
+
*/
|
|
72
|
+
function readLibNaming(pkg) {
|
|
73
|
+
try {
|
|
74
|
+
const pjPath = requireNode.resolve(`${pkg}/package.json`);
|
|
75
|
+
const pj = JSON.parse(readFileSync(pjPath, 'utf8'));
|
|
76
|
+
const v = pj.faijs?.naming;
|
|
77
|
+
return v && typeof v === 'object' && typeof v.kind === 'string' ? v : undefined;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
68
83
|
/** specifier → scoped 全名归一:scoped 名原样,已登记短名映射,其余原样交 import 解析。 */
|
|
69
84
|
function normalizeCliSpecifier(name) {
|
|
70
85
|
return CLI_SHORT_NAMES[name] ?? name;
|
|
@@ -78,6 +93,24 @@ const cliPortsLibLoader = {
|
|
|
78
93
|
return (await import(pkg));
|
|
79
94
|
},
|
|
80
95
|
listLibs: () => [...Object.keys(CLI_SHORT_NAMES), '@faicad/'],
|
|
96
|
+
loadSource: async (name) => {
|
|
97
|
+
const pkg = normalizeCliSpecifier(name);
|
|
98
|
+
if (!pkg.startsWith(CLI_SCOPED_PREFIX))
|
|
99
|
+
return undefined;
|
|
100
|
+
try {
|
|
101
|
+
const req = createRequire(import.meta.url);
|
|
102
|
+
const pkgJsonPath = req.resolve(`${pkg}/package.json`);
|
|
103
|
+
const pkgDir = dirname(pkgJsonPath);
|
|
104
|
+
for (const p of [join(pkgDir, 'src', 'index.ts'), join(pkgDir, 'dist', 'index.js'), join(pkgDir, 'src', 'index.js')]) {
|
|
105
|
+
if (existsSync(p))
|
|
106
|
+
return readFileSync(p, 'utf-8');
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
81
114
|
// 默认不提升(与历史 CLI 行为一致);各库用 package.json "faijs.autoLift" 逐库覆盖。
|
|
82
115
|
options: {
|
|
83
116
|
autoLift: false,
|
|
@@ -85,6 +118,11 @@ const cliPortsLibLoader = {
|
|
|
85
118
|
const pkg = normalizeCliSpecifier(name);
|
|
86
119
|
return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibAutoLift(pkg) : undefined;
|
|
87
120
|
},
|
|
121
|
+
// Phase 2.11-②:逐库 naming(package.json "faijs.naming"),未声明 → undefined → blanket 兜底。
|
|
122
|
+
namingFor: (name) => {
|
|
123
|
+
const pkg = normalizeCliSpecifier(name);
|
|
124
|
+
return pkg.startsWith(CLI_SCOPED_PREFIX) ? readLibNaming(pkg) : undefined;
|
|
125
|
+
},
|
|
88
126
|
},
|
|
89
127
|
};
|
|
90
128
|
/** 注入 libLoader 到 node ports(CLI 宿主白名单装载)。 */
|
|
@@ -174,6 +212,22 @@ export async function cliRun(filePath, outPath, opts) {
|
|
|
174
212
|
// Determine output format from extension
|
|
175
213
|
const ext = extname(outPath).toLowerCase().slice(1);
|
|
176
214
|
const terminals = execResult.terminals ?? [];
|
|
215
|
+
// E1 (H12): export-side failures must surface as a structured result, not an
|
|
216
|
+
// exception — the census and batch driver treat a throw as a process crash,
|
|
217
|
+
// while `{ ok: false, error }` keeps it a per-file, classifiable failure.
|
|
218
|
+
try {
|
|
219
|
+
return await exportExecutionResult(outPath, ext, execResult, terminals);
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
return {
|
|
223
|
+
ok: false,
|
|
224
|
+
error: `Export failed: ${String(e?.message ?? e)}`,
|
|
225
|
+
infos: execResult.infos,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Export an executed result to `outPath` (shared body of cliRun's export path). */
|
|
230
|
+
async function exportExecutionResult(outPath, ext, execResult, terminals) {
|
|
177
231
|
if (terminals.length === 0) {
|
|
178
232
|
// No terminals — use last output
|
|
179
233
|
const outputNames = [...execResult.outputs.keys()];
|