Schema
The persisted-document type closure — every type reachable from ModelJson by following its own import type lines, breadth-first. A response type (Changes, RenderCell, …) never appears here unless the document closure itself reaches it. See Open surface for the fields this closure leaves unconstrained.
Index
28 types in the persisted-document closure (BFS from ModelJson, following import type lines only). 0 not tabulated (see below).
Types
ModelJson
Model = meta + assets + parameters (header) + scene (body). The ONE declaration of the persisted document. Cross-field refinements (one key namespace across every lane, the material/pattern library shape) run post-deserialize in crate::validate — serde has no schema-level array-uniqueness refine.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ComponentNode } from "./ComponentNode.js";
import type { LayerNode } from "./LayerNode.js";
import type { MaterialNode } from "./MaterialNode.js";
import type { ModelSettings } from "./ModelSettings.js";
import type { ObjectNode } from "./ObjectNode.js";
import type { ParameterNode } from "./ParameterNode.js";
import type { PatternNode } from "./PatternNode.js";
import type { ViewNode } from "./ViewNode.js";
/**
* Model = meta + assets + parameters (header) + scene (body). The ONE
* declaration of the persisted document. Cross-field refinements (one key
* namespace across every lane, the material/pattern library shape) run post-deserialize
* in `crate::validate` — serde has no schema-level array-uniqueness refine.
*/
export type ModelJson = {
/**
* identity — the platform's PUBLISH sequence, stamped by the host.
* 0/absent = never published. Not a JSON-format/schema version number.
*/
version?: number,
/**
* intent — content name printed on the artifact, verbatim text (a
* human types it; nothing evaluates it). Fails validate when empty or
* over `EXPR_MAX_LENGTH` characters (`validate::model::push_title`).
*/
title: string,
/**
* intent — what this definition is, verbatim text beside `title` (a
* human types it; nothing evaluates it): allowlisted HTML or plain text,
* read by the catalogue, the configurator and the quote, never by
* evaluation. On the definition, so no placement overrides it
* (SketchUp `ComponentDefinition#description`, AutoCAD block `Comments`).
*/
description?: string,
/**
* intent — units and environment; absent = every field's own default.
* The active view is NOT here — it is engine session state
* (`EngineSession.active_view`), and a stored `settings.activeView`
* fails validate as an unknown key (`deny_unknown_fields`).
*/
settings?: ModelSettings,
/**
* intent — the materials lane.
*/
materials?: Array<MaterialNode>,
/**
* intent — the layers lane.
*/
layers?: Array<LayerNode>,
/**
* intent — the patterns lane.
*/
patterns?: Array<PatternNode>,
/**
* intent — Header: named value bindings.
*/
parameters?: Array<ParameterNode>,
/**
* intent — acts this model performs on its siblings when it is placed
* as a component (AGENTS.md "Behaviors"); dormant in an open document —
* the root has no siblings — active once placed via `placeComponent`.
*/
behaviors?: Array<BehaviorNode>,
/**
* intent — Root body: the SET of scene objects, model-wide unique keys.
*/
objects?: Array<ObjectNode>,
/**
* intent — Named views; key unique in the document's one key
* namespace, same as every other lane (`validate::keys`).
*/
views?: Array<ViewNode>,
/**
* intent — the components lane: documents this one places.
*/
components?: Array<ComponentNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
version | number | yes | identity | identity — the platform's PUBLISH sequence, stamped by the host. 0/absent = never published. Not a JSON-format/schema version number. |
title | string | no | intent | intent — content name printed on the artifact, verbatim text (a human types it; nothing evaluates it). Fails validate when empty or over EXPR_MAX_LENGTH characters (validate::model::push_title). |
description | string | yes | intent | intent — what this definition is, verbatim text beside title (a human types it; nothing evaluates it): allowlisted HTML or plain text, read by the catalogue, the configurator and the quote, never by evaluation. On the definition, so no placement overrides it (SketchUp ComponentDefinition#description, AutoCAD block Comments). |
settings | ModelSettings | yes | intent | intent — units and environment; absent = every field's own default. The active view is NOT here — it is engine session state (EngineSession.active_view), and a stored settings.activeView fails validate as an unknown key (deny_unknown_fields). |
materials | Array<MaterialNode> | yes | intent | intent — the materials lane. |
layers | Array<LayerNode> | yes | intent | intent — the layers lane. |
patterns | Array<PatternNode> | yes | intent | intent — the patterns lane. |
parameters | Array<ParameterNode> | yes | intent | intent — Header: named value bindings. |
behaviors | Array<BehaviorNode> | yes | intent | intent — acts this model performs on its siblings when it is placed as a component (AGENTS.md "Behaviors"); dormant in an open document — the root has no siblings — active once placed via placeComponent. |
objects | Array<ObjectNode> | yes | intent | intent — Root body: the SET of scene objects, model-wide unique keys. |
views | Array<ViewNode> | yes | intent | intent — Named views; key unique in the document's one key namespace, same as every other lane (validate::keys). |
components | Array<ComponentNode> | yes | intent | intent — the components lane: documents this one places. |
BehaviorNode
One behaviors[] entry — a verb the engine performs on this object's siblings after the parent set evaluates; each method at most once, presence means enabled.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One `behaviors[]` entry — a verb the engine performs on this object's
* siblings after the parent set evaluates; each method at most once,
* presence means enabled.
*/
export type BehaviorNode = {
/**
* intent — the catalog `behaviors`-context method this act invokes.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
method | string | no | intent | intent — the catalog behaviors-context method this act invokes. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ComponentNode
A components[] entry: a keyed lane node whose value is a whole ModelJson placed by placeComponent(key). That document's own components lane is its private scope.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ComponentMethod } from "./ComponentMethod.js";
/**
* A `components[]` entry: a keyed lane node whose value is a whole
* `ModelJson` placed by `placeComponent(key)`. That document's own
* `components` lane is its private scope.
*/
export type ComponentNode = {
/**
* identity — unique in the document's one key namespace, every lane; `placeComponent.component` names it.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim; absent falls
* back to `key` (`RecordView.ts`: "header = label (or key)").
*/
label?: string,
/**
* intent — `createComponent` (arg `data`) or `loadComponent` (arg `url`).
*/
method: ComponentMethod,
/**
* intent — `data` (the document) or `url` (an absolute https model document address).
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane; placeComponent.component names it. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim; absent falls back to key (RecordView.ts: "header = label (or key)"). |
method | ComponentMethod | no | intent | intent — createComponent (arg data) or loadComponent (arg url). |
args | Array<Argument> | yes | intent | intent — data (the document) or url (an absolute https model document address). |
LayerNode
A layers[] entry: a head with no args, identity is key, plus properties carrying attributes/visible.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddLayerMethod } from "./AddLayerMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `layers[]` entry: a head with no args, identity is `key`, plus
* `properties` carrying `attributes`/`visible`.
*/
export type LayerNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim; absent falls
* back to `key` (`RecordView.ts`: "header = label (or key)").
*/
label?: string,
/**
* intent — the one closed-literal layers-lane head.
*/
method: AddLayerMethod,
/**
* intent — this head takes no args; kept for NODE LAW shape parity.
*/
args?: Array<Argument>,
/**
* intent — `attributes`/`visible`.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim; absent falls back to key (RecordView.ts: "header = label (or key)"). |
method | AddLayerMethod | no | intent | intent — the one closed-literal layers-lane head. |
args | Array<Argument> | yes | intent | intent — this head takes no args; kept for NODE LAW shape parity. |
properties | Array<PropertyNode> | yes | intent | intent — attributes/visible. |
MaterialNode
A materials[] entry: the addMaterial head plus a properties list for everything else. Identity is key, unique within materials[].
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddMaterialMethod } from "./AddMaterialMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `materials[]` entry: the `addMaterial` head plus a `properties` list
* for everything else. Identity is `key`, unique within `materials[]`.
*/
export type MaterialNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim; absent falls
* back to `key` (`RecordView.ts`: "header = label (or key)").
*/
label?: string,
/**
* intent — the one closed-literal materials-lane head.
*/
method: AddMaterialMethod,
/**
* intent — `baseColor`/`texture`/`tileWidth`/`tileHeight`.
*/
args?: Array<Argument>,
/**
* intent — every other `ResolvedMaterial` field.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim; absent falls back to key (RecordView.ts: "header = label (or key)"). |
method | AddMaterialMethod | no | intent | intent — the one closed-literal materials-lane head. |
args | Array<Argument> | yes | intent | intent — baseColor/texture/tileWidth/tileHeight. |
properties | Array<PropertyNode> | yes | intent | intent — every other ResolvedMaterial field. |
ModelSettings
Model-level settings — one document-config block. Permanent conventions (Z-up, internal mm, display chord deflection as a render() argument, never a setting) are not fields here.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Environment } from "./Environment.js";
import type { UnitConfig } from "./UnitConfig.js";
/**
* Model-level settings — one document-config block. Permanent conventions
* (Z-up, internal mm, display chord deflection as a `render()` argument,
* never a setting) are not fields here.
*/
export type ModelSettings = {
/**
* intent — the length unit a host displays and types values in; absent =
* mm. Evaluation always runs in mm regardless (`CallContext.unit` is fixed
* `LengthUnit::Mm`); converting for display is the host's job.
*/
units?: UnitConfig,
/**
* intent — the sun, sky and HDRI; absent = the host's neutral default.
*/
environment?: Environment, };| field | type | optional | class | doc |
|---|---|---|---|---|
units | UnitConfig | yes | intent | intent — the length unit a host displays and types values in; absent = mm. Evaluation always runs in mm regardless (CallContext.unit is fixed LengthUnit::Mm); converting for display is the host's job. |
environment | Environment | yes | intent | intent — the sun, sky and HDRI; absent = the host's neutral default. |
ObjectNode
ONE node type per lane: {key, method, args?} plus steps (Object = createObject, a data chain) or objects (Block = createBlock, a nest, recursive) — method alone decides which body is legal; a node naming neither, or the wrong body for its method, fails validate by name.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ObjectMethod } from "./ObjectMethod.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { StepNode } from "./StepNode.js";
/**
* ONE node type per lane: `{key, method, args?}` plus `steps` (`Object` =
* `createObject`, a data chain) or `objects` (`Block` = `createBlock`, a
* nest, recursive) — `method` alone decides which body is legal; a node
* naming neither, or the wrong body for its method, fails validate by name.
*/
export type ObjectNode = {
/**
* identity — unique in the document's one key namespace, every lane,
* nested children included.
*/
key: string,
/**
* intent — editor-chrome display text, printed verbatim; absent falls
* back to `key`.
*/
label?: string,
/**
* intent — `createObject` (body `steps`) or `createBlock` (body `objects`).
*/
method: ObjectMethod,
/**
* intent — every object's args stay empty: `createBlock` and
* `createObject` alike take no args of their own. Placement
* (`pivot`/`translation`/`rotation`/`scale`/`copies`) is INSTANCE and
* lives in `properties` below, same as every other object.
*/
args?: Array<Argument>,
/**
* intent — placement (`pivot`/`translation`/`rotation`/`scale`/
* `copies`) plus paint and identity (`name`/`material`/`layer`/
* `visible`/`attributes`) on this object itself.
*/
properties?: Array<PropertyNode>,
/**
* intent — a verb the engine performs on this object's siblings once
* the parent set evaluates (AGENTS.md "Behaviors"); each method at
* most once.
*/
behaviors?: Array<BehaviorNode>,
/**
* intent — the data chain, legal only on `method: createObject`.
*/
steps?: Array<StepNode>,
/**
* intent — the nested children, legal only on `method: createBlock`.
*/
objects?: Array<ObjectNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane, nested children included. |
label | string | yes | intent | intent — editor-chrome display text, printed verbatim; absent falls back to key. |
method | ObjectMethod | no | intent | intent — createObject (body steps) or createBlock (body objects). |
args | Array<Argument> | yes | intent | intent — every object's args stay empty: createBlock and createObject alike take no args of their own. Placement (pivot/translation/rotation/scale/copies) is INSTANCE and lives in properties below, same as every other object. |
properties | Array<PropertyNode> | yes | intent | intent — placement (pivot/translation/rotation/scale/ copies) plus paint and identity (name/material/layer/ visible/attributes) on this object itself. |
behaviors | Array<BehaviorNode> | yes | intent | intent — a verb the engine performs on this object's siblings once the parent set evaluates (AGENTS.md "Behaviors"); each method at most once. |
steps | Array<StepNode> | yes | intent | intent — the data chain, legal only on method: createObject. |
objects | Array<ObjectNode> | yes | intent | intent — the nested children, legal only on method: createBlock. |
ParameterNode
One parameters[] entry — a named value binding. key is required: the name every expression resolves it by.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ParameterMethod } from "./ParameterMethod.js";
/**
* One `parameters[]` entry — a named value binding. `key` is required: the
* name every expression resolves it by.
*/
export type ParameterNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display text, printed verbatim; absent falls
* back to `key`.
*/
label?: string,
/**
* intent — which of the 11 value methods this parameter binds.
*/
method: ParameterMethod,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display text, printed verbatim; absent falls back to key. |
method | ParameterMethod | no | intent | intent — which of the 11 value methods this parameter binds. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
PatternNode
A patterns[] entry: identity key, plus steps — one lineFamily step per drawn family, non-empty (enforced post-deserialize, see crate::validate) — plus a properties list carrying only attributes.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddPatternMethod } from "./AddPatternMethod.js";
import type { Argument } from "./Argument.js";
import type { PatternStepNode } from "./PatternStepNode.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `patterns[]` entry: identity `key`, plus `steps` — one `lineFamily`
* step per drawn family, non-empty (enforced post-deserialize, see
* `crate::validate`) — plus a `properties` list carrying only `attributes`.
*/
export type PatternNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim; absent falls
* back to `key` (`RecordView.ts`: "header = label (or key)").
*/
label?: string,
/**
* intent — the one closed-literal patterns-lane head.
*/
method: AddPatternMethod,
/**
* intent — this head takes no args; kept for NODE LAW shape parity.
*/
args?: Array<Argument>,
/**
* intent — one `lineFamily` step per drawn family, non-empty.
*/
steps: Array<PatternStepNode>,
/**
* intent — `attributes` only.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim; absent falls back to key (RecordView.ts: "header = label (or key)"). |
method | AddPatternMethod | no | intent | intent — the one closed-literal patterns-lane head. |
args | Array<Argument> | yes | intent | intent — this head takes no args; kept for NODE LAW shape parity. |
steps | Array<PatternStepNode> | no | intent | intent — one lineFamily step per drawn family, non-empty. |
properties | Array<PropertyNode> | yes | intent | intent — attributes only. |
ViewNode
A views[] entry — {key, method, args?, properties?}: ONE method view; args position/target/up/projection/fov/height, both lenses storable at once, only the active projection's read at evaluate. properties carries display style (background/shading/exposure/ shadows/axes).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { ViewMethod } from "./ViewMethod.js";
/**
* A `views[]` entry — `{key, method, args?, properties?}`: ONE method
* `view`; args `position`/`target`/`up`/`projection`/`fov`/`height`, both
* lenses storable at once, only the active projection's read at evaluate.
* `properties` carries display style (`background`/`shading`/`exposure`/
* `shadows`/`axes`).
*/
export type ViewNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor chrome, printed VERBATIM (not an expression); absent
* falls back to `key` (`SceneMenu.ts`: `view.label ?? view.key`).
*/
label?: string,
/**
* intent — the one closed-literal views-lane head, `view`.
*/
method: ViewMethod,
/**
* intent — the pose args (`position`/`target`/`up`), `projection`, and
* both lenses (`fov`/`height`).
*/
args?: Array<Argument>,
/**
* intent — display style (`background`/`shading`/`exposure`/`shadows`/`axes`).
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor chrome, printed VERBATIM (not an expression); absent falls back to key (SceneMenu.ts: view.label ?? view.key). |
method | ViewMethod | no | intent | intent — the one closed-literal views-lane head, view. |
args | Array<Argument> | yes | intent | intent — the pose args (position/target/up), projection, and both lenses (fov/height). |
properties | Array<PropertyNode> | yes | intent | intent — display style (background/shading/exposure/shadows/axes). |
Argument
One value + its domain — the shape of every arg (a parameter's value, a step arg, a properties arg). min/max are numeric-only; options, when present, is the arg's whole domain.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* One value + its domain — the shape of every arg (a parameter's value, a
* step arg, a properties arg). `min`/`max` are numeric-only; `options`, when
* present, is the arg's whole domain.
*/
export type Argument = {
/**
* identity — the arg's name; meant unique among its owning node's
* `args`, but nothing rejects a duplicate — `node_args::node_arg_input`/
* `set_node_arg` read and write only the FIRST match, silently ignoring
* any later one.
*/
key: string,
/**
* intent — an expression string, authored and underivable; may be
* empty (an unselected file parameter authors nothing, so this arg's
* min/max/options do not apply).
*/
input: string,
/**
* intent — expression → number, inclusive lower bound.
*/
min?: string,
/**
* intent — expression → number, inclusive upper bound.
*/
max?: string,
/**
* intent — expression → non-empty array, the arg's whole domain.
*/
options?: string,
/**
* intent — expression → `[{ time, value }]`, explicit key pairs on the
* document's one timeline (USD `timeSamples`, Blender `keyframe_points`).
* Legal ONLY on the `value` arg of a `length`/`number`/`angle`/`integer`
* PARAMETER — the parameter is the clip; any other arg fails loud. The
* host plays it (`engine_animation_set`); the engine never samples it.
*/
keyframes?: string,
/**
* intent — expression → boolean: whether the configurator shows this
* parameter to the buyer (true = shown, absent = shown; a parameter
* hidden this way still evaluates and still feeds every expression that
* reads it). Legal ONLY on the `value` arg of a PARAMETER — any other
* arg fails loud. It may read any parameter of the scope, so a
* parameter can be conditional on another.
*/
visible?: string, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — the arg's name; meant unique among its owning node's args, but nothing rejects a duplicate — node_args::node_arg_input/ set_node_arg read and write only the FIRST match, silently ignoring any later one. |
input | string | no | intent | intent — an expression string, authored and underivable; may be empty (an unselected file parameter authors nothing, so this arg's min/max/options do not apply). |
min | string | yes | intent | intent — expression → number, inclusive lower bound. |
max | string | yes | intent | intent — expression → number, inclusive upper bound. |
options | string | yes | intent | intent — expression → non-empty array, the arg's whole domain. |
keyframes | string | yes | intent | intent — expression → [{ time, value }], explicit key pairs on the document's one timeline (USD timeSamples, Blender keyframe_points). Legal ONLY on the value arg of a length/number/angle/integer PARAMETER — the parameter is the clip; any other arg fails loud. The host plays it (engine_animation_set); the engine never samples it. |
visible | string | yes | intent | intent — expression → boolean: whether the configurator shows this parameter to the buyer (true = shown, absent = shown; a parameter hidden this way still evaluates and still feeds every expression that reads it). Legal ONLY on the value arg of a PARAMETER — any other arg fails loud. It may read any parameter of the scope, so a parameter can be conditional on another. |
ComponentMethod
The two components-lane methods, a closed pair: createComponent holds the component document inline (data), loadComponent names a model document the host resolves (url). Both evaluate to a ModelJson.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The two components-lane methods, a closed pair: `createComponent` holds
* the component document inline (`data`), `loadComponent` names a
* model document the host resolves (`url`). Both evaluate to a `ModelJson`.
*/
export type ComponentMethod = "createComponent" | "loadComponent";Values: "createComponent", "loadComponent".
AddLayerMethod
The one layers-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one layers-lane head method.
*/
export type AddLayerMethod = "addLayer";Values: "addLayer".
PropertyNode
One entry of a properties list — { method, args? }, OPEN at the shape tier: which methods are legal in which home is a registry check (crate::validate::registry for an object's placement properties, crate::validate::lanes for a material/layer/pattern's own), never a schema enum.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One entry of a `properties` list — `{ method, args? }`, OPEN at the shape
* tier: which methods are legal in which home is a registry check
* (`crate::validate::registry` for an object's placement properties,
* `crate::validate::lanes` for a material/layer/pattern's own), never a
* schema enum.
*/
export type PropertyNode = {
/**
* intent — the registry-checked property method.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
method | string | no | intent | intent — the registry-checked property method. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
AddMaterialMethod
The one materials-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one materials-lane head method.
*/
export type AddMaterialMethod = "addMaterial";Values: "addMaterial".
Environment
The light that has no place in space — the sun, sky and an HDRI. ONE per document. The sun is DERIVED from site + moment, never authored.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { EnvironmentHdri } from "./EnvironmentHdri.js";
import type { Site } from "./Site.js";
import type { SunMoment } from "./SunMoment.js";
/**
* The light that has no place in space — the sun, sky and an HDRI. ONE per
* document. The sun is DERIVED from `site` + `moment`, never authored.
*/
export type Environment = {
/**
* intent — where the model stands on Earth; required together with
* `moment` for any sun at all — `graph::model::sun_of` returns no sun
* (not even a default direction) when either is absent, so `sun_lux`/
* `sun_kelvin` go unread without both.
*/
site?: Site,
/**
* intent — the moment the sun is computed for; paired with `site` —
* see its own doc, both or neither.
*/
moment?: SunMoment,
/**
* intent — sun illuminance in lux, read only once `site`+`moment` give
* a sun; absent = the fixed `DEFAULT_SUN_LUX` (10,000 lux, CIE/IES
* clear-sky reference, `graph::model::sun_of`) — never derived from
* `site`/`moment`.
*/
sunLux?: number,
/**
* intent — sun color temperature in kelvin, read only once `site`+
* `moment` give a sun; absent = the resolver's default.
*/
sunKelvin?: number,
/**
* intent — the sky-fill color; absent = the resolver's default.
*/
skyColor?: string,
/**
* intent — the ground-fill color; absent = the resolver's default.
*/
groundColor?: string,
/**
* intent — sky illuminance in lux; absent = the resolver's default.
*/
skyLux?: number,
/**
* intent — image-based lighting; absent = the host's neutral built-in room.
*/
hdri?: EnvironmentHdri, };| field | type | optional | class | doc |
|---|---|---|---|---|
site | Site | yes | intent | intent — where the model stands on Earth; required together with moment for any sun at all — graph::model::sun_of returns no sun (not even a default direction) when either is absent, so sun_lux/ sun_kelvin go unread without both. |
moment | SunMoment | yes | intent | intent — the moment the sun is computed for; paired with site — see its own doc, both or neither. |
sunLux | number | yes | intent | intent — sun illuminance in lux, read only once site+moment give a sun; absent = the fixed DEFAULT_SUN_LUX (10,000 lux, CIE/IES clear-sky reference, graph::model::sun_of) — never derived from site/moment. |
sunKelvin | number | yes | intent | intent — sun color temperature in kelvin, read only once site+ moment give a sun; absent = the resolver's default. |
skyColor | string | yes | intent | intent — the sky-fill color; absent = the resolver's default. |
groundColor | string | yes | intent | intent — the ground-fill color; absent = the resolver's default. |
skyLux | number | yes | intent | intent — sky illuminance in lux; absent = the resolver's default. |
hdri | EnvironmentHdri | yes | intent | intent — image-based lighting; absent = the host's neutral built-in room. |
UnitConfig
length is REQUIRED, no default: validate is not a normalizer.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { LengthUnit } from "./LengthUnit.js";
/**
* `length` is REQUIRED, no default: validate is not a normalizer.
*/
export type UnitConfig = {
/**
* intent — the display/input unit a surface shows length values in.
*/
length: LengthUnit, };| field | type | optional | class | doc |
|---|---|---|---|---|
length | LengthUnit | no | intent | intent — the display/input unit a surface shows length values in. |
ObjectMethod
The two structural object methods, a closed enum — Object admits only steps (a data chain), Block admits only objects (a nest). A record producer (linearDimension/hatch/section/…) is no longer a third object-tier shape: it is an ordinary steps[] producer step.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The two structural object methods, a closed enum — `Object` admits only
* `steps` (a data chain), `Block` admits only `objects` (a nest). A record
* producer (`linearDimension`/`hatch`/`section`/…) is no longer a
* third object-tier shape: it is an ordinary `steps[]` producer step.
*/
export type ObjectMethod = "createObject" | "createBlock";Values: "createObject", "createBlock".
StepNode
One step of a data-streaming chain — no key (nothing references a step; a reference names an object) and no enabled (every arg is already an expression).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One step of a data-streaming chain — no key (nothing references a step;
* a reference names an object) and no `enabled` (every arg is already an
* expression).
*/
export type StepNode = {
/**
* intent — editor-chrome display text for this step, printed verbatim;
* absent falls back to the registry's friendly name for `method`.
*/
label?: string,
/**
* intent — the catalog method this step invokes.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
label | string | yes | intent | intent — editor-chrome display text for this step, printed verbatim; absent falls back to the registry's friendly name for method. |
method | string | no | intent | intent — the catalog method this step invokes. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ParameterMethod
The 11 value methods a parameters[] entry may bind — a closed list, unlike StepNode.method (open-ended, the catalog's NODES table closes it instead). function was removed as a parameter method (ADR 0015: a parameter is a VALUE, never a formula) and fails like any unknown method; the function VALUE TYPE itself is unaffected (a callback arg, e.g. curveFunction.point, still evaluates to one).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The 11 value methods a `parameters[]` entry may bind — a closed list,
* unlike `StepNode.method` (open-ended, the catalog's `NODES` table closes
* it instead). `function` was removed as a parameter method (ADR 0015: a
* parameter is a VALUE, never a formula) and fails like any unknown
* method; the `function` VALUE TYPE itself is unaffected (a callback arg,
* e.g. `curveFunction.point`, still evaluates to one).
*/
export type ParameterMethod = "length" | "lengths" | "points" | "number" | "integer" | "angle" | "boolean" | "color" | "text" | "url" | "surface";Values: "length", "lengths", "points", "number", "integer", "angle", "boolean", "color", "text", "url", "surface".
AddPatternMethod
The one patterns-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one patterns-lane head method.
*/
export type AddPatternMethod = "addPattern";Values: "addPattern".
PatternStepNode
One patterns[].steps entry — a drawn line family. Carries the same shape as StepNode (H9): a pattern step is a step.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { LineFamilyMethod } from "./LineFamilyMethod.js";
/**
* One `patterns[].steps` entry — a drawn line family. Carries the same
* shape as `StepNode` (H9): a pattern step is a step.
*/
export type PatternStepNode = {
/**
* intent — editor-chrome display text, printed verbatim; absent falls
* back to the registry's friendly name for `method` (`StepView.ts`'s
* `renderStep`, shared by every step-shaped row, this one included).
*/
label?: string,
/**
* intent — the one closed-literal pattern-step method.
*/
method: LineFamilyMethod,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
label | string | yes | intent | intent — editor-chrome display text, printed verbatim; absent falls back to the registry's friendly name for method (StepView.ts's renderStep, shared by every step-shaped row, this one included). |
method | LineFamilyMethod | no | intent | intent — the one closed-literal pattern-step method. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ViewMethod
The one views-lane head method, a closed enum — a view is ONE node, not a chain: method is fixed to view; its projection ARG (not the method) picks perspective or orthographic — one class/struct serving both projections at once, as SketchUp's Camera and Blender's Camera (both lens fields present regardless of the active one) do.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one views-lane head method, a closed enum — a view is ONE node, not
* a chain: `method` is fixed to `view`; its `projection` ARG (not the
* method) picks perspective or orthographic — one class/struct serving
* both projections at once, as SketchUp's `Camera` and Blender's `Camera`
* (both lens fields present regardless of the active one) do.
*/
export type ViewMethod = "view";Values: "view".
EnvironmentHdri
Image-based lighting. Absent = the host's neutral built-in room. Exactly one of parameter/url is set (checked post-deserialize, validate::lanes::environment_errors) — H6: the old single name field told the two apart by sniffing https:/data:, an implicit pairing.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Image-based lighting. Absent = the host's neutral built-in room. Exactly
* one of `parameter`/`url` is set (checked post-deserialize,
* `validate::lanes::environment_errors`) — H6: the old single `name` field
* told the two apart by sniffing `https:`/`data:`, an implicit pairing.
*/
export type EnvironmentHdri = {
/**
* intent — the KEY of a `url`-method parameter (checked at validate).
*/
parameter?: string,
/**
* intent — a direct https:/data: address.
*/
url?: string,
/**
* intent — absent = the resolver's own default intensity.
*/
intensity?: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
parameter | string | yes | intent | intent — the KEY of a url-method parameter (checked at validate). |
url | string | yes | intent | intent — a direct https:/data: address. |
intensity | number | yes | intent | intent — absent = the resolver's own default intensity. |
Site
Where the model stands on Earth.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Where the model stands on Earth.
*/
export type Site = {
/**
* geometry — degrees north of the equator (WGS84); negative is south.
* Fails validate outside [-90, 90] (`validate::lanes::environment_errors`).
*/
latitude: number,
/**
* geometry — degrees east of Greenwich (WGS84); negative is west.
* Fails validate outside [-180, 180].
*/
longitude: number,
/**
* intent — compass bearing of the model's +Y axis, degrees clockwise
* from true north. Absent = 0 (+Y points true north).
*/
northAngle?: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
latitude | number | no | geometry | geometry — degrees north of the equator (WGS84); negative is south. Fails validate outside [-90, 90] (validate::lanes::environment_errors). |
longitude | number | no | geometry | geometry — degrees east of Greenwich (WGS84); negative is west. Fails validate outside [-180, 180]. |
northAngle | number | yes | intent | intent — compass bearing of the model's +Y axis, degrees clockwise from true north. Absent = 0 (+Y points true north). |
SunMoment
The moment the sun is computed for — a document FACT, never the wall clock. hour is local solar time. A moment carries no year, so February closes at 28 (crate::document::vocabulary::days_in_month).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The moment the sun is computed for — a document FACT, never the wall
* clock. `hour` is local solar time. A moment carries no year, so February
* closes at 28 (`crate::document::vocabulary::days_in_month`).
*/
export type SunMoment = {
/**
* intent — 1-12; fails validate outside that range.
*/
month: number,
/**
* intent — 1-31; fails validate when it exceeds the given month's real
* length (no year, so month 2 tops out at 28) — never clamped.
*/
day: number,
/**
* intent — local solar time; fails validate outside [0, 24].
*/
hour: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
month | number | no | intent | intent — 1-12; fails validate outside that range. |
day | number | no | intent | intent — 1-31; fails validate when it exceeds the given month's real length (no year, so month 2 tops out at 28) — never clamped. |
hour | number | no | intent | intent — local solar time; fails validate outside [0, 24]. |
LengthUnit
The display/input unit a surface shows length values in. The document's numbers are ALWAYS millimetres; this names only the edge conversion. DERIVED from LENGTH_UNITS (document/vocabulary.rs) — the same five units, as a closed enum instead of a string list.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The display/input unit a surface shows length values in. The document's
* numbers are ALWAYS millimetres; this names only the edge conversion.
* DERIVED from `LENGTH_UNITS` (`document/vocabulary.rs`) — the same five
* units, as a closed enum instead of a string list.
*/
export type LengthUnit = "mm" | "cm" | "m" | "in" | "ft";Values: "mm", "cm", "m", "in", "ft".
LineFamilyMethod
The one pattern-lane step method, a closed literal.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one pattern-lane step method, a closed literal.
*/
export type LineFamilyMethod = "lineFamily";Values: "lineFamily".