@sakibcoolz/core 0.1.1 → 0.2.0
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/README.md +67 -7
- package/dist/acquisition.d.ts +29 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +30 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/assembly.d.ts +5 -2
- package/dist/assembly.d.ts.map +1 -1
- package/dist/assembly.js +7 -4
- package/dist/assembly.js.map +1 -1
- package/dist/attach.d.ts +4 -2
- package/dist/attach.d.ts.map +1 -1
- package/dist/attach.js +5 -3
- package/dist/attach.js.map +1 -1
- package/dist/clipboard.d.ts +6 -4
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +25 -4
- package/dist/clipboard.js.map +1 -1
- package/dist/collision.d.ts +2 -2
- package/dist/collision.js.map +1 -1
- package/dist/digest.d.ts +9 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +68 -0
- package/dist/digest.js.map +1 -0
- package/dist/flow.d.ts +3 -2
- package/dist/flow.d.ts.map +1 -1
- package/dist/flow.js.map +1 -1
- package/dist/graph.d.ts +67 -7
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +195 -10
- package/dist/graph.js.map +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/observation.d.ts +1 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +4 -1
- package/dist/observation.js.map +1 -1
- package/dist/routing.d.ts +6 -3
- package/dist/routing.d.ts.map +1 -1
- package/dist/routing.js +12 -2
- package/dist/routing.js.map +1 -1
- package/dist/scene.d.ts +245 -5
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +94 -3
- package/dist/scene.js.map +1 -1
- package/dist/serialization.d.ts +7 -7
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +120 -8
- package/dist/serialization.js.map +1 -1
- package/dist/snapping.d.ts +2 -2
- package/dist/snapping.d.ts.map +1 -1
- package/dist/snapping.js +10 -7
- package/dist/snapping.js.map +1 -1
- package/dist/status.d.ts +56 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +114 -0
- package/dist/status.js.map +1 -0
- package/dist/tags.d.ts +52 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +103 -0
- package/dist/tags.js.map +1 -0
- package/dist/telemetry.d.ts +42 -4
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +84 -8
- package/dist/telemetry.js.map +1 -1
- package/dist/touching.d.ts +2 -2
- package/dist/touching.d.ts.map +1 -1
- package/dist/touching.js +7 -4
- package/dist/touching.js.map +1 -1
- package/dist/units.js +1 -1
- package/dist/units.js.map +1 -1
- package/dist/upgrade.d.ts +2 -2
- package/dist/upgrade.js.map +1 -1
- package/dist/validation.d.ts +33 -6
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +806 -39
- package/dist/validation.js.map +1 -1
- package/package.json +4 -2
- package/schema/fixtures/invalid/association-without-relationship.scene.json +69 -0
- package/schema/fixtures/invalid/binding-kind.scene.json +14 -0
- package/schema/fixtures/invalid/command-zero-step.scene.json +105 -0
- package/schema/fixtures/invalid/empty-name.scene.json +30 -0
- package/schema/fixtures/invalid/expected.json +70 -0
- package/schema/fixtures/invalid/extension-not-namespaced.scene.json +10 -0
- package/schema/fixtures/invalid/extension-prototype-key.scene.json +12 -0
- package/schema/fixtures/invalid/missing-document-type.scene.json +6 -0
- package/schema/fixtures/invalid/non-string-label.scene.json +32 -0
- package/schema/fixtures/invalid/underlay-opacity.scene.json +17 -0
- package/schema/fixtures/invalid/unknown-component-kind.scene.json +29 -0
- package/schema/fixtures/invalid/unknown-relationship.scene.json +63 -0
- package/schema/fixtures/invalid/unknown-root-field.scene.json +8 -0
- package/schema/fixtures/invalid/unsupported-version.scene.json +7 -0
- package/schema/fixtures/invalid/view-rotation.scene.json +139 -0
- package/schema/fixtures/invalid/writable-string.scene.json +93 -0
- package/schema/fixtures/invalid/writable-without-limits.scene.json +100 -0
- package/schema/fixtures/invalid/zero-scale.scene.json +29 -0
- package/schema/fixtures/migration/README.md +18 -0
- package/schema/fixtures/migration/v1-demo.scene.json +160 -0
- package/schema/fixtures/migration/v1-demo.v4.json +198 -0
- package/schema/fixtures/migration/v2-demo.scene.json +244 -0
- package/schema/fixtures/migration/v2-demo.v4.json +245 -0
- package/schema/fixtures/migration/v2-generated-12.scene.json +473 -0
- package/schema/fixtures/migration/v2-generated-12.v4.json +474 -0
- package/schema/fixtures/migration/v3-demo.scene.json +244 -0
- package/schema/fixtures/migration/v3-demo.v4.json +245 -0
- package/schema/fixtures/migration/v3-generated-12.scene.json +473 -0
- package/schema/fixtures/migration/v3-generated-12.v4.json +474 -0
- package/schema/fixtures/migration/v3-mostly-connected-plant.scene.json +386 -0
- package/schema/fixtures/migration/v3-mostly-connected-plant.v4.json +387 -0
- package/schema/fixtures/migration/v3-open-joints-plant.scene.json +288 -0
- package/schema/fixtures/migration/v3-open-joints-plant.v4.json +289 -0
- package/schema/fixtures/migration/v3-unconnected-plant.scene.json +14 -0
- package/schema/fixtures/migration/v3-unconnected-plant.v4.json +276 -0
- package/schema/fixtures/projection/acquisition.plan.json +50 -0
- package/schema/fixtures/projection/control-line.plan.json +86 -0
- package/schema/fixtures/valid/acquisition.scene.json +117 -0
- package/schema/fixtures/valid/associations.scene.json +79 -0
- package/schema/fixtures/valid/commands.scene.json +155 -0
- package/schema/fixtures/valid/control-line.scene.json +210 -0
- package/schema/fixtures/valid/empty.scene.json +7 -0
- package/schema/fixtures/valid/identity-and-extensions.scene.json +96 -0
- package/schema/fixtures/valid/tank-valve-line.scene.json +89 -0
- package/schema/fixtures/valid/views.scene.json +139 -0
- package/schema/fixtures/validator-only/association-id-reuses-connection.scene.json +70 -0
- package/schema/fixtures/validator-only/association-unknown-component.scene.json +70 -0
- package/schema/fixtures/validator-only/command-max-below-min.scene.json +104 -0
- package/schema/fixtures/validator-only/command-out-of-type-range.scene.json +97 -0
- package/schema/fixtures/validator-only/connection-domain-mismatch.scene.json +63 -0
- package/schema/fixtures/validator-only/credential-in-connection.scene.json +66 -0
- package/schema/fixtures/validator-only/credential-in-extension.scene.json +14 -0
- package/schema/fixtures/validator-only/credential-label.scene.json +32 -0
- package/schema/fixtures/validator-only/duplicate-component-id.scene.json +50 -0
- package/schema/fixtures/validator-only/endpoint-with-credentials.scene.json +74 -0
- package/schema/fixtures/validator-only/expected.json +66 -0
- package/schema/fixtures/validator-only/modbus-coil-float.scene.json +100 -0
- package/schema/fixtures/validator-only/non-unit-rotation.scene.json +29 -0
- package/schema/fixtures/validator-only/unknown-data-source.scene.json +100 -0
- package/schema/fixtures/validator-only/unknown-port.scene.json +62 -0
- package/schema/fixtures/validator-only/unregistered-host-type.scene.json +29 -0
- package/schema/fixtures/validator-only/view-unknown-component.scene.json +143 -0
- package/schema/industrial-scene.v4.schema.json +365 -0
package/dist/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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","sourcesContent":["import { seatOnConnection } from './joints.js';\nimport type { ComponentInstance, ComponentKind, ConnectionPort, ScadaScene, SceneConnection } from './scene.js';\nimport { findTouchingPorts } from './touching.js';\nimport { portToWorld } from './transforms.js';\n\ntype Endpoint = SceneConnection['from'];\ntype Resolver = (type: ComponentKind, properties?: ComponentInstance['properties']) => readonly ConnectionPort[] | undefined;\n\nexport interface UpgradeOptions {\n /** Ports with the current dimensions. */\n resolvePorts: Resolver;\n /** Ports with the dimensions the file was written with (e.g. before ASME fittings, ADR-0014). */\n resolveLegacyPorts: Resolver;\n}\n\nexport interface UpgradeResult {\n scene: ScadaScene;\n /** Parts moved so that joints which met under the old dimensions meet again. */\n reseated: number;\n}\n\n\n/** Each port of a kind under the old dimensions, plus its current place where that differs. */\nfunction eitherGeneration(options: UpgradeOptions): Resolver {\n return (type, properties) => {\n const old = options.resolveLegacyPorts(type, properties) ?? [];\n const now = options.resolvePorts(type, properties) ?? [];\n const same = (a: ConnectionPort, b: ConnectionPort) => a.id === b.id && a.position.every((n, i) => n === b.position[i]) && a.direction.every((n, i) => n === b.direction[i]);\n return [...old, ...now.filter((p) => !old.some((o) => same(o, p)))];\n };\n}\n\n/** Whether two ports sit together face to face (1 mm, 1°), as `findTouchingPorts` decides, in any of the places `resolve` gives each. */\nfunction meets(scene: ScadaScene, a: Endpoint, b: Endpoint, resolve: Resolver): boolean {\n const at = (e: Endpoint) => {\n const c = scene.components.find((x) => x.id === e.instanceId);\n return c ? (resolve(c.type, c.properties) ?? []).filter((q) => q.id === e.portId).map((q) => portToWorld(c, q)) : [];\n };\n return at(a).some((p) => at(b).some((q) => {\n const distance = Math.hypot(...p.position.map((n, i) => n - q.position[i]));\n const facing = -p.direction.reduce((s, n, i) => s + n * q.direction[i], 0);\n return distance <= 0.001 && facing >= Math.cos(Math.PI / 180);\n }));\n}\n\n/**\n * Brings a scene written with older component dimensions up to date: every pair of ports that met\n * under the old dimensions (connected or merely touching) is made to meet again, walking each\n * line outwards from its first part so downstream parts follow. A file may mix generations (e.g.\n * current fittings with older valves): each side of a joint may be in either, and joints that\n * already meet carry the parts after them along. Deliberate gaps are left alone,\n * connections are not changed, and a scene already in current dimensions is returned as is.\n */\nexport function upgradeDimensions(scene: ScadaScene, options: UpgradeOptions): UpgradeResult {\n const either = eitherGeneration(options);\n const edges: { a: Endpoint; b: Endpoint; connectionId?: string }[] = [\n ...scene.connections.filter((c) => meets(scene, c.from, c.to, either)).map((c) => ({ a: c.from, b: c.to, connectionId: c.id })),\n ...findTouchingPorts(scene, { resolvePorts: either }).matches.map((m) => ({ a: m.from, b: m.to })),\n ];\n if (edges.length === 0) return { scene, reseated: 0 };\n\n // Work on a flat copy (no assembly links) so seating moves one part at a time; unconnected\n // touching pairs get temporary connections for the seat and are dropped afterwards.\n const temp: SceneConnection[] = edges.filter((e) => !e.connectionId).map((e, i) => ({ id: `\\u0000upgrade${i}`, from: e.a, to: e.b }));\n let n = 0;\n for (const e of edges) if (!e.connectionId) e.connectionId = temp[n++].id;\n let work: ScadaScene = {\n ...scene,\n components: scene.components.map(({ parentId: _, ...c }) => c),\n connections: [...scene.connections, ...temp],\n };\n\n const order = new Map(scene.components.map((c, i) => [c.id, i]));\n const touched = [...new Set(edges.flatMap((e) => [e.a.instanceId, e.b.instanceId]))].sort((x, y) => order.get(x)! - order.get(y)!);\n const placed = new Set<string>();\n let reseated = 0;\n for (const root of touched) {\n if (placed.has(root)) continue;\n placed.add(root);\n const queue = [root];\n while (queue.length) {\n const u = queue.shift()!;\n for (const e of edges) {\n const [mine, other] = e.a.instanceId === u ? [e.a, e.b] : e.b.instanceId === u ? [e.b, e.a] : [];\n if (!mine || !other || placed.has(other.instanceId)) continue;\n placed.add(other.instanceId);\n queue.push(other.instanceId);\n if (meets(work, mine, other, options.resolvePorts)) continue;\n const seated = seatOnConnection(work, e.connectionId!, other.instanceId, options);\n if (seated.ok) {\n work = seated.scene;\n reseated++;\n }\n }\n }\n }\n if (reseated === 0) return { scene, reseated: 0 };\n const pose = new Map(work.components.map((c) => [c.id, c]));\n return {\n scene: { ...scene, components: scene.components.map((c) => ({ ...c, position: pose.get(c.id)!.position, rotation: pose.get(c.id)!.rotation })) },\n reseated,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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","sourcesContent":["import { seatOnConnection } from './joints.js';\nimport type { ComponentInstance, ComponentType, ConnectionPort, ScadaScene, SceneConnection } from './scene.js';\nimport { findTouchingPorts } from './touching.js';\nimport { portToWorld } from './transforms.js';\n\ntype Endpoint = SceneConnection['from'];\ntype Resolver = (type: ComponentType, properties?: ComponentInstance['properties']) => readonly ConnectionPort[] | undefined;\n\nexport interface UpgradeOptions {\n /** Ports with the current dimensions. */\n resolvePorts: Resolver;\n /** Ports with the dimensions the file was written with (e.g. before ASME fittings, ADR-0014). */\n resolveLegacyPorts: Resolver;\n}\n\nexport interface UpgradeResult {\n scene: ScadaScene;\n /** Parts moved so that joints which met under the old dimensions meet again. */\n reseated: number;\n}\n\n\n/** Each port of a kind under the old dimensions, plus its current place where that differs. */\nfunction eitherGeneration(options: UpgradeOptions): Resolver {\n return (type, properties) => {\n const old = options.resolveLegacyPorts(type, properties) ?? [];\n const now = options.resolvePorts(type, properties) ?? [];\n const same = (a: ConnectionPort, b: ConnectionPort) => a.id === b.id && a.position.every((n, i) => n === b.position[i]) && a.direction.every((n, i) => n === b.direction[i]);\n return [...old, ...now.filter((p) => !old.some((o) => same(o, p)))];\n };\n}\n\n/** Whether two ports sit together face to face (1 mm, 1°), as `findTouchingPorts` decides, in any of the places `resolve` gives each. */\nfunction meets(scene: ScadaScene, a: Endpoint, b: Endpoint, resolve: Resolver): boolean {\n const at = (e: Endpoint) => {\n const c = scene.components.find((x) => x.id === e.instanceId);\n return c ? (resolve(c.type, c.properties) ?? []).filter((q) => q.id === e.portId).map((q) => portToWorld(c, q)) : [];\n };\n return at(a).some((p) => at(b).some((q) => {\n const distance = Math.hypot(...p.position.map((n, i) => n - q.position[i]));\n const facing = -p.direction.reduce((s, n, i) => s + n * q.direction[i], 0);\n return distance <= 0.001 && facing >= Math.cos(Math.PI / 180);\n }));\n}\n\n/**\n * Brings a scene written with older component dimensions up to date: every pair of ports that met\n * under the old dimensions (connected or merely touching) is made to meet again, walking each\n * line outwards from its first part so downstream parts follow. A file may mix generations (e.g.\n * current fittings with older valves): each side of a joint may be in either, and joints that\n * already meet carry the parts after them along. Deliberate gaps are left alone,\n * connections are not changed, and a scene already in current dimensions is returned as is.\n */\nexport function upgradeDimensions(scene: ScadaScene, options: UpgradeOptions): UpgradeResult {\n const either = eitherGeneration(options);\n const edges: { a: Endpoint; b: Endpoint; connectionId?: string }[] = [\n ...scene.connections.filter((c) => meets(scene, c.from, c.to, either)).map((c) => ({ a: c.from, b: c.to, connectionId: c.id })),\n ...findTouchingPorts(scene, { resolvePorts: either }).matches.map((m) => ({ a: m.from, b: m.to })),\n ];\n if (edges.length === 0) return { scene, reseated: 0 };\n\n // Work on a flat copy (no assembly links) so seating moves one part at a time; unconnected\n // touching pairs get temporary connections for the seat and are dropped afterwards.\n const temp: SceneConnection[] = edges.filter((e) => !e.connectionId).map((e, i) => ({ id: `\\u0000upgrade${i}`, from: e.a, to: e.b }));\n let n = 0;\n for (const e of edges) if (!e.connectionId) e.connectionId = temp[n++].id;\n let work: ScadaScene = {\n ...scene,\n components: scene.components.map(({ parentId: _, ...c }) => c),\n connections: [...scene.connections, ...temp],\n };\n\n const order = new Map(scene.components.map((c, i) => [c.id, i]));\n const touched = [...new Set(edges.flatMap((e) => [e.a.instanceId, e.b.instanceId]))].sort((x, y) => order.get(x)! - order.get(y)!);\n const placed = new Set<string>();\n let reseated = 0;\n for (const root of touched) {\n if (placed.has(root)) continue;\n placed.add(root);\n const queue = [root];\n while (queue.length) {\n const u = queue.shift()!;\n for (const e of edges) {\n const [mine, other] = e.a.instanceId === u ? [e.a, e.b] : e.b.instanceId === u ? [e.b, e.a] : [];\n if (!mine || !other || placed.has(other.instanceId)) continue;\n placed.add(other.instanceId);\n queue.push(other.instanceId);\n if (meets(work, mine, other, options.resolvePorts)) continue;\n const seated = seatOnConnection(work, e.connectionId!, other.instanceId, options);\n if (seated.ok) {\n work = seated.scene;\n reseated++;\n }\n }\n }\n }\n if (reseated === 0) return { scene, reseated: 0 };\n const pose = new Map(work.components.map((c) => [c.id, c]));\n return {\n scene: { ...scene, components: scene.components.map((c) => ({ ...c, position: pose.get(c.id)!.position, rotation: pose.get(c.id)!.rotation })) },\n reseated,\n };\n}\n"]}
|
package/dist/validation.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ComponentInstance, type
|
|
2
|
-
export type SceneValidationErrorCode = 'NOT_AN_OBJECT' | 'UNSUPPORTED_VERSION' | 'INVALID_FIELD' | 'UNKNOWN_FIELD' | 'LIMIT_EXCEEDED' | 'UNKNOWN_COMPONENT_KIND' | 'DUPLICATE_COMPONENT_ID' | 'DUPLICATE_CONNECTION_ID' | 'UNKNOWN_INSTANCE' | 'UNKNOWN_PORT' | 'SELF_CONNECTION' | 'INCOMPATIBLE_PORTS' | 'PORT_OCCUPIED' | 'DUPLICATE_EDGE' | 'UNSUPPORTED_SCALE' | 'INVALID_JSON' | 'UNKNOWN_CONNECTION' | 'UNBINDABLE_PROPERTY' | 'INVALID_UNIT' | 'DUPLICATE_BINDING_ID' | 'DUPLICATE_BINDING_TARGET' | 'INVALID_PROPERTY' | 'UNKNOWN_PARENT' | 'PARENT_CYCLE' | 'INVALID_UNDERLAY';
|
|
1
|
+
import { type JsonValue, type ComponentInstance, type ComponentType, type ConnectionPort, type Quantity, type ScadaScene } from './scene.js';
|
|
2
|
+
export type SceneValidationErrorCode = 'NOT_AN_OBJECT' | 'UNSUPPORTED_VERSION' | 'INVALID_FIELD' | 'UNKNOWN_FIELD' | 'LIMIT_EXCEEDED' | 'UNKNOWN_COMPONENT_KIND' | 'DUPLICATE_COMPONENT_ID' | 'DUPLICATE_CONNECTION_ID' | 'UNKNOWN_INSTANCE' | 'UNKNOWN_PORT' | 'SELF_CONNECTION' | 'INCOMPATIBLE_PORTS' | 'PORT_OCCUPIED' | 'DUPLICATE_EDGE' | 'UNSUPPORTED_SCALE' | 'INVALID_JSON' | 'UNKNOWN_CONNECTION' | 'UNBINDABLE_PROPERTY' | 'INVALID_UNIT' | 'DUPLICATE_BINDING_ID' | 'DUPLICATE_BINDING_TARGET' | 'INVALID_PROPERTY' | 'UNKNOWN_PARENT' | 'PARENT_CYCLE' | 'INVALID_UNDERLAY' | 'SECRET_FIELD' | 'DUPLICATE_DATA_SOURCE_ID' | 'DUPLICATE_VARIABLE_ID' | 'UNKNOWN_DATA_SOURCE' | 'INVALID_ADDRESS' | 'TYPE_MISMATCH' | 'UNKNOWN_VIEW_REFERENCE';
|
|
3
3
|
export interface SceneValidationError {
|
|
4
4
|
code: SceneValidationErrorCode;
|
|
5
5
|
/** Location in the input, e.g. `connections[2].to.instanceId`. */
|
|
@@ -11,7 +11,7 @@ export type SceneValidationResult =
|
|
|
11
11
|
{
|
|
12
12
|
ok: true;
|
|
13
13
|
scene: ScadaScene;
|
|
14
|
-
migratedFrom?: 1 | 2;
|
|
14
|
+
migratedFrom?: 1 | 2 | 3;
|
|
15
15
|
} | {
|
|
16
16
|
ok: false;
|
|
17
17
|
errors: SceneValidationError[];
|
|
@@ -19,6 +19,11 @@ export type SceneValidationResult =
|
|
|
19
19
|
export interface SceneLimits {
|
|
20
20
|
maxComponents: number;
|
|
21
21
|
maxConnections: number;
|
|
22
|
+
/** Port-less associations (ADR-0023), counted separately from connections. */
|
|
23
|
+
maxAssociations: number;
|
|
24
|
+
/** Acquisition sources and runtime variables (ADR-0024). */
|
|
25
|
+
maxDataSources: number;
|
|
26
|
+
maxVariables: number;
|
|
22
27
|
maxBindings: number;
|
|
23
28
|
maxIdLength: number;
|
|
24
29
|
maxProperties: number;
|
|
@@ -28,21 +33,32 @@ export interface SceneLimits {
|
|
|
28
33
|
}
|
|
29
34
|
export declare const defaultSceneLimits: Readonly<SceneLimits>;
|
|
30
35
|
export interface SceneValidationOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Checks the address of a runtime variable on a host's own (namespaced) protocol (ADR-0024) and
|
|
38
|
+
* returns its problems as sentences. Without it, such addresses are accepted as plain JSON.
|
|
39
|
+
*/
|
|
40
|
+
validateAddress?: (protocol: string, address: JsonValue) => string[];
|
|
31
41
|
/**
|
|
32
42
|
* Declared ports for a component type. Core does not import the catalog, so the caller supplies it.
|
|
33
43
|
* `properties` lets parametric types (e.g. pipe length) return per-instance ports.
|
|
34
44
|
*/
|
|
35
|
-
resolvePorts: (type:
|
|
45
|
+
resolvePorts: (type: ComponentType, properties?: ComponentInstance['properties']) => readonly ConnectionPort[] | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the host knows a component type (ADR-0022). Optional: without it only the built-in
|
|
48
|
+
* kinds are accepted. Custom types must also be namespaced (`com.example.part`); bare names
|
|
49
|
+
* are reserved for the built-ins.
|
|
50
|
+
*/
|
|
51
|
+
resolveType?: (type: ComponentType) => boolean;
|
|
36
52
|
/**
|
|
37
53
|
* Bindable properties and their quantities for a component type. When omitted, property bindings
|
|
38
54
|
* are only checked for an existing component, and their units are not checked.
|
|
39
55
|
*/
|
|
40
|
-
resolveBindable?: (type:
|
|
56
|
+
resolveBindable?: (type: ComponentType) => Readonly<Record<string, Quantity>> | undefined;
|
|
41
57
|
/**
|
|
42
58
|
* Checks authored property values (e.g. pipe length range). Each problem becomes an
|
|
43
59
|
* INVALID_PROPERTY error at `components[i].properties.<property>`. Optional.
|
|
44
60
|
*/
|
|
45
|
-
validateProperties?: (type:
|
|
61
|
+
validateProperties?: (type: ComponentType, properties: ComponentInstance['properties']) => readonly {
|
|
46
62
|
property: string;
|
|
47
63
|
message: string;
|
|
48
64
|
}[];
|
|
@@ -53,5 +69,16 @@ export interface SceneValidationOptions {
|
|
|
53
69
|
*/
|
|
54
70
|
validateUnderlay?: (svg: string) => string | undefined;
|
|
55
71
|
}
|
|
72
|
+
/** True for a key that names a credential: scene documents carry references to secrets, never secrets (ADR-0021). */
|
|
73
|
+
export declare function isSecretKey(key: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Validates an untrusted value as a scene and returns it in the current (version 4) model.
|
|
76
|
+
* Version 1 (`version: 1`), version 2 (array vectors) and version 3 input is migrated
|
|
77
|
+
* deterministically and reported via `migratedFrom` (ADR-0021).
|
|
78
|
+
* Never mutates or repairs the input: on success it returns a fresh copy, otherwise every error
|
|
79
|
+
* found, in input order, with paths in the input's own field names. Reference checks (ids, ports,
|
|
80
|
+
* compatibility, occupancy, scale policy) run only once the structure is valid. Each port accepts
|
|
81
|
+
* one connection.
|
|
82
|
+
*/
|
|
56
83
|
export declare function validateScene(input: unknown, options: SceneValidationOptions): SceneValidationResult;
|
|
57
84
|
//# sourceMappingURL=validation.d.ts.map
|
package/dist/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|