@field/cascade 0.2.22
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/AGENTS.md +168 -0
- package/ARCHITECTURE.md +137 -0
- package/DESIGN.md +161 -0
- package/LICENSE +21 -0
- package/README.md +229 -0
- package/dist/assets/CodeEditor-DR7u0q7p.css +1 -0
- package/dist/assets/CodeEditor-DoaNEUaM.js +641 -0
- package/dist/assets/CodePanel-B0_2XJ-t.js +2 -0
- package/dist/assets/CodePanel-IT1secyI.css +1 -0
- package/dist/assets/CustomNodeDialog-026lzecD.js +1 -0
- package/dist/assets/CustomNodeDialog-JGYnWY6m.css +1 -0
- package/dist/assets/ExportDialog-DOq0flMV.css +1 -0
- package/dist/assets/ExportDialog-DWN4nhXI.js +358 -0
- package/dist/assets/ProjectSettings-BzT164Yx.js +2 -0
- package/dist/assets/ProjectSettings-DdO9xoQz.css +1 -0
- package/dist/assets/SettingsDialog-CeK7ytpY.css +1 -0
- package/dist/assets/SettingsDialog-DmHb1V0r.js +1 -0
- package/dist/assets/VersionHistoryDialog-CWNmHQ-P.css +1 -0
- package/dist/assets/VersionHistoryDialog-hH6VsXLX.js +3 -0
- package/dist/assets/abap-08VXUWAP.js +1 -0
- package/dist/assets/apex-BWPQTe0t.js +1 -0
- package/dist/assets/azcli-Bc_sGQ0U.js +1 -0
- package/dist/assets/bat-i0X4ZdIN.js +1 -0
- package/dist/assets/bicep-B5-_aFwp.js +2 -0
- package/dist/assets/cameligo-DMUM7wLl.js +1 -0
- package/dist/assets/cascade.jpg +0 -0
- package/dist/assets/clojure-Cm7r79vr.js +1 -0
- package/dist/assets/codicon-Brq4_Ui5.ttf +0 -0
- package/dist/assets/coffee-Ba7i2nA0.js +1 -0
- package/dist/assets/core-Bji4aZUU.js +965 -0
- package/dist/assets/cpp-C7h46wYY.js +1 -0
- package/dist/assets/csharp-BKxtCVv1.js +1 -0
- package/dist/assets/csp-bTuwJoIa.js +1 -0
- package/dist/assets/css-DIMkf-bt.js +3 -0
- package/dist/assets/css.worker-B3ciXF_0.js +93 -0
- package/dist/assets/cssMode-B6Z_Q1Kh.js +1 -0
- package/dist/assets/cypher-CVaqCwHa.js +1 -0
- package/dist/assets/dart-onAF5SnQ.js +1 -0
- package/dist/assets/dockerfile-DZFCIeNp.js +1 -0
- package/dist/assets/ecl-D05T4iGw.js +1 -0
- package/dist/assets/editor-1FQrmyyI.css +1 -0
- package/dist/assets/editor.api-jMoW_43X.js +847 -0
- package/dist/assets/editor.worker-q-txB4vs.js +30 -0
- package/dist/assets/elixir-6RTg0lbw.js +1 -0
- package/dist/assets/flow9-C5_-GSwl.js +1 -0
- package/dist/assets/freemarker2-DvvPV6m5.js +3 -0
- package/dist/assets/fsharp-C8Ef5oNN.js +1 -0
- package/dist/assets/geo-CXmCtzMM.js +2 -0
- package/dist/assets/go-C-y9NEjX.js +1 -0
- package/dist/assets/graphql-fmXr3nnJ.js +1 -0
- package/dist/assets/handlebars-B8rfuSIa.js +1 -0
- package/dist/assets/hcl-CpzslTdj.js +1 -0
- package/dist/assets/html-DyHm6JCp.js +1 -0
- package/dist/assets/html.worker-C93Ht9o9.js +506 -0
- package/dist/assets/htmlMode-E9XLWE5u.js +1 -0
- package/dist/assets/image-BUcQC7PG.js +2076 -0
- package/dist/assets/index-BXYXSdgh.js +224 -0
- package/dist/assets/index-CrNke7SW.css +1 -0
- package/dist/assets/index-client-DN_FvjN8.js +1 -0
- package/dist/assets/ini-sBoK_t0W.js +1 -0
- package/dist/assets/java-BEtHBSE6.js +1 -0
- package/dist/assets/javascript-C_bM5PCN.js +1 -0
- package/dist/assets/json.worker-B2V3pomh.js +62 -0
- package/dist/assets/jsonMode-BdyVS7G4.js +7 -0
- package/dist/assets/julia-Bri6UV-V.js +1 -0
- package/dist/assets/kotlin-BOotOW0E.js +1 -0
- package/dist/assets/legacy-DIu3XRwl.js +2 -0
- package/dist/assets/less-B9JPFI3C.js +2 -0
- package/dist/assets/lexon-CfSJPG6W.js +1 -0
- package/dist/assets/liquid-CDkn3spA.js +1 -0
- package/dist/assets/lspLanguageFeatures-AB5DMAsr.js +4 -0
- package/dist/assets/lua-CsQS60Ue.js +1 -0
- package/dist/assets/m3-D-oSqn_W.js +1 -0
- package/dist/assets/markdown-Cimd5fb3.js +1 -0
- package/dist/assets/mdx-BvH_NjDN.js +1 -0
- package/dist/assets/mips-CIPQ_RoX.js +1 -0
- package/dist/assets/msdax-DauUninz.js +1 -0
- package/dist/assets/mysql-SOo6toE5.js +1 -0
- package/dist/assets/nodeTypeUtils-CweA3NHd.js +1 -0
- package/dist/assets/objective-c-FvmIjYaQ.js +1 -0
- package/dist/assets/pascal-DrH0SRf2.js +1 -0
- package/dist/assets/pascaligo-D-ptJ9y-.js +1 -0
- package/dist/assets/perl-oz_6vUea.js +1 -0
- package/dist/assets/pgsql-DTj74zXo.js +1 -0
- package/dist/assets/php-nr791fC2.js +1 -0
- package/dist/assets/pla-CopQ2nXW.js +1 -0
- package/dist/assets/postiats-43DmfD33.js +1 -0
- package/dist/assets/powerquery-D3hlyOfw.js +1 -0
- package/dist/assets/powershell-DmHpPYUd.js +1 -0
- package/dist/assets/projectSettingsApi-C1WvIwfP.js +1 -0
- package/dist/assets/protobuf-C531GsRP.js +2 -0
- package/dist/assets/pug-Z5eAx3Zn.js +1 -0
- package/dist/assets/python-B7uii4fi.js +1 -0
- package/dist/assets/qsharp-DkqhCAOL.js +1 -0
- package/dist/assets/quill-DjZ69wL_.js +121 -0
- package/dist/assets/r-BwWrilGY.js +1 -0
- package/dist/assets/razor-Z48fWdJc.js +1 -0
- package/dist/assets/redis-ClamHrr6.js +1 -0
- package/dist/assets/redshift-DT7zqm-g.js +1 -0
- package/dist/assets/restructuredtext-BYgofb2h.js +1 -0
- package/dist/assets/ruby-DezsRK8O.js +1 -0
- package/dist/assets/rust-DdL9SqIa.js +1 -0
- package/dist/assets/sb-CcwsVR0C.js +1 -0
- package/dist/assets/scala-DHpiXF5c.js +1 -0
- package/dist/assets/scheme-BeGwcela.js +1 -0
- package/dist/assets/scss-gp-XZpBa.js +3 -0
- package/dist/assets/shell-CC2rA5mh.js +1 -0
- package/dist/assets/solidity-BEEn4gHE.js +1 -0
- package/dist/assets/sophia-CRfGWb83.js +1 -0
- package/dist/assets/sparql-D_Lu-MrJ.js +1 -0
- package/dist/assets/sql-NEE52Syq.js +1 -0
- package/dist/assets/st-DbInun42.js +1 -0
- package/dist/assets/swift-Bxkupp3x.js +1 -0
- package/dist/assets/systemverilog-Bz4Y3fRF.js +1 -0
- package/dist/assets/tcl-DISqw1ZD.js +1 -0
- package/dist/assets/ts.worker-D7T1-Ig5.js +67738 -0
- package/dist/assets/tsMode-BDgacVG4.js +11 -0
- package/dist/assets/twig-De2hgUGE.js +1 -0
- package/dist/assets/typescript-Derb6Oqa.js +1 -0
- package/dist/assets/typespec-B8J7ngcE.js +1 -0
- package/dist/assets/vb-DV3o63ZY.js +1 -0
- package/dist/assets/wgsl-DpFanUEy.js +298 -0
- package/dist/assets/workers-BtoMX_pm.js +1 -0
- package/dist/assets/xml-B1CaFSrG.js +1 -0
- package/dist/assets/yaml-HmIeA0KH.js +1 -0
- package/dist/cli/index.js +11377 -0
- package/dist/cli/index.js.map +7 -0
- package/dist/cli/runtime/io.ts +445 -0
- package/dist/cli/runtime/net.ts +19 -0
- package/dist/cli/runtime/shell.ts +46 -0
- package/dist/cli/runtime/stage.ts +132 -0
- package/dist/contracts/capabilities.d.ts +109 -0
- package/dist/contracts/capabilities.d.ts.map +1 -0
- package/dist/contracts/capabilities.js +11 -0
- package/dist/contracts/capabilities.js.map +1 -0
- package/dist/contracts/color.d.ts +67 -0
- package/dist/contracts/color.d.ts.map +1 -0
- package/dist/contracts/color.js +83 -0
- package/dist/contracts/color.js.map +1 -0
- package/dist/contracts/definition.d.ts +118 -0
- package/dist/contracts/definition.d.ts.map +1 -0
- package/dist/contracts/definition.js +2 -0
- package/dist/contracts/definition.js.map +1 -0
- package/dist/contracts/document.d.ts +50 -0
- package/dist/contracts/document.d.ts.map +1 -0
- package/dist/contracts/document.js +2 -0
- package/dist/contracts/document.js.map +1 -0
- package/dist/contracts/geometry.d.ts +301 -0
- package/dist/contracts/geometry.d.ts.map +1 -0
- package/dist/contracts/geometry.js +604 -0
- package/dist/contracts/geometry.js.map +1 -0
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/schema.d.ts +6 -0
- package/dist/contracts/schema.d.ts.map +1 -0
- package/dist/contracts/schema.js +85 -0
- package/dist/contracts/schema.js.map +1 -0
- package/dist/contracts/validate.d.ts +13 -0
- package/dist/contracts/validate.d.ts.map +1 -0
- package/dist/contracts/validate.js +202 -0
- package/dist/contracts/validate.js.map +1 -0
- package/dist/contracts/values.d.ts +100 -0
- package/dist/contracts/values.d.ts.map +1 -0
- package/dist/contracts/values.js +59 -0
- package/dist/contracts/values.js.map +1 -0
- package/dist/graphs/default-orig.cascade +128 -0
- package/dist/graphs/default.cascade +21 -0
- package/dist/index.html +19 -0
- package/dist/runtime/browser.d.ts +3 -0
- package/dist/runtime/browser.d.ts.map +1 -0
- package/dist/runtime/browser.js +12 -0
- package/dist/runtime/browser.js.map +1 -0
- package/dist/runtime/builtins/core/index.d.ts +9 -0
- package/dist/runtime/builtins/core/index.d.ts.map +1 -0
- package/dist/runtime/builtins/core/index.js +21 -0
- package/dist/runtime/builtins/core/index.js.map +1 -0
- package/dist/runtime/builtins/core/random.d.ts +66 -0
- package/dist/runtime/builtins/core/random.d.ts.map +1 -0
- package/dist/runtime/builtins/core/random.js +46 -0
- package/dist/runtime/builtins/core/random.js.map +1 -0
- package/dist/runtime/builtins/core/remap.d.ts +105 -0
- package/dist/runtime/builtins/core/remap.d.ts.map +1 -0
- package/dist/runtime/builtins/core/remap.js +43 -0
- package/dist/runtime/builtins/core/remap.js.map +1 -0
- package/dist/runtime/builtins/core/routing.d.ts +117 -0
- package/dist/runtime/builtins/core/routing.d.ts.map +1 -0
- package/dist/runtime/builtins/core/routing.js +114 -0
- package/dist/runtime/builtins/core/routing.js.map +1 -0
- package/dist/runtime/builtins/core/structural.d.ts +86 -0
- package/dist/runtime/builtins/core/structural.d.ts.map +1 -0
- package/dist/runtime/builtins/core/structural.js +63 -0
- package/dist/runtime/builtins/core/structural.js.map +1 -0
- package/dist/runtime/builtins/geo/copyToPoints.d.ts +58 -0
- package/dist/runtime/builtins/geo/copyToPoints.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/copyToPoints.js +35 -0
- package/dist/runtime/builtins/geo/copyToPoints.js.map +1 -0
- package/dist/runtime/builtins/geo/definitions.d.ts +526 -0
- package/dist/runtime/builtins/geo/definitions.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/definitions.js +182 -0
- package/dist/runtime/builtins/geo/definitions.js.map +1 -0
- package/dist/runtime/builtins/geo/generators.d.ts +94 -0
- package/dist/runtime/builtins/geo/generators.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/generators.js +41 -0
- package/dist/runtime/builtins/geo/generators.js.map +1 -0
- package/dist/runtime/builtins/geo/index.d.ts +23 -0
- package/dist/runtime/builtins/geo/index.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/index.js +35 -0
- package/dist/runtime/builtins/geo/index.js.map +1 -0
- package/dist/runtime/builtins/geo/merge.d.ts +40 -0
- package/dist/runtime/builtins/geo/merge.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/merge.js +24 -0
- package/dist/runtime/builtins/geo/merge.js.map +1 -0
- package/dist/runtime/builtins/geo/namespace.d.ts +15 -0
- package/dist/runtime/builtins/geo/namespace.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/namespace.js +17 -0
- package/dist/runtime/builtins/geo/namespace.js.map +1 -0
- package/dist/runtime/builtins/geo/svgExport.d.ts +130 -0
- package/dist/runtime/builtins/geo/svgExport.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/svgExport.js +50 -0
- package/dist/runtime/builtins/geo/svgExport.js.map +1 -0
- package/dist/runtime/builtins/geo/transform.d.ts +60 -0
- package/dist/runtime/builtins/geo/transform.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/transform.js +32 -0
- package/dist/runtime/builtins/geo/transform.js.map +1 -0
- package/dist/runtime/builtins/index.d.ts +9 -0
- package/dist/runtime/builtins/index.d.ts.map +1 -0
- package/dist/runtime/builtins/index.js +16 -0
- package/dist/runtime/builtins/index.js.map +1 -0
- package/dist/runtime/definition/architecture.d.ts +8 -0
- package/dist/runtime/definition/architecture.d.ts.map +1 -0
- package/dist/runtime/definition/architecture.js +112 -0
- package/dist/runtime/definition/architecture.js.map +1 -0
- package/dist/runtime/definition/extract.d.ts +12 -0
- package/dist/runtime/definition/extract.d.ts.map +1 -0
- package/dist/runtime/definition/extract.js +151 -0
- package/dist/runtime/definition/extract.js.map +1 -0
- package/dist/runtime/error.d.ts +8 -0
- package/dist/runtime/error.d.ts.map +1 -0
- package/dist/runtime/error.js +11 -0
- package/dist/runtime/error.js.map +1 -0
- package/dist/runtime/geometry/attributes.d.ts +65 -0
- package/dist/runtime/geometry/attributes.d.ts.map +1 -0
- package/dist/runtime/geometry/attributes.js +201 -0
- package/dist/runtime/geometry/attributes.js.map +1 -0
- package/dist/runtime/geometry/builder.d.ts +57 -0
- package/dist/runtime/geometry/builder.d.ts.map +1 -0
- package/dist/runtime/geometry/builder.js +153 -0
- package/dist/runtime/geometry/builder.js.map +1 -0
- package/dist/runtime/geometry/copy.d.ts +36 -0
- package/dist/runtime/geometry/copy.d.ts.map +1 -0
- package/dist/runtime/geometry/copy.js +68 -0
- package/dist/runtime/geometry/copy.js.map +1 -0
- package/dist/runtime/geometry/generate.d.ts +43 -0
- package/dist/runtime/geometry/generate.d.ts.map +1 -0
- package/dist/runtime/geometry/generate.js +76 -0
- package/dist/runtime/geometry/generate.js.map +1 -0
- package/dist/runtime/geometry/groups.d.ts +18 -0
- package/dist/runtime/geometry/groups.d.ts.map +1 -0
- package/dist/runtime/geometry/groups.js +69 -0
- package/dist/runtime/geometry/groups.js.map +1 -0
- package/dist/runtime/geometry/index.d.ts +23 -0
- package/dist/runtime/geometry/index.d.ts.map +1 -0
- package/dist/runtime/geometry/index.js +23 -0
- package/dist/runtime/geometry/index.js.map +1 -0
- package/dist/runtime/geometry/matrix.d.ts +26 -0
- package/dist/runtime/geometry/matrix.d.ts.map +1 -0
- package/dist/runtime/geometry/matrix.js +27 -0
- package/dist/runtime/geometry/matrix.js.map +1 -0
- package/dist/runtime/geometry/merge.d.ts +33 -0
- package/dist/runtime/geometry/merge.d.ts.map +1 -0
- package/dist/runtime/geometry/merge.js +185 -0
- package/dist/runtime/geometry/merge.js.map +1 -0
- package/dist/runtime/geometry/primitives.d.ts +41 -0
- package/dist/runtime/geometry/primitives.d.ts.map +1 -0
- package/dist/runtime/geometry/primitives.js +131 -0
- package/dist/runtime/geometry/primitives.js.map +1 -0
- package/dist/runtime/geometry/promote.d.ts +44 -0
- package/dist/runtime/geometry/promote.d.ts.map +1 -0
- package/dist/runtime/geometry/promote.js +203 -0
- package/dist/runtime/geometry/promote.js.map +1 -0
- package/dist/runtime/geometry/resample.d.ts +29 -0
- package/dist/runtime/geometry/resample.d.ts.map +1 -0
- package/dist/runtime/geometry/resample.js +165 -0
- package/dist/runtime/geometry/resample.js.map +1 -0
- package/dist/runtime/geometry/svg.d.ts +91 -0
- package/dist/runtime/geometry/svg.d.ts.map +1 -0
- package/dist/runtime/geometry/svg.js +216 -0
- package/dist/runtime/geometry/svg.js.map +1 -0
- package/dist/runtime/geometry/transform.d.ts +18 -0
- package/dist/runtime/geometry/transform.d.ts.map +1 -0
- package/dist/runtime/geometry/transform.js +56 -0
- package/dist/runtime/geometry/transform.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/node.d.ts +4 -0
- package/dist/runtime/node.d.ts.map +1 -0
- package/dist/runtime/node.js +12 -0
- package/dist/runtime/node.js.map +1 -0
- package/dist/runtime/runtime.d.ts +3 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +1198 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/types.d.ts +241 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/shell.d.ts +8 -0
- package/dist/shell.js +54 -0
- package/dist/shell.js.map +7 -0
- package/dist/stage.d.ts +7 -0
- package/dist/stage.js +84 -0
- package/dist/stage.js.map +7 -0
- package/dist/studio/panel.d.ts +48 -0
- package/doc/PROJECT_AUTHORING.md +360 -0
- package/package.json +126 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `geometry` core type: one attribute table with four addressing levels.
|
|
3
|
+
*
|
|
4
|
+
* Houdini's model without the pointers. A geometry holds points, vertices,
|
|
5
|
+
* primitives and one detail record, and every named attribute lives at one of
|
|
6
|
+
* those levels as a flat parallel array. The value of the type is the number of
|
|
7
|
+
* operations that understand it, so it is deliberately one type rather than a
|
|
8
|
+
* family of them: a point cloud is a geometry whose primitive count is zero,
|
|
9
|
+
* and a bundle of strokes is a geometry whose points are covered by primitives.
|
|
10
|
+
* There is nothing to convert between the two.
|
|
11
|
+
*
|
|
12
|
+
* Three forms live here:
|
|
13
|
+
*
|
|
14
|
+
* `Geometry` is the in-memory form over typed arrays. Struct-of-arrays rather
|
|
15
|
+
* than array-of-structs, because the runtime's clone path copies nested plain
|
|
16
|
+
* arrays element by element and passes typed arrays through by reference, and
|
|
17
|
+
* because copy-on-write needs a granularity to share at.
|
|
18
|
+
*
|
|
19
|
+
* `GeometryJson` is the plain-array interchange form, for `.cascade` document
|
|
20
|
+
* literals and the Python bridge. Verbose on purpose and JSON-safe. It is
|
|
21
|
+
* lossless in both directions, including f64 precision, because JSON numbers
|
|
22
|
+
* are doubles and JavaScript prints the shortest round-trippable form.
|
|
23
|
+
*
|
|
24
|
+
* `GeometryFileRef` is the out-of-band form, following `ImageRef`: a path plus
|
|
25
|
+
* the metadata a consumer needs before it opens the file. It exists from day
|
|
26
|
+
* one because it is already in production and undeclared, as the Python
|
|
27
|
+
* stipple stage returns an `.npy` path on a `points`-typed port and the next
|
|
28
|
+
* stage reads it back. Resolving a ref into a `Geometry` needs host IO and so
|
|
29
|
+
* belongs to a host capability, exactly as reading `ImageRef` pixels does;
|
|
30
|
+
* neither contracts nor the runtime does it.
|
|
31
|
+
*
|
|
32
|
+
* ## Immutability
|
|
33
|
+
*
|
|
34
|
+
* A `Geometry` is frozen and every operation returns a new one, sharing the
|
|
35
|
+
* typed arrays it did not touch. `freezeGeometry` freezes the plain objects
|
|
36
|
+
* that hold the structure, and it cannot freeze the arrays themselves:
|
|
37
|
+
* `Object.freeze` on a non-empty typed array throws, because a typed array's
|
|
38
|
+
* elements are not configurable properties.
|
|
39
|
+
*
|
|
40
|
+
* So the copy-on-write guarantee is a convention this module keeps and the
|
|
41
|
+
* language cannot enforce, and there is one live interaction worth knowing
|
|
42
|
+
* about. `cloneValue` in `packages/runtime/src/runtime.ts`, the deep clone
|
|
43
|
+
* behind `snapshot`, returns any non-array object whose prototype is neither
|
|
44
|
+
* `Object.prototype` nor `null` by reference, uncloned and unfrozen. A
|
|
45
|
+
* `Geometry` is a plain object, so a snapshot of one is a fresh outer graph
|
|
46
|
+
* whose typed arrays are still the originals, shared with the value the node
|
|
47
|
+
* emitted. That makes emitting a geometry very cheap and it means the
|
|
48
|
+
* "inspection and output values are immutable snapshots" guarantee in
|
|
49
|
+
* ARCHITECTURE.md holds for the structure and not for the sample data. Nothing
|
|
50
|
+
* here relies on the runtime changing: operations never write into an input's
|
|
51
|
+
* array, and node code should reach for the read helpers and the builder rather
|
|
52
|
+
* than an attribute's `data` directly. Do not write into an array you did not
|
|
53
|
+
* allocate.
|
|
54
|
+
*/
|
|
55
|
+
/** Position attribute name, by convention rather than by privilege. */
|
|
56
|
+
export const POSITION_ATTRIBUTE = "P";
|
|
57
|
+
export const ATTRIBUTE_LEVELS = [
|
|
58
|
+
"point",
|
|
59
|
+
"vertex",
|
|
60
|
+
"primitive",
|
|
61
|
+
"detail",
|
|
62
|
+
];
|
|
63
|
+
export const PRIMITIVE_KINDS = ["poly", "bezier", "mesh", "packed"];
|
|
64
|
+
/** Vertices per cubic Bézier segment after the first anchor. */
|
|
65
|
+
export const BEZIER_STRIDE = 3;
|
|
66
|
+
const STORAGES = new Set(["f32", "f64", "i32", "u8"]);
|
|
67
|
+
const NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
68
|
+
const RESERVED_NAMES = new Set(["__proto__", "prototype", "constructor"]);
|
|
69
|
+
function fail(code, message) {
|
|
70
|
+
throw new TypeError(`geometry/${code}: ${message}`);
|
|
71
|
+
}
|
|
72
|
+
function emptyTopology() {
|
|
73
|
+
return {
|
|
74
|
+
vertexPoints: new Int32Array(0),
|
|
75
|
+
offsets: Int32Array.of(0),
|
|
76
|
+
kinds: new Uint8Array(0),
|
|
77
|
+
closed: new Uint8Array(0),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function arrayType(storage) {
|
|
81
|
+
if (storage === "f64")
|
|
82
|
+
return Float64Array;
|
|
83
|
+
if (storage === "f32")
|
|
84
|
+
return Float32Array;
|
|
85
|
+
if (storage === "i32")
|
|
86
|
+
return Int32Array;
|
|
87
|
+
return Uint8Array;
|
|
88
|
+
}
|
|
89
|
+
function validStoredNumber(storage, value) {
|
|
90
|
+
if (!Number.isFinite(value))
|
|
91
|
+
return false;
|
|
92
|
+
if (storage === "f64" || storage === "f32")
|
|
93
|
+
return true;
|
|
94
|
+
if (!Number.isInteger(value))
|
|
95
|
+
return false;
|
|
96
|
+
return storage === "u8"
|
|
97
|
+
? value >= 0 && value <= 255
|
|
98
|
+
: value >= -2147483648 && value <= 2147483647;
|
|
99
|
+
}
|
|
100
|
+
/** Allocate a zeroed array for a storage kind. */
|
|
101
|
+
export function attributeArray(storage, length) {
|
|
102
|
+
if (!Number.isSafeInteger(length) || length < 0)
|
|
103
|
+
fail("attribute-length", "attribute array length must be a non-negative safe integer");
|
|
104
|
+
if (storage === "f64")
|
|
105
|
+
return new Float64Array(length);
|
|
106
|
+
if (storage === "f32")
|
|
107
|
+
return new Float32Array(length);
|
|
108
|
+
if (storage === "i32")
|
|
109
|
+
return new Int32Array(length);
|
|
110
|
+
return new Uint8Array(length);
|
|
111
|
+
}
|
|
112
|
+
/** Copy values into a fresh array of a storage kind. */
|
|
113
|
+
export function attributeArrayFrom(storage, values) {
|
|
114
|
+
const array = attributeArray(storage, values.length);
|
|
115
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
116
|
+
const value = values[index];
|
|
117
|
+
if (!validStoredNumber(storage, value))
|
|
118
|
+
fail("attribute-value", `${String(value)} cannot be represented as ${storage}`);
|
|
119
|
+
array[index] = value;
|
|
120
|
+
if (!Number.isFinite(array[index]))
|
|
121
|
+
fail("attribute-value", `${String(value)} overflows ${storage}`);
|
|
122
|
+
}
|
|
123
|
+
return array;
|
|
124
|
+
}
|
|
125
|
+
/** A plain-number copy of an attribute array, for the interchange form. */
|
|
126
|
+
export function attributeNumbers(data) {
|
|
127
|
+
const result = new Array(data.length);
|
|
128
|
+
for (let index = 0; index < data.length; index += 1)
|
|
129
|
+
result[index] = data[index];
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
export function isStringAttribute(attribute) {
|
|
133
|
+
return attribute.storage === "string";
|
|
134
|
+
}
|
|
135
|
+
/** How many elements an attribute covers, from its own arrays alone. */
|
|
136
|
+
export function attributeElementCount(attribute) {
|
|
137
|
+
return isStringAttribute(attribute)
|
|
138
|
+
? attribute.data.length
|
|
139
|
+
: attribute.data.length / attribute.size;
|
|
140
|
+
}
|
|
141
|
+
/** The number of elements at a level, or 1 for `detail`. */
|
|
142
|
+
export function levelCount(geometry, level) {
|
|
143
|
+
if (level === "point")
|
|
144
|
+
return geometry.pointCount;
|
|
145
|
+
if (level === "vertex")
|
|
146
|
+
return geometry.vertexCount;
|
|
147
|
+
if (level === "primitive")
|
|
148
|
+
return geometry.primitiveCount;
|
|
149
|
+
return 1;
|
|
150
|
+
}
|
|
151
|
+
function checkName(name, path) {
|
|
152
|
+
if (!NAME.test(name) || RESERVED_NAMES.has(name))
|
|
153
|
+
fail("invalid-name", `${path}.${name} is not a valid attribute name`);
|
|
154
|
+
}
|
|
155
|
+
function checkAttributeSet(set, count, level) {
|
|
156
|
+
for (const [name, attribute] of Object.entries(set)) {
|
|
157
|
+
checkName(name, level);
|
|
158
|
+
if (isStringAttribute(attribute)) {
|
|
159
|
+
if (!(attribute.data instanceof Int32Array))
|
|
160
|
+
fail("attribute-storage", `${level}.${name} string indices must be Int32Array`);
|
|
161
|
+
if (attribute.size !== 1)
|
|
162
|
+
fail("string-size", `${level}.${name} string attributes have size 1`);
|
|
163
|
+
if (attribute.data.length !== count)
|
|
164
|
+
fail("attribute-length", `${level}.${name} has ${attribute.data.length} entries for ${count} elements`);
|
|
165
|
+
for (const index of attribute.data)
|
|
166
|
+
if (index < -1 || index >= attribute.table.length)
|
|
167
|
+
fail("string-index", `${level}.${name} references table entry ${index}`);
|
|
168
|
+
if (!Array.isArray(attribute.table) || attribute.table.some((item) => typeof item !== "string"))
|
|
169
|
+
fail("string-table", `${level}.${name} needs a string table`);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!Number.isInteger(attribute.size) || attribute.size < 1)
|
|
173
|
+
fail("attribute-size", `${level}.${name} needs a size of at least 1`);
|
|
174
|
+
if (!STORAGES.has(attribute.storage))
|
|
175
|
+
fail("attribute-storage", `${level}.${name} has an unknown storage ${String(attribute.storage)}`);
|
|
176
|
+
if (!(attribute.data instanceof arrayType(attribute.storage)))
|
|
177
|
+
fail("attribute-storage", `${level}.${name} declares ${attribute.storage} but uses ${attribute.data?.constructor?.name ?? "unknown storage"}`);
|
|
178
|
+
if (attribute.data.length !== attribute.size * count)
|
|
179
|
+
fail("attribute-length", `${level}.${name} has ${attribute.data.length} values for ${count} elements of size ${attribute.size}`);
|
|
180
|
+
for (const value of attribute.data)
|
|
181
|
+
if (!Number.isFinite(value))
|
|
182
|
+
fail("non-finite", `${level}.${name} contains ${String(value)}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function checkGroups(groups, count, level) {
|
|
186
|
+
for (const [name, mask] of Object.entries(groups)) {
|
|
187
|
+
checkName(name, level);
|
|
188
|
+
if (mask.length !== count)
|
|
189
|
+
fail("group-length", `${level}.${name} covers ${mask.length} of ${count} elements`);
|
|
190
|
+
for (const member of mask)
|
|
191
|
+
if (member !== 0 && member !== 1)
|
|
192
|
+
fail("group-mask", `${level}.${name} contains ${member}; masks contain only 0 or 1`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The validating constructor. Every invariant the operations rely on is checked
|
|
197
|
+
* here once, so that no operation has to defend against a malformed input, and
|
|
198
|
+
* the result is frozen.
|
|
199
|
+
*
|
|
200
|
+
* This is the one piece of logic contracts owns for this type, because the
|
|
201
|
+
* codec below has to build a `Geometry` and a type whose invariants are
|
|
202
|
+
* enforced somewhere else is a type whose invariants are optional.
|
|
203
|
+
*/
|
|
204
|
+
export function createGeometry(parts) {
|
|
205
|
+
const pointCount = parts.pointCount;
|
|
206
|
+
if (!Number.isSafeInteger(pointCount) || pointCount < 0)
|
|
207
|
+
fail("point-count", "pointCount must be a non-negative safe integer");
|
|
208
|
+
const topology = parts.topology ?? emptyTopology();
|
|
209
|
+
if (!(topology.vertexPoints instanceof Int32Array) ||
|
|
210
|
+
!(topology.offsets instanceof Int32Array) ||
|
|
211
|
+
!(topology.kinds instanceof Uint8Array) ||
|
|
212
|
+
!(topology.closed instanceof Uint8Array))
|
|
213
|
+
fail("topology-storage", "topology uses Int32Array indices and Uint8Array flags");
|
|
214
|
+
const primitiveCount = topology.offsets.length - 1;
|
|
215
|
+
if (primitiveCount < 0)
|
|
216
|
+
fail("offsets", "topology.offsets needs primitiveCount + 1 entries");
|
|
217
|
+
if (topology.offsets[0] !== 0)
|
|
218
|
+
fail("offsets", "topology.offsets starts at 0");
|
|
219
|
+
for (let index = 1; index <= primitiveCount; index += 1)
|
|
220
|
+
if (topology.offsets[index] < topology.offsets[index - 1])
|
|
221
|
+
fail("offsets", "topology.offsets must not decrease");
|
|
222
|
+
const vertexCount = topology.offsets[primitiveCount];
|
|
223
|
+
if (vertexCount !== topology.vertexPoints.length)
|
|
224
|
+
fail("offsets", `topology.offsets ends at ${vertexCount} for ${topology.vertexPoints.length} vertices`);
|
|
225
|
+
if (topology.kinds.length !== primitiveCount ||
|
|
226
|
+
topology.closed.length !== primitiveCount)
|
|
227
|
+
fail("topology-length", `topology.kinds and topology.closed need ${primitiveCount} entries`);
|
|
228
|
+
for (const point of topology.vertexPoints)
|
|
229
|
+
if (point < 0 || point >= pointCount)
|
|
230
|
+
fail("vertex-point", `vertex references point ${point}`);
|
|
231
|
+
for (const kind of topology.kinds)
|
|
232
|
+
if (kind >= PRIMITIVE_KINDS.length)
|
|
233
|
+
fail("primitive-kind", `unknown primitive kind ${kind}`);
|
|
234
|
+
for (const closed of topology.closed)
|
|
235
|
+
if (closed !== 0 && closed !== 1)
|
|
236
|
+
fail("closed-mask", `topology.closed contains ${closed}; flags contain only 0 or 1`);
|
|
237
|
+
// A Bézier chain's vertex count is not free: the handles are vertices too, so
|
|
238
|
+
// an arity mistake here is a malformed curve that every later operation would
|
|
239
|
+
// read as a valid one.
|
|
240
|
+
const bezier = PRIMITIVE_KINDS.indexOf("bezier");
|
|
241
|
+
for (let index = 0; index < primitiveCount; index += 1) {
|
|
242
|
+
if (topology.kinds[index] !== bezier)
|
|
243
|
+
continue;
|
|
244
|
+
const count = topology.offsets[index + 1] - topology.offsets[index];
|
|
245
|
+
const closed = topology.closed[index] === 1;
|
|
246
|
+
const minimum = closed ? BEZIER_STRIDE : BEZIER_STRIDE + 1;
|
|
247
|
+
if (count < minimum || (count - (closed ? 0 : 1)) % BEZIER_STRIDE !== 0)
|
|
248
|
+
fail("bezier-arity", `primitive ${index} has ${count} vertices, and a ${closed ? "closed" : "open"} bezier needs ${closed ? "3n" : "3n + 1"}`);
|
|
249
|
+
}
|
|
250
|
+
const point = parts.point;
|
|
251
|
+
const position = point[POSITION_ATTRIBUTE];
|
|
252
|
+
if (position === undefined)
|
|
253
|
+
fail("missing-position", "point.P is required on every geometry");
|
|
254
|
+
if (isStringAttribute(position))
|
|
255
|
+
fail("position-storage", "point.P must be a numeric attribute");
|
|
256
|
+
if (position.size !== 2 && position.size !== 3)
|
|
257
|
+
fail("position-size", "point.P must have a size of 2 or 3");
|
|
258
|
+
checkAttributeSet(point, pointCount, "point");
|
|
259
|
+
const vertex = parts.vertex ?? {};
|
|
260
|
+
checkAttributeSet(vertex, vertexCount, "vertex");
|
|
261
|
+
const primitive = parts.primitive ?? {};
|
|
262
|
+
checkAttributeSet(primitive, primitiveCount, "primitive");
|
|
263
|
+
const pointGroups = parts.pointGroups ?? {};
|
|
264
|
+
checkGroups(pointGroups, pointCount, "pointGroups");
|
|
265
|
+
const primitiveGroups = parts.primitiveGroups ?? {};
|
|
266
|
+
checkGroups(primitiveGroups, primitiveCount, "primitiveGroups");
|
|
267
|
+
const detail = parts.detail ?? {};
|
|
268
|
+
for (const [name, value] of Object.entries(detail)) {
|
|
269
|
+
checkName(name, "detail");
|
|
270
|
+
if (typeof value === "number") {
|
|
271
|
+
if (!Number.isFinite(value))
|
|
272
|
+
fail("non-finite", `detail.${name} contains ${String(value)}`);
|
|
273
|
+
}
|
|
274
|
+
else if (typeof value !== "string") {
|
|
275
|
+
if (!Array.isArray(value) || value.some((item) => !Number.isFinite(item)))
|
|
276
|
+
fail("detail-value", `detail.${name} must be a finite number, string, or finite number array`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return freezeGeometry({
|
|
280
|
+
kind: "geometry",
|
|
281
|
+
pointCount,
|
|
282
|
+
vertexCount,
|
|
283
|
+
primitiveCount,
|
|
284
|
+
topology,
|
|
285
|
+
point,
|
|
286
|
+
vertex,
|
|
287
|
+
primitive,
|
|
288
|
+
detail,
|
|
289
|
+
pointGroups,
|
|
290
|
+
primitiveGroups,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Freeze the plain objects that describe a geometry. The typed arrays are left
|
|
295
|
+
* alone because `Object.freeze` throws on a non-empty array buffer view, which
|
|
296
|
+
* is why the copy-on-write rule above is a convention rather than a guarantee.
|
|
297
|
+
*/
|
|
298
|
+
export function freezeGeometry(geometry) {
|
|
299
|
+
for (const level of ["point", "vertex", "primitive"]) {
|
|
300
|
+
const set = geometry[level];
|
|
301
|
+
for (const attribute of Object.values(set)) {
|
|
302
|
+
if (isStringAttribute(attribute))
|
|
303
|
+
Object.freeze(attribute.table);
|
|
304
|
+
Object.freeze(attribute);
|
|
305
|
+
}
|
|
306
|
+
Object.freeze(set);
|
|
307
|
+
}
|
|
308
|
+
Object.freeze(geometry.topology);
|
|
309
|
+
for (const value of Object.values(geometry.detail))
|
|
310
|
+
if (Array.isArray(value))
|
|
311
|
+
Object.freeze(value);
|
|
312
|
+
Object.freeze(geometry.detail);
|
|
313
|
+
Object.freeze(geometry.pointGroups);
|
|
314
|
+
Object.freeze(geometry.primitiveGroups);
|
|
315
|
+
return Object.freeze(geometry);
|
|
316
|
+
}
|
|
317
|
+
/** An empty geometry with a declared position width and no points. */
|
|
318
|
+
export function emptyGeometry(positionSize = 2) {
|
|
319
|
+
return createGeometry({
|
|
320
|
+
pointCount: 0,
|
|
321
|
+
point: {
|
|
322
|
+
[POSITION_ATTRIBUTE]: {
|
|
323
|
+
storage: "f64",
|
|
324
|
+
size: positionSize,
|
|
325
|
+
data: new Float64Array(0),
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
function isRecord(value) {
|
|
331
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
332
|
+
}
|
|
333
|
+
function finiteNumbers(value) {
|
|
334
|
+
return (Array.isArray(value) &&
|
|
335
|
+
value.every((item) => typeof item === "number" && Number.isFinite(item)));
|
|
336
|
+
}
|
|
337
|
+
function toJsonAttribute(attribute) {
|
|
338
|
+
if (isStringAttribute(attribute))
|
|
339
|
+
return {
|
|
340
|
+
storage: "string",
|
|
341
|
+
size: 1,
|
|
342
|
+
table: [...attribute.table],
|
|
343
|
+
data: Array.from(attribute.data),
|
|
344
|
+
};
|
|
345
|
+
const data = attributeNumbers(attribute.data);
|
|
346
|
+
for (const item of data)
|
|
347
|
+
if (!Number.isFinite(item))
|
|
348
|
+
fail("non-finite", "geometry attribute values must be finite");
|
|
349
|
+
return { storage: attribute.storage, size: attribute.size, data };
|
|
350
|
+
}
|
|
351
|
+
function toJsonAttributeSet(set) {
|
|
352
|
+
const names = Object.keys(set);
|
|
353
|
+
if (names.length === 0)
|
|
354
|
+
return undefined;
|
|
355
|
+
const result = {};
|
|
356
|
+
for (const name of names)
|
|
357
|
+
result[name] = toJsonAttribute(set[name]);
|
|
358
|
+
return result;
|
|
359
|
+
}
|
|
360
|
+
function groupsToJson(groups) {
|
|
361
|
+
const names = Object.keys(groups);
|
|
362
|
+
if (names.length === 0)
|
|
363
|
+
return undefined;
|
|
364
|
+
const result = {};
|
|
365
|
+
for (const name of names) {
|
|
366
|
+
const mask = groups[name];
|
|
367
|
+
const indices = [];
|
|
368
|
+
for (let index = 0; index < mask.length; index += 1)
|
|
369
|
+
if (mask[index])
|
|
370
|
+
indices.push(index);
|
|
371
|
+
result[name] = indices;
|
|
372
|
+
}
|
|
373
|
+
return result;
|
|
374
|
+
}
|
|
375
|
+
/** In-memory to interchange. Lossless, and JSON-safe. */
|
|
376
|
+
export function geometryToJson(geometry) {
|
|
377
|
+
const json = { kind: "geometry", pointCount: geometry.pointCount };
|
|
378
|
+
const point = toJsonAttributeSet(geometry.point);
|
|
379
|
+
if (point)
|
|
380
|
+
json.point = point;
|
|
381
|
+
const vertex = toJsonAttributeSet(geometry.vertex);
|
|
382
|
+
if (vertex)
|
|
383
|
+
json.vertex = vertex;
|
|
384
|
+
const primitive = toJsonAttributeSet(geometry.primitive);
|
|
385
|
+
if (primitive)
|
|
386
|
+
json.primitive = primitive;
|
|
387
|
+
if (Object.keys(geometry.detail).length > 0) {
|
|
388
|
+
const detail = {};
|
|
389
|
+
for (const [name, value] of Object.entries(geometry.detail))
|
|
390
|
+
detail[name] = Array.isArray(value) ? [...value] : value;
|
|
391
|
+
json.detail = detail;
|
|
392
|
+
}
|
|
393
|
+
if (geometry.primitiveCount > 0) {
|
|
394
|
+
const topology = {
|
|
395
|
+
vertexPoints: Array.from(geometry.topology.vertexPoints),
|
|
396
|
+
offsets: Array.from(geometry.topology.offsets),
|
|
397
|
+
};
|
|
398
|
+
if (geometry.topology.kinds.some((kind) => kind !== 0))
|
|
399
|
+
topology.kinds = Array.from(geometry.topology.kinds);
|
|
400
|
+
if (geometry.topology.closed.some((closed) => closed !== 0))
|
|
401
|
+
topology.closed = Array.from(geometry.topology.closed);
|
|
402
|
+
json.topology = topology;
|
|
403
|
+
}
|
|
404
|
+
const pointGroups = groupsToJson(geometry.pointGroups);
|
|
405
|
+
if (pointGroups)
|
|
406
|
+
json.pointGroups = pointGroups;
|
|
407
|
+
const primitiveGroups = groupsToJson(geometry.primitiveGroups);
|
|
408
|
+
if (primitiveGroups)
|
|
409
|
+
json.primitiveGroups = primitiveGroups;
|
|
410
|
+
return json;
|
|
411
|
+
}
|
|
412
|
+
function fromJsonAttributeSet(raw, level) {
|
|
413
|
+
if (raw === undefined)
|
|
414
|
+
return {};
|
|
415
|
+
const result = {};
|
|
416
|
+
for (const [name, attribute] of Object.entries(raw)) {
|
|
417
|
+
if (!isRecord(attribute))
|
|
418
|
+
fail("attribute-shape", `${level}.${name} must be an object`);
|
|
419
|
+
if (attribute.storage === "string") {
|
|
420
|
+
const table = attribute.table;
|
|
421
|
+
if (!Array.isArray(table) ||
|
|
422
|
+
table.some((item) => typeof item !== "string"))
|
|
423
|
+
fail("string-table", `${level}.${name} needs a string table`);
|
|
424
|
+
if (!int32Numbers(attribute.data))
|
|
425
|
+
fail("attribute-data", `${level}.${name} needs 32-bit integer indices`);
|
|
426
|
+
result[name] = {
|
|
427
|
+
storage: "string",
|
|
428
|
+
size: 1,
|
|
429
|
+
table: [...table],
|
|
430
|
+
data: Int32Array.from(attribute.data),
|
|
431
|
+
};
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
if (typeof attribute.storage !== "string" ||
|
|
435
|
+
!STORAGES.has(attribute.storage))
|
|
436
|
+
fail("attribute-storage", `${level}.${name} has an unknown storage ${String(attribute.storage)}`);
|
|
437
|
+
if (!finiteNumbers(attribute.data))
|
|
438
|
+
fail("attribute-data", `${level}.${name} needs finite numeric data`);
|
|
439
|
+
const size = attribute.size;
|
|
440
|
+
if (typeof size !== "number" || !Number.isInteger(size) || size < 1)
|
|
441
|
+
fail("attribute-size", `${level}.${name} needs a size of at least 1`);
|
|
442
|
+
result[name] = {
|
|
443
|
+
storage: attribute.storage,
|
|
444
|
+
size,
|
|
445
|
+
data: attributeArrayFrom(attribute.storage, attribute.data),
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
function groupsFromJson(raw, count, level) {
|
|
451
|
+
if (raw === undefined)
|
|
452
|
+
return {};
|
|
453
|
+
const result = {};
|
|
454
|
+
for (const [name, indices] of Object.entries(raw)) {
|
|
455
|
+
if (!finiteNumbers(indices))
|
|
456
|
+
fail("group-indices", `${level}.${name} must be a list of indices`);
|
|
457
|
+
const mask = new Uint8Array(count);
|
|
458
|
+
for (const index of indices) {
|
|
459
|
+
if (!Number.isInteger(index) || index < 0 || index >= count)
|
|
460
|
+
fail("group-indices", `${level}.${name} references element ${index}`);
|
|
461
|
+
mask[index] = 1;
|
|
462
|
+
}
|
|
463
|
+
result[name] = mask;
|
|
464
|
+
}
|
|
465
|
+
return result;
|
|
466
|
+
}
|
|
467
|
+
/** Interchange to in-memory. Throws a `geometry/*` TypeError on bad input. */
|
|
468
|
+
export function geometryFromJson(value) {
|
|
469
|
+
if (!isRecord(value) || value.kind !== "geometry")
|
|
470
|
+
fail("not-geometry", "a geometry literal needs kind: 'geometry'");
|
|
471
|
+
const pointCount = value.pointCount;
|
|
472
|
+
if (!Number.isSafeInteger(pointCount) || pointCount < 0)
|
|
473
|
+
fail("point-count", "pointCount must be a non-negative safe integer");
|
|
474
|
+
const rawTopology = value.topology;
|
|
475
|
+
let topology = emptyTopology();
|
|
476
|
+
if (rawTopology !== undefined) {
|
|
477
|
+
if (!isRecord(rawTopology))
|
|
478
|
+
fail("topology-shape", "topology must be an object");
|
|
479
|
+
if (!int32Numbers(rawTopology.vertexPoints) ||
|
|
480
|
+
!int32Numbers(rawTopology.offsets))
|
|
481
|
+
fail("topology-shape", "topology needs vertexPoints and offsets");
|
|
482
|
+
const primitiveCount = rawTopology.offsets.length - 1;
|
|
483
|
+
if (primitiveCount < 0)
|
|
484
|
+
fail("offsets", "topology.offsets needs primitiveCount + 1 entries");
|
|
485
|
+
const kinds = rawTopology.kinds;
|
|
486
|
+
const closed = rawTopology.closed;
|
|
487
|
+
if (kinds !== undefined && !byteNumbers(kinds))
|
|
488
|
+
fail("topology-shape", "topology.kinds must be numeric");
|
|
489
|
+
if (closed !== undefined && (!byteNumbers(closed) || closed.some((item) => item !== 0 && item !== 1)))
|
|
490
|
+
fail("topology-shape", "topology.closed must be numeric");
|
|
491
|
+
topology = {
|
|
492
|
+
vertexPoints: Int32Array.from(rawTopology.vertexPoints),
|
|
493
|
+
offsets: Int32Array.from(rawTopology.offsets),
|
|
494
|
+
kinds: kinds === undefined
|
|
495
|
+
? new Uint8Array(primitiveCount)
|
|
496
|
+
: Uint8Array.from(kinds),
|
|
497
|
+
closed: closed === undefined
|
|
498
|
+
? new Uint8Array(primitiveCount)
|
|
499
|
+
: Uint8Array.from(closed),
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
const detail = {};
|
|
503
|
+
for (const [name, item] of Object.entries(value.detail ?? {})) {
|
|
504
|
+
if (typeof item === "number" || typeof item === "string")
|
|
505
|
+
detail[name] = item;
|
|
506
|
+
else if (finiteNumbers(item))
|
|
507
|
+
detail[name] = [...item];
|
|
508
|
+
else
|
|
509
|
+
fail("detail-value", `detail.${name} must be a number, string, or number array`);
|
|
510
|
+
}
|
|
511
|
+
return createGeometry({
|
|
512
|
+
pointCount,
|
|
513
|
+
point: fromJsonAttributeSet(value.point, "point"),
|
|
514
|
+
vertex: fromJsonAttributeSet(value.vertex, "vertex"),
|
|
515
|
+
primitive: fromJsonAttributeSet(value.primitive, "primitive"),
|
|
516
|
+
detail,
|
|
517
|
+
topology,
|
|
518
|
+
pointGroups: groupsFromJson(value.pointGroups, pointCount, "pointGroups"),
|
|
519
|
+
primitiveGroups: groupsFromJson(value.primitiveGroups, topology.offsets.length - 1, "primitiveGroups"),
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Validate an interchange value against the same constructor used to decode it.
|
|
524
|
+
* Keeping a second structural validator here previously accepted bad attribute
|
|
525
|
+
* lengths, fractional topology indices and out-of-range groups.
|
|
526
|
+
*/
|
|
527
|
+
export function isGeometryJson(value) {
|
|
528
|
+
try {
|
|
529
|
+
geometryFromJson(value);
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
export function isGeometryFileRef(value) {
|
|
537
|
+
if (!isRecord(value) || value.kind !== "geometry-file")
|
|
538
|
+
return false;
|
|
539
|
+
if (typeof value.path !== "string" || value.path.length === 0)
|
|
540
|
+
return false;
|
|
541
|
+
if (value.format !== "npy" && value.format !== "json")
|
|
542
|
+
return false;
|
|
543
|
+
if (value.format === "npy" && value.attribute === undefined)
|
|
544
|
+
return false;
|
|
545
|
+
if (value.attribute !== undefined) {
|
|
546
|
+
const attribute = value.attribute;
|
|
547
|
+
if (!isRecord(attribute))
|
|
548
|
+
return false;
|
|
549
|
+
if (attribute.level !== "point" &&
|
|
550
|
+
attribute.level !== "vertex" &&
|
|
551
|
+
attribute.level !== "primitive")
|
|
552
|
+
return false;
|
|
553
|
+
if (typeof attribute.name !== "string" ||
|
|
554
|
+
!NAME.test(attribute.name) ||
|
|
555
|
+
RESERVED_NAMES.has(attribute.name))
|
|
556
|
+
return false;
|
|
557
|
+
if (typeof attribute.size !== "number" ||
|
|
558
|
+
!Number.isInteger(attribute.size) ||
|
|
559
|
+
attribute.size < 1)
|
|
560
|
+
return false;
|
|
561
|
+
if (typeof attribute.storage !== "string" ||
|
|
562
|
+
!STORAGES.has(attribute.storage))
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
for (const key of ["pointCount", "primitiveCount"]) {
|
|
566
|
+
const count = value[key];
|
|
567
|
+
if (count !== undefined &&
|
|
568
|
+
(typeof count !== "number" || !Number.isSafeInteger(count) || count < 0))
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
return true;
|
|
572
|
+
}
|
|
573
|
+
/** Either serialized form is a valid `geometry` document value or default. */
|
|
574
|
+
export function isGeometrySerialized(value) {
|
|
575
|
+
return isGeometryJson(value) || isGeometryFileRef(value);
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Lift a bare path into a declared reference. The Python bridge returns a path
|
|
579
|
+
* string today, and this is the one place that knows how to read an extension;
|
|
580
|
+
* `attribute` is never guessed, because the third component of a points file
|
|
581
|
+
* means radius in one project and z in another.
|
|
582
|
+
*/
|
|
583
|
+
export function geometryFileRefFromPath(path, options = {}) {
|
|
584
|
+
const lower = path.toLowerCase();
|
|
585
|
+
const format = lower.endsWith(".npy")
|
|
586
|
+
? "npy"
|
|
587
|
+
: lower.endsWith(".json")
|
|
588
|
+
? "json"
|
|
589
|
+
: fail("unknown-format", `cannot tell a geometry format from ${path}`);
|
|
590
|
+
const ref = { kind: "geometry-file", path, format, ...options };
|
|
591
|
+
if (!isGeometryFileRef(ref))
|
|
592
|
+
fail("file-reference", `${format} geometry reference is missing or has invalid metadata`);
|
|
593
|
+
return ref;
|
|
594
|
+
}
|
|
595
|
+
function integerNumbers(value) {
|
|
596
|
+
return finiteNumbers(value) && value.every(Number.isSafeInteger);
|
|
597
|
+
}
|
|
598
|
+
function int32Numbers(value) {
|
|
599
|
+
return integerNumbers(value) && value.every((item) => item >= -2147483648 && item <= 2147483647);
|
|
600
|
+
}
|
|
601
|
+
function byteNumbers(value) {
|
|
602
|
+
return integerNumbers(value) && value.every((item) => item >= 0 && item <= 255);
|
|
603
|
+
}
|
|
604
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./capabilities.js";
|
|
2
|
+
export * from "./color.js";
|
|
3
|
+
export * from "./definition.js";
|
|
4
|
+
export * from "./document.js";
|
|
5
|
+
export * from "./geometry.js";
|
|
6
|
+
export * from "./validate.js";
|
|
7
|
+
export * from "./values.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|