@huukhanhnguyen/model / schema
schema
AnalyzeConfig
AnalyzeConfig =
SweepConfig|OptimizeConfig|MonteCarloConfig
Design-study vocabulary — sweep / optimize / Monte-Carlo configs and their result tables. Pure records: the runner (@huukhanhnguyen/model) reads them, nothing here holds a live graph object.
AnalyzeMode
AnalyzeMode =
"sweep"|"optimize"|"monteCarlo"
AnalyzeProgress
AnalyzeProgress = (
done,total) =>void
Parameters
done
number
total
number
Returns
void
AnalyzeRunResult
AnalyzeRunResult =
AnalyzeTable|OptimizeResult|MonteCarloResult
AnalyzeTable
AnalyzeTable = {
columns:string[];rows:unknown[][]; }
columns
columns:
string[]
rows
rows:
unknown[][]
AreaUnit
AreaUnit =
"mm2"|"cm2"|"m2"|"in2"|"ft2"
Argument
Argument = {
input:string;key:string;label?:string;max?:string;min?:string;options?:Option[];step?:string; }
input
input:
string
ALWAYS an expression string — an object-shaped VALUE (e.g. placeComponent's args override) is authored as expression-string SYNTAX like "{ width: 500 }", never a raw JS object. Empty is allowed (file parameter with no file selected); validity is enforced by validateExpressions().
key
key:
string
label?
optionallabel?:string
max?
optionalmax?:string
min?
optionalmin?:string
Constraint fields — parameter args (numeric methods) only; ignored elsewhere.
options?
optionaloptions?:Option[]
step?
optionalstep?:string
BaseObjectJSON
BaseObjectJSON = {
attributes:Record<string,unknown>;id:string; }
The two data shapes at the base of the model runtime's object graph. The live pieces (Notifier, BaseCollection, the pull-cell bookkeeping) stay in @huukhanhnguyen/model — they describe behavior, not a record.
attributes
attributes:
Record<string,unknown>
id
id:
string
BoundingBox
Axis-aligned box in 3D (default space). Same stem as geometry BoundingBox ops namespace (type/value dual). Plane twin: BoundingBox2d (core2d.ts).
Structured form used at package boundaries (min/max points). The wasm kernel wire remains flat [minX,minY,minZ,maxX,maxY,maxZ] on op returns — convert at the door when needed.
max
max:
Point
min
min:
Point
CameraData
CameraData =
PerspectiveCamera|OrthographicCamera
A camera. Which PROJECTION it is follows from WHICH FIELD IS PRESENT, the way a block's behaviors are enabled by being present. This is not the object's kind: CameraObject.type is explicit, never sniffed. Both fields at once, or neither, is not a camera; the union says so in TypeScript, and the model package's validation says so for JSON, which can still express it.
Absent by the same rule: zoom (a three.js viewport knob, absent from glTF, USD, BCF and USD's own GfCamera) and any sensor / film back / focal length (fov is an angle and needs no length unit; a film back is an EXPORTER convention — USD's camera carries one — never a scene fact).
Component
Component = {
animations?:Chain[];entities?:unknown[];flat?:boolean;key:string;label?:string;opening?: (DataStep|Group)[];operations: (DataStep|Group)[];parameters?: (Operation|Group)[]; }
A reusable DEFINITION — 2D or 3D. key is unique within the components[] lane (per-lane uniqueness via uniqueKeyArray — not a model-wide key space shared with parameters/operations). Placed via placeComponent in an ordinary 3D chain (root scene / another component's body): a real instanced GROUP placement + the opening cut. NOT on paper — a sheet places a VIEW (a views[] entry with a viewDetail head), never a definition (2026-07-26).
Flatness contract: DECLARED (flat: true on this record — the ONLY flat declaration there is, since a step cannot declare itself flat), NEVER inferred from content. A declared-flat component enforces the flat contract over its whole body (FLAT_LANE_METHODS, point-arg z=0, force-flatten created documents) so a slider cannot silently un-flatten it.
animations?
optionalanimations?:Chain[]
Animation chains scoped to this component — track nodes fold to AnimationClip + Track exactly like ModelJSON.animations, and materialize per placement. An animation importer would author track NODES here.
entities?
optionalentities?:unknown[]
Baked static geometry (import/AI) — plain ObjectData, never an expression. Spliced by placeComponent alongside evaluated operations. A component may have baked content, authored content, or both; only entities (empty operations) is a valid imported asset.
flat?
optionalflat?:boolean
Chain-level flat declaration — with ModelJSON.flat and the "flat" LANE, one of the only three ways 2D context is established. When true, the whole operations body runs under the flat contract (vocabulary gate + z=0 point args + force-flatten). Empty operations is valid. opening under flat is meaningless (validate warning).
key
key:
string
label?
optionallabel?:string
Editor-chrome display name (not printed on the artifact — see model's title-vs-label law).
opening?
Optional cut volumes — evaluated in the SAME isolated scope + args, with the SAME placement transform (at/rotate/scale) as the body. THE OPENING LAW (cut-at-placement): in an ordinary 3D chain, each placeComponent step SUBTRACTS these (closed solid) volumes from the stream documents PRESENT BEFORE that step in that SAME chain (a wall placed earlier gets a doorway cut through it; a wall placed AFTER is unaffected — "what is behind does not know"). The opening volumes themselves never render and never flow downstream — they exist only to cut. Ignored entirely in a FLAT placement context (no volume to cut there). Meaningless when flat: true (validate warning).
operations
The component's own body — a data-streaming chain. Lane "component" when undeclared; when flat: true, the whole body is flat-enforced. Undeclared means 3D — flatness is never inferred from content.
parameters?
This component's own input arguments — a function signature. Evaluated in an ISOLATED scope (never sees the host model's parameters[]); a placement's args overrides these by key, so the SAME component placed twice can render differently. Value methods only (length/number/…).
Convention
Convention<
D> = {checkFacts?:ConventionFinding[];default:D;docId:string;lane:ConventionLane;snapshot?:ConventionSnapshot;tier:ConventionTier; }
Type Parameters
D
D = unknown
default
default:
D
The out-of-box DEFAULT: pure data + pure functions (dependency-free, engine-safe) that make this lane's output standard-conforming with zero author input. This is where the magic numbers scattered through sheets.ts move to — owned, named, one place.
docId
docId:
string
conventions/
lane
lane:
ConventionLane
snapshot?
optionalsnapshot?:ConventionSnapshot
The mandatory visual LOOK — required whenever the lane is visual.
tier
tier:
ConventionTier
Methods
checkFacts()?
optionalcheckFacts(report):ConventionFinding[]
Deterministic self-check on an evaluated model's inspect report.
Parameters
report
Returns
ConventionFinding
ConventionFinding = {
message:string;rule:string;severity:"error"|"warning"; }
One deterministic, in-engine finding — a MEASURABLE defect read off an evaluated inspect report ("title block has no Scale field", "content fills < 20% of the usable area"). Facts only; anything needing eyes is a snapshot.
message
message:
string
rule
rule:
string
Stable id for the rule, so a re-run can point at the same failed check (the reference's "re-run exactly the check that failed").
severity
severity:
"error"|"warning"
ConventionLane
ConventionLane =
string
A ModelJSON lane key a convention governs ("sheets", "views", "materials", "layers", …). A string, not ModelLane — that type names the fold ROLE (parameters/scene/component/flat), a different axis.
ConventionSnapshot
ConventionSnapshot = {
judge:string;surface:"sheet"|"viewport3d"|"texture"|"material"; }
The mandatory LOOK, declared not executed. The engine is dependency-free and never opens a browser; it names the surface to render and the single yes/no question a vision-judge answers. The verify harness renders + judges.
judge
judge:
string
ONE yes/no question about the rendered image, phrased so a "no" is a real defect ("Is the sheet a professional drawing — title block with labelled fields, framed content filling the page — not a tiny table in a corner?").
surface
surface:
"sheet"|"viewport3d"|"texture"|"material"
ConventionTier
ConventionTier =
"T1"|"T2"
Ontology tier (IFC/bSDD/USD applied-schema precedent). T0 core is engine-hard and never appears here. T1 STANDARD ships with the product, versioned. T2 DOMAIN is an opt-in pack (arch Psets, CNC tags). T3 MODEL is the author's own and is never a convention. Everything in this package is T1; a pack registers T2 via mergeConventions.
CurveMetrics
CurveMetrics = {
closed:boolean;length:number;selfIntersects:boolean|null;winding:"CW"|"CCW"|null; }
closed
closed:
boolean
length
length:
number
selfIntersects
selfIntersects:
boolean|null
null when the curve isn't planar-XY (test not applicable).
winding
winding:
"CW"|"CCW"|null
Loop orientation in the XY plane; null for open or non-planar curves.
DataStep
DataStep = {
args?:Argument[];enabled?:string;key?:string;label?:string;method:string; }
ONE step in a data-streaming chain: it folds a data stream to a data stream, and that is the whole of it.
Which is why it carries neither authoring markers nor a child list. There is no flat (2D context comes from the LANE — ModelLane === "flat" — or from the chain-level owner declaration Component.flat / ModelJSON.flat; a step cannot declare itself into another dimension), no locked (immunity is a property of the PLACEMENT — BaseInstance.locked, stamped by applyLocked — because later steps skip a locked object, not a node), and no children (a chain is a flat pipeline; grouping is a Group, whose own operations is the nested list).
args?
optionalargs?:Argument[]
enabled?
optionalenabled?:string
Optional enable expression — falsy = this step is bypassed / emits nothing.
key?
optionalkey?:string
label?
optionallabel?:string
method
method:
string
Method VALIDITY is registry-dependent (which node registries are loaded) — the schema only checks the string shape; model's validateModelJSON(json, registry) rejects unknown methods.
EnvironmentHdri
EnvironmentHdri = {
intensity?:number;name?:string; }
Image-based lighting. name is a url-method parameter key (an attached HDRI bitmap is an ordinary parameter whose value is its URL) OR a direct https:/data: URI; absent = the host's neutral built-in room, so PBR materials are not pitch black before an HDRI is authored.
intensity?
optionalintensity?:number
name?
optionalname?:string
GraphAssertResult
GraphAssertResult = {
ok:true; } | {message:string;ok:false; }
Graph-snapshot vocabulary — the flat node/edge picture a debugger or graph viewer reads. The SOURCE shapes (live nodes, the registry) stay in @huukhanhnguyen/model.
GraphSnapshot
GraphSnapshot = {
edges:GraphSnapshotEdge[];nodes:GraphSnapshotNode[]; }
edges
edges:
GraphSnapshotEdge[]
nodes
nodes:
GraphSnapshotNode[]
GraphSnapshotEdge
GraphSnapshotEdge = {
from:string;to:string;type:string; }
from
from:
string
to
to:
string
type
type:
string
GraphSnapshotNode
GraphSnapshotNode = {
dirty:boolean;id:string;key:string;lane:string;lastEvalMs:number;method:string;type:string; }
dirty
dirty:
boolean
id
id:
string
key
key:
string
lane
lane:
string
lastEvalMs
lastEvalMs:
number
method
method:
string
type
type:
string
Group
Group = {
enabled?:string;instances?:NodeInstance[];key?:string;label?:string;operations: (DataStep|Group)[];properties?:PropertyNode[]; }
Display grouping inside an object or component body, a sheet/template, and parameters[]. Not a scene object — the root is SceneNode[]. key is optional because a nested group needs none. The fold of a group is its own empty-stream scope (applyAttribute sees only the group's steps); the parent concatenates the result.
enabled?
optionalenabled?:string
instances?
optionalinstances?:NodeInstance[]
Authored placements (object-tier). Absent === one identity.
key?
optionalkey?:string
label?
optionallabel?:string
operations
properties?
optionalproperties?:PropertyNode[]
Steps that write instances[] (object-tier). Carried here for the same reason instances is: objectDocuments() hands an ObjectNode to the runtime as this shape, so the field has to survive the trip.
InspectClash
InspectClash = {
a:string;b:string;overlap:number; }
a
a:
string
b
b:
string
overlap
overlap:
number
InspectCounts
InspectCounts = {
annotations:number;curves:number;faces:number;groups:number;hidden:number;meshes:number;points:number; }
annotations
annotations:
number
curves
curves:
number
faces
faces:
number
groups
groups:
number
hidden
hidden:
number
meshes
meshes:
number
points
points:
number
InspectGroup
InspectGroup = {
bounds:BoundingBox|null;counts:InspectCounts;hidden:boolean;key:string;layers:string[];materials:string[];mesh?:MeshMetrics;steps:InspectStep[];tessellation?: {curves: {points:Point[]; }[];meshes: {indices:number[];positions:number[]; }[]; };warnings:string[]; }
bounds
bounds:
BoundingBox|null
counts
counts:
InspectCounts
hidden
hidden:
boolean
key
key:
string
layers
layers:
string[]
materials
materials:
string[]
mesh?
optionalmesh?:MeshMetrics
Tessellated mesh diagnostics when the group carries faces.
steps
steps:
InspectStep[]
tessellation?
optionaltessellation?: {curves: {points:Point[]; }[];meshes: {indices:number[];positions:number[]; }[]; }
Full tessellation — only with the geometry option (external tools).
curves
curves: {
points:Point[]; }[]
meshes
meshes: {
indices:number[];positions:number[]; }[]
warnings
warnings:
string[]
InspectReport
InspectReport = {
clashes?:InspectClash[];groups:InspectGroup[];parameters: {key:string;value:unknown; }[];title?:string;unit?:string;warnings:string[]; }
clashes?
optionalclashes?:InspectClash[]
Coarse bbox-overlap pairs — only with the clashes option.
groups
groups:
InspectGroup[]
parameters
parameters: {
key:string;value:unknown; }[]
key
key:
string
value
value:
unknown
title?
optionaltitle?:string
unit?
optionalunit?:string
warnings
warnings:
string[]
Every group/step warning, prefixed with its path — scan this first.
InspectStep
InspectStep = {
bounds:BoundingBox|null;counts:InspectCounts;curve?:CurveMetrics;error?:string;key:string;method:string;steps?:InspectStep[];warnings:string[]; }
bounds
bounds:
BoundingBox|null
counts
counts:
InspectCounts
curve?
optionalcurve?:CurveMetrics
Tessellated curve diagnostics when the step's value is one curve.
error?
optionalerror?:string
key
key:
string
method
method:
string
steps?
optionalsteps?:InspectStep[]
Present when the step is a nested Group: its own pipeline.
warnings
warnings:
string[]
LaneEditField
LaneEditField =
"operations"|"opening"
The body lanes a chain entry may carry. A components[] entry has two that flow in opposite directions — operations produces into the stream, opening subtracts from it (see schema/model.ts's opening contract) — and both are edited by the same tree editor, so both go through one door.
LengthUnit
LengthUnit =
"mm"|"cm"|"m"|"in"|"ft"
MassUnit
MassUnit =
"mg"|"g"|"kg"|"lb"|"oz"
MeasureConfig
MeasureConfig = {
expression:string;key:string; }
expression
expression:
string
key
key:
string
MeshMetrics
MeshMetrics = {
boundaryEdges:number;degenerate:number;invertedSolids:number;sealed:boolean;solids:number;triangles:number;volume:number; }
boundaryEdges
boundaryEdges:
number
degenerate
degenerate:
number
invertedSolids
invertedSolids:
number
Sealed components with negative volume: inside-out (e.g. an unflipped mirror copy).
sealed
sealed:
boolean
True when every edge is shared by exactly two triangles.
solids
solids:
number
Connected components (vertex-connectivity) — one per separate solid/sheet.
triangles
triangles:
number
volume
volume:
number
Signed volume — negative on a sealed mesh means inverted winding.
ModelLane
ModelLane =
"parameters"|"scene"|"component"|"flat"
Which section of the model a node was declared in (drives lane validation and serialization). parameters = value bindings; scene = the root fold ROLE (storage field is operations); component = a Component's own operations/opening (full 3D grammar — an ISOLATED scope, not a method restriction); flat = a sheet's ad hoc content — data methods only, restricted to FLAT_LANE_METHODS (no solid/3D).
ModelSettings
ModelSettings = {
activeView?:string;cameraTour?: {legs: {duration:number;view:string; }[]; };environment?:Environment;units?:UnitConfig; }
Model-level settings: ONE document-config block (USD/FBX/DXF industry pattern). Two natures of field:
- content semantics:
units(display/config units; internal length is ALWAYS mm — never a runtime scale conversion) - presentation state:
activeView,cameraTourPermanent CONVENTIONS (never config, never fields here): Z-up world frame and internal mm — glTF-style fixed convention, zero upAxis/scale knob.
Display chord deflection is NOT a document setting — callers pass it as the optional argument to render() / tessellateFaces (engine default when omitted). Nesting owns its own separate legitimate knob.
units: optional display unit config; absent ={length:"mm"}. Read only via Model.unit (the ONE accessor — never N call-site fallbacks).activeView: whichviews[]entry the 3D viewport restores on load.cameraTour: ordered camera legs for viewer present-mode playback (host-owned; engine never plays it).environment: the light that has no place in space — the site and the moment the sun is DERIVED from, plus the sky fill and any HDRI. A document FACT like units (Revit project location / SketchUp geo-locate), and ONE per document on purpose: a building has one sky, so this cannot be a per-view field. SeeEnvironment.
activeView?
optionalactiveView?:string
cameraTour?
optionalcameraTour?: {legs: {duration:number;view:string; }[]; }
legs
legs: {
duration:number;view:string; }[]
environment?
optionalenvironment?:Environment
units?
optionalunits?:UnitConfig
MonteCarloConfig
MonteCarloConfig = {
measures:MeasureConfig[];parameters:MonteCarloParameterConfig[];samples?:number;seed?:number; }
measures
measures:
MeasureConfig[]
parameters
parameters:
MonteCarloParameterConfig[]
samples?
optionalsamples?:number
seed?
optionalseed?:number
MonteCarloParameterConfig
MonteCarloParameterConfig = {
key:string;max:number;min:number; }
A named numeric range — sampled (Monte Carlo) or searched (optimize). Not the same shape as SweepParameterConfig, which walks from/to in discrete steps rather than sampling a range.
key
key:
string
max
max:
number
min
min:
number
MonteCarloResult
MonteCarloResult = {
summary:AnalyzeTable;table:AnalyzeTable; }
summary
summary:
AnalyzeTable
table
table:
AnalyzeTable
ObjectiveConfig
ObjectiveConfig = {
expression:string;goal:"min"|"max"; }
expression
expression:
string
goal
goal:
"min"|"max"
Operation
Operation = {
animation?:AnimationBinding;args?:Argument[];enabled?:string;key?:string;label?:string;method:string; }
animation?
optionalanimation?:AnimationBinding
Numeric parameters only — this parameter's USE of a track: which formulaTrack/numberTrack in animations[] drives it (a numeric parameter is one number over time, so only the two 1-number track methods may), and on what terms. Keys are plain, not expressions: the same "just the id, no evaluation" convention a component key / skin's skeleton already use. The terms live here rather than on the track because two parameters may share one curve and disagree about them — see AnimationBinding.
args?
optionalargs?:Argument[]
enabled?
optionalenabled?:string
Optional enable expression — falsy = this node is bypassed / emits nothing.
key?
optionalkey?:string
label?
optionallabel?:string
method
method:
string
Method VALIDITY is registry-dependent (which node registries are loaded) — the schema only checks the string shape; model's validateModelJSON(json, registry) rejects unknown methods.
OptimizeConfig
OptimizeConfig = {
maxEvaluations?:number;objective:ObjectiveConfig;parameters:MonteCarloParameterConfig[]; }
maxEvaluations?
optionalmaxEvaluations?:number
objective
objective:
ObjectiveConfig
parameters
parameters:
MonteCarloParameterConfig[]
OptimizeResult
OptimizeResult = {
best: {params:Record<string,number>;value:number; };trace:AnalyzeTable; }
best
best: {
params:Record<string,number>;value:number; }
params
params:
Record<string,number>
value
value:
number
trace
trace:
AnalyzeTable
Option
Option = {
input:string;label:string; }
input
input:
string
An expression string (model's exprSchema).
label
label:
string
OrthographicCamera
OrthographicCamera = {
far?:number;height:number;near?:number; }
A camera that projects through a BOX.
height is the world height visible, in the model's unit. ONE number, not four edges: left/right/top/bottom is the RENDERER's form (three.js feeds it straight to the projection matrix), while one number is the document form every other system stores — Blender ortho_scale, BCF ViewToWorldScale, glTF xmag/ymag, SketchUp height. The four edges are DERIVED, from this height plus the consumer's aspect.
A view's crop rectangle is a different subject and lives on the placement (viewObject.crop), not here.
far?
optionalfar?:number
height
height:
number
near?
optionalnear?:number
PerspectiveCamera
PerspectiveCamera = {
far?:number;fov:number;near?:number; }
A camera that projects through an ANGLE.
fov is the VERTICAL field of view in DEGREES. Stated here because three live conventions disagree and none of them errors at a boundary: glTF's spec is radians, three.js is degrees, and BCF's FieldOfView is HORIZONTAL degrees. Vertical degrees is the pick, stated on the type so every writer converts at its own door instead of rediscovering the question.
far?
optionalfar?:number
fov
fov:
number
near?
optionalnear?:number
Sheet
Sheet = {
key:string;operations: (Operation|Group)[];parameters?: (Operation|Group)[];template?:string;title?:string; }
A drawing sheet — an OBJECT whose space is BOUNDED. Its content is a data chain like any other; what makes it a sheet is that the chain composes into a finite rectangle of paper instead of unbounded world space. Resolving one produces Page.
Record spine is Chain with title instead of label — a deliberate divergence, kept explicit (see Chain, and TableChain which diverges the same way with columns). The reason is the title-vs-label law: a sheet's name is PRINTED, in the ISO 7200 title block's "Title" cell, so it is content, not editor chrome, and it is an expression. A second editor-chrome label beside it would be a second name for the same thing, so there is none.
key
key:
string
Sheet identifier / drawing number, e.g. "A-101". Free-form (NOT generatorKeySchema) — drawing numbers contain hyphens and must stay author-facing strings. Unique within the set; also the index entry key.
operations
This sheet's content — lane "flat" (see model's FLAT_LANE_METHODS). A top-level viewObject node with no at arg auto-tiles into a scaled row (resolveSheet extracts these before running the rest); every other node (a positioned viewObject, tableEntity, imageEntity, or ordinary curve/point/annotation content) is authored in the SAME y-up bottom-left paper-space convention every other flat context uses, flipped once into sheet space at resolve time.
Required, like every other chain's body. A sheet with no operations is a blank page — frame, zone grid and title block and nothing else — which is a legal (if empty) drawing, and it is spelled []; undefined was a second spelling of the same nothing (the zod schema defaults it, so a document that omits the field still loads).
parameters?
Free params (per-sheet title-block args: date, revision, …). Paper size is on the template — leftover paperWidth/paperHeight fail loud.
template?
optionaltemplate?:string
Key of a Template. Absent = the engine's ISO 5457 default.
title?
optionaltitle?:string
Sheet title block name, e.g. "GROUND FLOOR PLAN" — CONTENT printed on the artifact (title-vs-label law). An EXPRESSION (titleValue law): "'PLAN LEVEL ' + level" renders evaluated, a plain name stays literal.
Site
Site = {
latitude:number;longitude:number;northAngle?:number; }
Where the model stands on Earth. northAngle rotates project north away from +Y, in degrees counter-clockwise looking down. Revit's project location / SketchUp's geo-locate.
latitude
latitude:
number
longitude
longitude:
number
northAngle?
optionalnorthAngle?:number
SunMoment
SunMoment = {
day:number;hour:number;month:number; }
The moment the sun is computed for — a document FACT (which day and hour this shadow study is about), not a clock reading: nothing here ever consults the wall clock, so the same document always produces the same shadows.
hour is LOCAL SOLAR time (12 = the sun crossing the site's meridian): shadow studies are authored against solar noon, so longitude/time-zone conversion is deliberately out of scope.
day
day:
number
hour
hour:
number
month
month:
number
SweepConfig
SweepConfig = {
measures:MeasureConfig[];parameters:SweepParameterConfig[]; }
measures
measures:
MeasureConfig[]
parameters
parameters:
SweepParameterConfig[]
SweepParameterConfig
SweepParameterConfig = {
from:number;key:string;steps:number;to:number; }
from
from:
number
key
key:
string
steps
steps:
number
to
to:
number
TableChain
TableChain = {
columns?:Operation[];key:string;label?:string;operations:Operation[]; }
A reporting stream — header columns (signature) + body operations (row producers + transforms), fold law same as the root body. Referenced via Table.get('key'). Chain-level provenance is banned (the imported CSV stays discoverable as its url-method parameter). Record spine is Chain with columns instead of parameters — a deliberate divergence, kept explicit (see Chain).
columns?
optionalcolumns?:Operation[]
HEADER — one column node per column (key on the node).
key
key:
string
label?
optionallabel?:string
operations
operations:
Operation[]
BODY — row producers + verb transforms (tableFilter/Group/Sort/…).
Template
Template = {
height:number;key:string;margins:number| [number,number,number,number];operations?: (Operation|Group)[];parameters?: (Operation|Group)[];width:number; }
Shared paper + furniture for a family of sheets. Sheets reference a template by key (AnimationClip.tracks, FreeCAD DrawPage.Template, ArchiCAD Master Layout) — the template does not contain them.
No orientation field: 420×297 versus 297×420 already says it. margins is one number if uniform, or [left, bottom, right, top] mm.
height
height:
number
key
key:
string
margins
margins:
number| [number,number,number,number]
operations?
Drawn furniture (frame, zone grid, title-block placeComponent). Nested groups keep a polyline with its applyAttribute stamps.
parameters?
Shared furniture args (project name, client) — value methods.
width
width:
number
UnitConfig
UnitConfig = {
area?:AreaUnit;length:LengthUnit;mass?:MassUnit;volume?:VolumeUnit; }
Runtime unit config — SSOT shape for settings.units.
area?
optionalarea?:AreaUnit
length
length:
LengthUnit
mass?
optionalmass?:MassUnit
volume?
optionalvolume?:VolumeUnit
UnitType
UnitType =
"length"|"area"|"volume"|"mass"
Unit dimension keys (matches RawData in core/UnitSymbols).
ViewFilterOverride
ViewFilterOverride = {
color?:string;halftone?:boolean;lineStyle?:LineStyle;lineWidth?:number; }
Per-rule graphic override — rides the same channel per-layer graphics ride: color/lineStyle/lineWidth win over the document's layer/material lookup. halftone renders at a fixed reduced opacity.
color?
optionalcolor?:string
halftone?
optionalhalftone?:boolean
lineStyle?
optionallineStyle?:LineStyle
lineWidth?
optionallineWidth?:number
ViewFilterRule
ViewFilterRule = {
equals?:string|string[];key:string;notEquals?:string|string[];override?:ViewFilterOverride; }
One AND-combined test against a field of a data document — key "layer" and "material" read the ENTITY ROW's own lane reference (rowLayerOf / rowMaterialOf; no *Data carries one), any other key reads attributes[key]. equals/notEquals accept a single value OR an array (any-of / none-of). override applies a graphic override to every document the rule matches.
equals?
optionalequals?:string|string[]
key
key:
string
notEquals?
optionalnotEquals?:string|string[]
override?
optionaloverride?:ViewFilterOverride
VolumeUnit
VolumeUnit =
"mm3"|"cm3"|"m3"|"in3"|"ft3"|"L"
AnalyzeModel
Re-exports AnalyzeModel
ANIMATABLE_VALUE_TYPES
Re-exports ANIMATABLE_VALUE_TYPES
AnimationChainSchema
Re-exports AnimationChainSchema
ArchetypeCameraOptions
Re-exports ArchetypeCameraOptions
AREA_UNITS
Re-exports AREA_UNITS
AreaUnitSchema
Re-exports AreaUnitSchema
ArgCarrier
Re-exports ArgCarrier
ArgDef
Re-exports ArgDef
ArgumentNodeJSON
Re-exports ArgumentNodeJSON
ArgumentSchema
Re-exports ArgumentSchema
AssetFailure
Re-exports AssetFailure
assetTypeOf
Re-exports assetTypeOf
bareTypeName
Re-exports bareTypeName
blockKeysOf
Re-exports blockKeysOf
BlockSchema
Re-exports BlockSchema
BuiltinParamDef
Re-exports BuiltinParamDef
builtinParamExpression
Re-exports builtinParamExpression
BuiltinParamLane
Re-exports BuiltinParamLane
builtinParamValues
Re-exports builtinParamValues
Builtins
Re-exports Builtins
BuiltinValues
Re-exports BuiltinValues
CAMERA_METHOD_NAMES
Re-exports CAMERA_METHOD_NAMES
CAMERA_METHOD_SET
Re-exports CAMERA_METHOD_SET
CAMERA_METHODS
Re-exports CAMERA_METHODS
CameraArgDef
Renames and re-exports NodeArgEntry
cameraArgInput
Re-exports cameraArgInput
CameraMethod
Re-exports CameraMethod
CameraNode
Re-exports CameraNode
CameraNodeSchema
Re-exports CameraNodeSchema
CameraSchema
Re-exports CameraSchema
Chain
Re-exports Chain
ChainNodeSchema
Re-exports ChainNodeSchema
ChainState
Re-exports ChainState
ChildNode
Re-exports ChildNode
COLLECTION_LANES
Re-exports COLLECTION_LANES
ColumnMeta
Re-exports ColumnMeta
ComponentBody
Re-exports ComponentBody
ComponentSchema
Re-exports ComponentSchema
ComputeArgs
Re-exports ComputeArgs
ComputeContext
Re-exports ComputeContext
ContainerSchema
Re-exports ContainerSchema
DataDefinition
Re-exports DataDefinition
DataFilterResult
Re-exports DataFilterResult
DataStepSchema
Re-exports DataStepSchema
DEFAULT_UNITS
Re-exports DEFAULT_UNITS
DirtyTarget
Re-exports DirtyTarget
EditHistory
Re-exports EditHistory
Environment
Re-exports Environment
EvalContext
Re-exports EvalContext
EvaluateDiagnostic
Re-exports EvaluateDiagnostic
EvaluateResult
Re-exports EvaluateResult
EvaluateTableOptions
Re-exports EvaluateTableOptions
EvaluationSliceEntry
Re-exports EvaluationSliceEntry
EvaluationSnapshot
Re-exports EvaluationSnapshot
EXPR_MAX_LENGTH
Re-exports EXPR_MAX_LENGTH
ExpressionError
Re-exports ExpressionError
ExpressionNodeJSON
Re-exports ExpressionNodeJSON
exprSchema
Re-exports exprSchema
FLAT_LANE_METHODS
Re-exports FLAT_LANE_METHODS
FlatLaneExtras
Re-exports FlatLaneExtras
FoldRole
Re-exports FoldRole
FoldViewOptions
Re-exports FoldViewOptions
FontData
Re-exports FontData
Formula
Re-exports Formula
Frame
Re-exports Frame
FrameDiff
Re-exports FrameDiff
FunctionNamespaces
Re-exports FunctionNamespaces
generatorKeySchema
Re-exports generatorKeySchema
GeometryItem
Re-exports GeometryItem
GeometryNode
Re-exports GeometryNode
GeometryPlacement
Re-exports GeometryPlacement
GraphSnapshotSource
Re-exports GraphSnapshotSource
GroupSchema
Re-exports GroupSchema
HistoryEntry
Re-exports HistoryEntry
HistoryStep
Re-exports HistoryStep
ImageBuffer
Re-exports ImageBuffer
isAnimatableMethod
Re-exports isAnimatableMethod
isContainerJSON
Re-exports isContainerJSON
isPointArgType
Re-exports isPointArgType
JS_KEYWORDS
Re-exports JS_KEYWORDS
JS_RESERVED
Re-exports JS_RESERVED
KEY_REGEX
Re-exports KEY_REGEX
KeyedNode
Re-exports KeyedNode
KeyedNodeEntry
Re-exports KeyedNodeEntry
LANE_BODY_FIELDS
Re-exports LANE_BODY_FIELDS
LANE_BUILTIN_PARAMS
Re-exports LANE_BUILTIN_PARAMS
LANE_NAMES
Re-exports LANE_NAMES
LANE_REFERENCES
Re-exports LANE_REFERENCES
LANE_SCOPE
Re-exports LANE_SCOPE
LaneBodyFieldName
Re-exports LaneBodyFieldName
LaneCarrier
Re-exports LaneCarrier
LaneChain
Re-exports LaneChain
laneChains
Re-exports laneChains
LaneDescriptor
Re-exports LaneDescriptor
LaneEditCall
Re-exports LaneEditCall
LaneName
Re-exports LaneName
laneParamLiterals
Re-exports laneParamLiterals
LaneReference
Re-exports LaneReference
LANES
Re-exports LANES
LaneScope
Re-exports LaneScope
LENGTH_UNITS
Re-exports LENGTH_UNITS
LengthUnitSchema
Re-exports LengthUnitSchema
LightingStandard
Re-exports LightingStandard
Listener
Re-exports Listener
MASS_UNITS
Re-exports MASS_UNITS
MassUnitSchema
Re-exports MassUnitSchema
MaterialStandard
Re-exports MaterialStandard
Method
Re-exports Method
MethodSchema
Re-exports MethodSchema
MODEL_SPACE_LANES
Re-exports MODEL_SPACE_LANES
ModelDiagnostic
Re-exports ModelDiagnostic
ModelJSON
Re-exports ModelJSON
modelNodesOf
Re-exports modelNodesOf
ModelSchema
Re-exports ModelSchema
ModelSettingsSchema
Re-exports ModelSettingsSchema
NodeSchema
Re-exports NodeSchema
ObjectChannel
Re-exports ObjectChannel
ObjectChannelListener
Re-exports ObjectChannelListener
objectDocuments
Re-exports objectDocuments
ObjectInstance
Re-exports ObjectInstance
ObjectSchema
Re-exports ObjectSchema
ObjectSignature
Re-exports ObjectSignature
OperationDefinition
Re-exports OperationDefinition
OperationSchema
Re-exports OperationSchema
OptionNodeJSON
Re-exports OptionNodeJSON
OptionSchema
Re-exports OptionSchema
PARAM_METHOD_VALUE_TYPE
Re-exports PARAM_METHOD_VALUE_TYPE
PARAM_VALUE_ARG
Re-exports PARAM_VALUE_ARG
ParameterNodeJSON
Re-exports ParameterNodeJSON
ParamInfo
Re-exports ParamInfo
ParsedRef
Re-exports ParsedRef
pointArgHasNonZeroZ
Re-exports pointArgHasNonZeroZ
Preview
Re-exports Preview
PreviewItem
Re-exports PreviewItem
PropertyNodeSchema
Re-exports PropertyNodeSchema
quotedStringLiteral
Re-exports quotedStringLiteral
RawModel
Re-exports RawModel
ReferenceCarrier
Re-exports ReferenceCarrier
RefScheme
Re-exports RefScheme
RegistryError
Re-exports RegistryError
RegistryInput
Re-exports RegistryInput
RenderCell
Re-exports RenderCell
RenderedViews
Re-exports RenderedViews
RenderFrameBlock
Re-exports RenderFrameBlock
RenderFrameSlice
Re-exports RenderFrameSlice
RESERVED_KEY_SET
Re-exports RESERVED_KEY_SET
Resolved
Re-exports Resolved
resolveLaneBuiltins
Re-exports resolveLaneBuiltins
ResolveTextureOptions
Re-exports ResolveTextureOptions
ResolveViewOptions
Re-exports ResolveViewOptions
RowLaneReferences
Re-exports RowLaneReferences
RunAnalysis
Re-exports RunAnalysis
SafeParseModel
Re-exports SafeParseModel
SceneHooks
Re-exports SceneHooks
SceneNodeSchema
Re-exports SceneNodeSchema
ScenePull
Re-exports ScenePull
SCHEMA_VERSION
Re-exports SCHEMA_VERSION
setCameraArg
Re-exports setCameraArg
ShareBundle
Re-exports ShareBundle
ShareLanes
Re-exports ShareLanes
ShareType
Re-exports ShareType
SheetEvaluation
Re-exports SheetEvaluation
SheetResolveOptions
Re-exports SheetResolveOptions
SheetSchema
Re-exports SheetSchema
SheetSpaceData
Re-exports SheetSpaceData
SnapshotSourceNode
Re-exports SnapshotSourceNode
STEP_LANES
Re-exports STEP_LANES
StepDefinition
Re-exports StepDefinition
StepFailure
Re-exports StepFailure
Table
Re-exports Table
TableChainSchema
Re-exports TableChainSchema
TemplateSchema
Re-exports TemplateSchema
TextureChainSchema
Re-exports TextureChainSchema
TextureScope
Re-exports TextureScope
THEME_COLOR_FAMILIES
Re-exports THEME_COLOR_FAMILIES
ThemeColorFamily
Re-exports ThemeColorFamily
titleValue
Re-exports titleValue
TRACK_KEYFRAME_COMPONENTS
Re-exports TRACK_KEYFRAME_COMPONENTS
TRACK_METHODS
Re-exports TRACK_METHODS
TYPE_REGISTRY
Re-exports TYPE_REGISTRY
TypeCategory
Re-exports TypeCategory
TypeDef
Re-exports TypeDef
TypeName
Re-exports TypeName
UnitConfigSchema
Re-exports UnitConfigSchema
Unsubscribe
Re-exports Unsubscribe
urlInputLiteral
Re-exports urlInputLiteral
ValueDefinition
Re-exports ValueDefinition
View
Re-exports View
ViewCameraSchema
Re-exports ViewCameraSchema
ViewHeadMethod
Re-exports ViewHeadMethod
ViewSchema
Re-exports ViewSchema
ViewSpaceData
Re-exports ViewSpaceData
VOLUME_UNITS
Re-exports VOLUME_UNITS
VolumeUnitSchema
Re-exports VolumeUnitSchema
WorldSpaceData
Re-exports WorldSpaceData