@hatiolab/figure-model 0.6.3 → 0.6.5

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/asset-types.d.ts +88 -2
  3. package/dist/asset-types.d.ts.map +1 -1
  4. package/dist/asset.d.ts.map +1 -1
  5. package/dist/asset.js +5 -1
  6. package/dist/asset.js.map +1 -1
  7. package/dist/authoring-actions.d.ts.map +1 -1
  8. package/dist/authoring-actions.js +2 -2
  9. package/dist/authoring-actions.js.map +1 -1
  10. package/dist/clip-keeping.d.ts +9 -0
  11. package/dist/clip-keeping.d.ts.map +1 -1
  12. package/dist/clip-keeping.js +34 -0
  13. package/dist/clip-keeping.js.map +1 -1
  14. package/dist/contract.d.ts +83 -0
  15. package/dist/contract.d.ts.map +1 -1
  16. package/dist/contract.js.map +1 -1
  17. package/dist/data-interface.d.ts +68 -0
  18. package/dist/data-interface.d.ts.map +1 -0
  19. package/dist/data-interface.js +370 -0
  20. package/dist/data-interface.js.map +1 -0
  21. package/dist/driver.d.ts +3 -0
  22. package/dist/driver.d.ts.map +1 -1
  23. package/dist/driver.js +22 -6
  24. package/dist/driver.js.map +1 -1
  25. package/dist/graph.d.ts +5 -1
  26. package/dist/graph.d.ts.map +1 -1
  27. package/dist/graph.js +6 -0
  28. package/dist/graph.js.map +1 -1
  29. package/dist/index.d.ts +5 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +5 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/item-seats.d.ts +50 -0
  34. package/dist/item-seats.d.ts.map +1 -0
  35. package/dist/item-seats.js +92 -0
  36. package/dist/item-seats.js.map +1 -0
  37. package/dist/joint-part-edits.d.ts.map +1 -1
  38. package/dist/joint-part-edits.js +3 -0
  39. package/dist/joint-part-edits.js.map +1 -1
  40. package/dist/kernel-version.d.ts +1 -1
  41. package/dist/kernel-version.js +1 -1
  42. package/dist/motion-groups.d.ts +73 -0
  43. package/dist/motion-groups.d.ts.map +1 -0
  44. package/dist/motion-groups.js +241 -0
  45. package/dist/motion-groups.js.map +1 -0
  46. package/dist/package.d.ts +3 -0
  47. package/dist/package.d.ts.map +1 -1
  48. package/dist/package.js.map +1 -1
  49. package/dist/part-edit.d.ts +58 -7
  50. package/dist/part-edit.d.ts.map +1 -1
  51. package/dist/part-edit.js +151 -12
  52. package/dist/part-edit.js.map +1 -1
  53. package/dist/proposal.d.ts +2 -2
  54. package/dist/proposal.d.ts.map +1 -1
  55. package/dist/proposal.js +37 -4
  56. package/dist/proposal.js.map +1 -1
  57. package/dist/release-contract.d.ts +1 -1
  58. package/dist/release-contract.d.ts.map +1 -1
  59. package/dist/release-contract.js +74 -0
  60. package/dist/release-contract.js.map +1 -1
  61. package/dist/robots.d.ts +22 -0
  62. package/dist/robots.d.ts.map +1 -1
  63. package/dist/robots.js +87 -0
  64. package/dist/robots.js.map +1 -1
  65. package/dist/room.d.ts.map +1 -1
  66. package/dist/room.js +1 -0
  67. package/dist/room.js.map +1 -1
  68. package/docs/motion-contract.md +30 -2
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAyEA,0DAA0D;AAC1D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAQ;IACZ,IAAI,CAAQ;IACrB,uFAAuF;IAC9E,OAAO,CAAuB;IAEvC,YAAY,IAAY,EAAE,IAAY,EAAE,MAAc,EAAE,OAA8B;QACpF,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,CAAC;CACF"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAgHA,0DAA0D;AAC1D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAQ;IACZ,IAAI,CAAQ;IACrB,uFAAuF;IAC9E,OAAO,CAAuB;IAEvC,YAAY,IAAY,EAAE,IAAY,EAAE,MAAc,EAAE,OAA8B;QACpF,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACnD,CAAC;CACF"}
@@ -0,0 +1,68 @@
1
+ import type { FigureAsset, FigureDataConnection, FigureDataProperty, FigureDataValue } from './asset-types.ts';
2
+ /** The fastest a motion group plays: three times its authored speed. 0 stops it. */
3
+ export declare const FIGURE_MOTION_SPEED_MAX = 3;
4
+ /**
5
+ * Refuses a data interface the contract does not allow (`DATA_INTERFACE`, or `ASSET_SCHEMA` for its shape). Called by
6
+ * `compileFigureAsset`, after the drivers and motion groups, whose clips a connection may name.
7
+ */
8
+ export declare function validateFigureDataInterface(asset: FigureAsset): void;
9
+ /** A value of a snapshot or a saved setting that cannot be taken, and why. */
10
+ export interface FigureDataValueIssue {
11
+ reason: 'not-a-record' | 'property-unknown' | 'type-mismatch' | 'out-of-range' | 'enum-unknown';
12
+ property?: string;
13
+ value?: unknown;
14
+ }
15
+ /** A figure's data interface made ready to read values: its properties by id, its connections, its defaults. */
16
+ export interface FigureDataPlan {
17
+ readonly properties: ReadonlyMap<string, FigureDataProperty>;
18
+ readonly connections: readonly FigureDataConnection[];
19
+ readonly defaults: Readonly<Record<string, FigureDataValue>>;
20
+ }
21
+ /**
22
+ * The data interface of an asset, checked against it, ready to read values; null when the figure declares none. A
23
+ * consumer makes this once per asset, not per frame.
24
+ */
25
+ export declare function compileFigureDataInterface(asset: FigureAsset): FigureDataPlan | null;
26
+ /**
27
+ * What in a set of values cannot be taken: a key that is not a property, a value of the wrong type, outside its range,
28
+ * or not one of its enum's values. Own keys only; `false` and `0` are values, not absences. Empty when all may be taken.
29
+ * `true` is not `1` and `"1"` is not `1`: nothing is converted.
30
+ */
31
+ export declare function validateFigureDataValues(plan: FigureDataPlan, values: unknown): FigureDataValueIssue[];
32
+ /** Where a property's value came from: the live snapshot, the saved setting, or the asset's default. */
33
+ export type FigureDataSource = 'live' | 'manual' | 'default';
34
+ /**
35
+ * Each property's value, in the order the detail design sets (§4.3): a key in the live snapshot, else the saved setting,
36
+ * else the asset's default. A key absent from the snapshot is not held from an earlier one. Both are checked first; a
37
+ * set with an issue is refused whole (`DATA_VALUE`), so nothing of it is half taken.
38
+ */
39
+ export declare function resolveFigureDataValues(plan: FigureDataPlan, given: {
40
+ manual?: Record<string, unknown> | null;
41
+ live?: Record<string, unknown> | null;
42
+ }): {
43
+ values: Record<string, FigureDataValue>;
44
+ sources: Record<string, FigureDataSource>;
45
+ };
46
+ /** What a set of values moves: state inputs (with how each is applied), palette colours, motion groups' clip and speed. */
47
+ export interface FigureDataResult {
48
+ states: Record<string, {
49
+ value: number;
50
+ sourceMode: 'observed' | 'commanded';
51
+ }>;
52
+ palette: Record<string, string>;
53
+ motion: Record<string, {
54
+ clip?: string;
55
+ speed?: number;
56
+ }>;
57
+ }
58
+ /**
59
+ * What the values move, through every connection. A property left out reads its default. The values are checked
60
+ * first, and a set with an issue is refused whole (`DATA_VALUE`). The result does not depend on the order of the
61
+ * connections: no two write the same thing, and none writes a property.
62
+ */
63
+ export declare function evaluateFigureDataInterface(plan: FigureDataPlan, values?: Record<string, unknown>): FigureDataResult;
64
+ /** The interface after a part was renamed: a state input the part owned (`<part>.…`) is followed to its new name. */
65
+ export declare function renameDataInterface(asset: FigureAsset, from: string, to: string): void;
66
+ /** The interface after a clip was renamed: every lookup that selects it in a motion group selects it by its new name. */
67
+ export declare function renameDataInterfaceClip(asset: FigureAsset, group: string, from: string, to: string): void;
68
+ //# sourceMappingURL=data-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-interface.d.ts","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAuB,kBAAkB,EAAoB,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIrJ,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAmKxC;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAmCpE;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,GAAG,kBAAkB,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAA;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,gHAAgH;AAChH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC5D,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACrD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;CAC7D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAQpF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG,oBAAoB,EAAE,CActG;AAED,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,GACxF;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAAE,CAgBxF;AAED,2HAA2H;AAC3H,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAA;KAAE,CAAC,CAAA;IAC/E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,gBAAgB,CAexH;AAED,qHAAqH;AACrH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAOtF;AAED,yHAAyH;AACzH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAUzG"}
@@ -0,0 +1,370 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ /*
5
+ * A figure's public data properties and what each moves inside it (ADR-0051 §2.2, detail design §4).
6
+ *
7
+ * The asset declares properties by stable id -- a number with a unit and a range, a boolean, or an enum -- and connects
8
+ * each to what it moves: a state input, a palette token's colour, or a motion group's clip or speed. A consumer maps its
9
+ * own data onto the property ids only; it never names a part or a graph node, so a figure can be authored again without
10
+ * its data paths changing.
11
+ *
12
+ * The connections are checked once, when the asset is read: every value a property can take must land inside what its
13
+ * target takes. While the figure runs only the values are checked, and a snapshot with one bad value is refused whole.
14
+ * Nothing here holds time or an instance: the consumer keeps the clock and the last good result.
15
+ */
16
+ import { FigureContractError } from "./contract.js";
17
+ import { figureUnitKnown } from "./graph.js";
18
+ import { FIGURE_PART_ID } from "./part-ids.js";
19
+ /** The fastest a motion group plays: three times its authored speed. 0 stops it. */
20
+ export const FIGURE_MOTION_SPEED_MAX = 3;
21
+ const COLOUR = /^#[0-9a-f]{6}$/i;
22
+ const fail = (code, path, message, details) => {
23
+ throw new FigureContractError(code, path, message, details);
24
+ };
25
+ const refuse = (path, message, details) => fail('DATA_INTERFACE', path, message, details);
26
+ function fields(o, required, optional, path) {
27
+ if (!o || typeof o !== 'object' || Array.isArray(o))
28
+ fail('ASSET_SCHEMA', path, 'object required');
29
+ for (const k of required)
30
+ if (!Object.hasOwn(o, k))
31
+ fail('ASSET_SCHEMA', path, `missing ${k}`);
32
+ for (const k of Object.keys(o))
33
+ if (![...required, ...optional].includes(k))
34
+ fail('ASSET_SCHEMA', path, `unknown ${k}`);
35
+ }
36
+ const finite = (v) => typeof v === 'number' && Number.isFinite(v);
37
+ /** A value checked against a property's kind and domain: null when it may be taken. */
38
+ function valueRefusal(property, value) {
39
+ if (property.kind === 'number') {
40
+ if (!finite(value))
41
+ return 'type-mismatch';
42
+ return value >= property.min && value <= property.max ? null : 'out-of-range';
43
+ }
44
+ if (property.kind === 'boolean')
45
+ return typeof value === 'boolean' ? null : 'type-mismatch';
46
+ if (typeof value !== 'string')
47
+ return 'type-mismatch';
48
+ return property.values.includes(value) ? null : 'enum-unknown';
49
+ }
50
+ /** Every value a lookup must cover: an enum's values, or both booleans. */
51
+ const domainOf = (property) => property.kind === 'enum' ? property.values : property.kind === 'boolean' ? [false, true] : null;
52
+ function checkProperty(p, path) {
53
+ if (!p || typeof p !== 'object' || Array.isArray(p))
54
+ fail('ASSET_SCHEMA', path, 'object required');
55
+ const kind = p.kind;
56
+ if (kind === 'number')
57
+ fields(p, ['id', 'label', 'kind', 'unit', 'min', 'max', 'default'], [], path);
58
+ else if (kind === 'boolean')
59
+ fields(p, ['id', 'label', 'kind', 'default'], [], path);
60
+ else if (kind === 'enum')
61
+ fields(p, ['id', 'label', 'kind', 'values', 'default'], [], path);
62
+ else
63
+ fail('ASSET_SCHEMA', `${path}.kind`, `${String(kind)} is not a data kind; number, boolean or enum`);
64
+ if (typeof p.id !== 'string' || !FIGURE_PART_ID.test(p.id))
65
+ refuse(`${path}.id`, `${String(p.id)} is not an id: a letter, then letters, digits, - and _`, { reason: 'data-id-invalid', list: 'properties', id: String(p.id) });
66
+ const invalid = (field, message) => refuse(`${path}.${field}`, message, { reason: 'data-property-invalid', property: p.id, field });
67
+ if (typeof p.label !== 'string' || !p.label.trim())
68
+ invalid('label', 'a name shown to a person');
69
+ if (kind === 'number') {
70
+ if (!figureUnitKnown(p.unit))
71
+ invalid('unit', `${String(p.unit)} is not a unit`);
72
+ if (!finite(p.min) || !finite(p.max) || !(p.min <= p.max))
73
+ invalid('min', 'a range from a finite number to one no smaller');
74
+ if (!finite(p.default) || p.default < p.min || p.default > p.max)
75
+ invalid('default', `the default lies in the range, ${p.min} to ${p.max}`);
76
+ }
77
+ else if (kind === 'boolean') {
78
+ if (typeof p.default !== 'boolean')
79
+ invalid('default', 'true or false');
80
+ }
81
+ else {
82
+ if (!Array.isArray(p.values) || !p.values.length || p.values.some((v) => typeof v !== 'string' || !v))
83
+ invalid('values', 'one or more nonempty strings');
84
+ if (new Set(p.values).size !== p.values.length)
85
+ invalid('values', 'each value once');
86
+ if (!p.values.includes(p.default))
87
+ invalid('default', 'the default is one of the values');
88
+ }
89
+ return p;
90
+ }
91
+ const targetsOf = (asset) => ({
92
+ states: new Map(asset.document.model.inputs.filter(i => i.role === 'state').map(i => [i.id, i])),
93
+ palette: asset.palette,
94
+ groups: new Map((asset.motionGroups ?? []).map(g => [g.id, g.clips]))
95
+ });
96
+ /** The one thing a connection writes, as a key no other connection may hold: two writers of one value is a refusal. */
97
+ const writeKey = (t) => (t.kind === 'state' ? `state ${t.input}` : t.kind === 'palette' ? `palette ${t.token}` : `${t.kind} ${t.group}`);
98
+ const targetId = (t) => (t.kind === 'state' ? t.input : t.kind === 'palette' ? t.token : t.group);
99
+ function checkTarget(t, path) {
100
+ if (!t || typeof t !== 'object' || Array.isArray(t))
101
+ fail('ASSET_SCHEMA', path, 'object required');
102
+ if (t.kind === 'state')
103
+ fields(t, ['kind', 'input', 'sourceMode'], [], path);
104
+ else if (t.kind === 'palette')
105
+ fields(t, ['kind', 'token'], [], path);
106
+ else if (t.kind === 'motion-clip' || t.kind === 'motion-speed')
107
+ fields(t, ['kind', 'group'], [], path);
108
+ else
109
+ fail('ASSET_SCHEMA', `${path}.kind`, `${String(t.kind)} is not a target; state, palette, motion-clip or motion-speed`);
110
+ if (t.kind === 'state' && t.sourceMode !== 'observed' && t.sourceMode !== 'commanded')
111
+ fail('ASSET_SCHEMA', `${path}.sourceMode`, 'observed or commanded');
112
+ for (const k of ['input', 'token', 'group'])
113
+ if (Object.hasOwn(t, k) && typeof t[k] !== 'string')
114
+ fail('ASSET_SCHEMA', `${path}.${k}`, 'an id');
115
+ return t;
116
+ }
117
+ function checkTransform(t, path) {
118
+ if (!t || typeof t !== 'object' || Array.isArray(t))
119
+ fail('ASSET_SCHEMA', path, 'object required');
120
+ if (t.kind === 'identity')
121
+ fields(t, ['kind'], [], path);
122
+ else if (t.kind === 'affine') {
123
+ fields(t, ['kind', 'scale', 'offset'], [], path);
124
+ if (!finite(t.scale) || !finite(t.offset))
125
+ fail('ASSET_SCHEMA', path, 'a finite scale and offset');
126
+ }
127
+ else if (t.kind === 'lookup') {
128
+ fields(t, ['kind', 'cases'], [], path);
129
+ if (!Array.isArray(t.cases))
130
+ fail('ASSET_SCHEMA', `${path}.cases`, 'a list of cases');
131
+ t.cases.forEach((c, i) => fields(c, ['when', 'value'], [], `${path}.cases[${i}]`));
132
+ }
133
+ else
134
+ fail('ASSET_SCHEMA', `${path}.kind`, `${String(t.kind)} is not a transform; identity, affine or lookup`);
135
+ }
136
+ /**
137
+ * Whether every value the property can take lands inside what the target takes (detail design §4.2). The check is over
138
+ * the whole domain: a number's range, every enum value, both booleans -- never a sample.
139
+ */
140
+ function checkConnection(c, property, targets, path) {
141
+ const { transform, target } = c;
142
+ const domain = (why, message, extra = {}) => refuse(path, message, { reason: 'data-transform-domain', connection: c.id, why, ...extra });
143
+ /* The target is there. */
144
+ if (target.kind === 'state' && !targets.states.has(target.input))
145
+ refuse(`${path}.target`, `${target.input} is not a state input of this figure`, { reason: 'data-target-absent', connection: c.id, target: 'state', id: target.input });
146
+ if (target.kind === 'palette' && !Object.hasOwn(targets.palette, target.token))
147
+ refuse(`${path}.target`, `${target.token} is not a colour of this figure`, { reason: 'data-target-absent', connection: c.id, target: 'palette', id: target.token });
148
+ if ((target.kind === 'motion-clip' || target.kind === 'motion-speed') && !targets.groups.has(target.group))
149
+ refuse(`${path}.target`, `${target.group} is not a motion group of this figure`, { reason: 'data-target-absent', connection: c.id, target: target.kind, id: target.group });
150
+ if (transform.kind === 'lookup') {
151
+ const values = domainOf(property);
152
+ if (!values)
153
+ return domain('kind', `a lookup reads an enum or a boolean; ${property.id} is a number`);
154
+ if (target.kind === 'motion-speed')
155
+ return domain('kind', 'a motion speed is a number, given as it is or scaled');
156
+ /* Each allowed value once, and nothing else: a value no case covers would have no result. */
157
+ const whens = transform.cases.map(k => k.when);
158
+ for (const w of whens)
159
+ if (!values.some(v => v === w))
160
+ domain('cases', `${String(w)} is not a value of ${property.id}`, { value: w });
161
+ for (const v of values) {
162
+ const n = whens.filter(w => w === v).length;
163
+ if (n !== 1)
164
+ domain('cases', `${String(v)} of ${property.id} is covered ${n} times; once`, { value: v });
165
+ }
166
+ for (const { value } of transform.cases) {
167
+ if (target.kind === 'state') {
168
+ const input = targets.states.get(target.input);
169
+ if (!finite(value))
170
+ domain('output', `a state input takes a number in ${input.unit}`, { value });
171
+ else if (value < input.min || value > input.max)
172
+ domain('output', `${value} is outside ${target.input}, ${input.min} to ${input.max}`, { value, within: [input.min, input.max] });
173
+ }
174
+ else if (target.kind === 'palette') {
175
+ if (typeof value !== 'string' || !COLOUR.test(value))
176
+ domain('output', 'a colour is #RRGGBB', { value });
177
+ }
178
+ else if (target.kind === 'motion-clip') {
179
+ const clips = targets.groups.get(target.group);
180
+ if (typeof value !== 'string' || !clips.includes(value))
181
+ domain('output', `${String(value)} is not a clip of ${target.group}`, { value });
182
+ }
183
+ }
184
+ return;
185
+ }
186
+ /* identity and affine read a number. */
187
+ if (property.kind !== 'number')
188
+ return domain('kind', `${transform.kind} reads a number; ${property.id} is ${property.kind === 'enum' ? 'an enum' : 'a boolean'}`);
189
+ if (target.kind === 'palette' || target.kind === 'motion-clip')
190
+ return domain('kind', `${target.kind === 'palette' ? 'a colour' : 'a clip'} is chosen by a lookup`);
191
+ const scale = transform.kind === 'affine' ? transform.scale : 1;
192
+ const offset = transform.kind === 'affine' ? transform.offset : 0;
193
+ const ends = [scale * property.min + offset, scale * property.max + offset].sort((a, b) => a - b);
194
+ if (target.kind === 'motion-speed') {
195
+ if (property.unit !== 'ratio')
196
+ domain('unit', `a motion speed is a ratio; ${property.id} is in ${property.unit}`, { from: property.unit, to: 'ratio' });
197
+ if (ends[0] < 0 || ends[1] > FIGURE_MOTION_SPEED_MAX)
198
+ domain('range', `${property.id} gives ${ends[0]} to ${ends[1]}; a motion speed is 0 to ${FIGURE_MOTION_SPEED_MAX}`, { min: ends[0], max: ends[1], within: [0, FIGURE_MOTION_SPEED_MAX] });
199
+ return;
200
+ }
201
+ const input = targets.states.get(target.input);
202
+ /* As it is, only in the same unit: no unit is guessed. Another unit is an affine the author writes. */
203
+ if (transform.kind === 'identity' && property.unit !== input.unit)
204
+ domain('unit', `${property.id} is in ${property.unit} and ${target.input} in ${input.unit}; say how one becomes the other`, { from: property.unit, to: input.unit });
205
+ if (ends[0] < input.min || ends[1] > input.max)
206
+ domain('range', `${property.id} gives ${ends[0]} to ${ends[1]} ${input.unit}; ${target.input} takes ${input.min} to ${input.max}`, {
207
+ min: ends[0],
208
+ max: ends[1],
209
+ within: [input.min, input.max]
210
+ });
211
+ }
212
+ /**
213
+ * Refuses a data interface the contract does not allow (`DATA_INTERFACE`, or `ASSET_SCHEMA` for its shape). Called by
214
+ * `compileFigureAsset`, after the drivers and motion groups, whose clips a connection may name.
215
+ */
216
+ export function validateFigureDataInterface(asset) {
217
+ const di = asset.dataInterface;
218
+ if (di === undefined)
219
+ return;
220
+ fields(di, ['version', 'properties', 'connections'], [], 'dataInterface');
221
+ if (di.version !== 'figure-data-interface-1')
222
+ fail('VERSION', 'dataInterface.version', String(di.version));
223
+ if (!Array.isArray(di.properties))
224
+ fail('ASSET_SCHEMA', 'dataInterface.properties', 'a list of properties');
225
+ if (!Array.isArray(di.connections))
226
+ fail('ASSET_SCHEMA', 'dataInterface.connections', 'a list of connections');
227
+ const properties = new Map();
228
+ di.properties.forEach((p, i) => {
229
+ const path = `dataInterface.properties[${i}]`;
230
+ const property = checkProperty(p, path);
231
+ if (properties.has(property.id))
232
+ refuse(`${path}.id`, `${property.id} is declared twice`, { reason: 'data-id-duplicate', list: 'properties', id: property.id });
233
+ properties.set(property.id, property);
234
+ });
235
+ const targets = targetsOf(asset);
236
+ const ids = new Set();
237
+ const writers = new Map();
238
+ di.connections.forEach((c, i) => {
239
+ const path = `dataInterface.connections[${i}]`;
240
+ fields(c, ['id', 'property', 'transform', 'target'], [], path);
241
+ if (typeof c.id !== 'string' || !FIGURE_PART_ID.test(c.id))
242
+ refuse(`${path}.id`, `${String(c.id)} is not an id: a letter, then letters, digits, - and _`, { reason: 'data-id-invalid', list: 'connections', id: String(c.id) });
243
+ if (ids.has(c.id))
244
+ refuse(`${path}.id`, `${c.id} is declared twice`, { reason: 'data-id-duplicate', list: 'connections', id: c.id });
245
+ ids.add(c.id);
246
+ checkTransform(c.transform, `${path}.transform`);
247
+ const target = checkTarget(c.target, `${path}.target`);
248
+ const property = typeof c.property === 'string' && properties.has(c.property) ? properties.get(c.property) : undefined;
249
+ if (!property)
250
+ refuse(`${path}.property`, `${String(c.property)} is not a property of this figure`, { reason: 'data-property-absent', connection: c.id, property: String(c.property) });
251
+ checkConnection(c, property, targets, path);
252
+ const key = writeKey(target);
253
+ const other = writers.get(key);
254
+ if (other !== undefined)
255
+ refuse(`${path}.target`, `${other} and ${c.id} both write ${key}; one writer each`, { reason: 'data-target-duplicate', connections: [other, c.id], target: target.kind, id: targetId(target) });
256
+ writers.set(key, c.id);
257
+ });
258
+ }
259
+ /**
260
+ * The data interface of an asset, checked against it, ready to read values; null when the figure declares none. A
261
+ * consumer makes this once per asset, not per frame.
262
+ */
263
+ export function compileFigureDataInterface(asset) {
264
+ if (asset.dataInterface === undefined)
265
+ return null;
266
+ validateFigureDataInterface(asset);
267
+ const di = structuredClone(asset.dataInterface);
268
+ const properties = new Map(di.properties.map(p => [p.id, Object.freeze(p)]));
269
+ const defaults = Object.create(null);
270
+ for (const p of di.properties)
271
+ defaults[p.id] = p.default;
272
+ return Object.freeze({ properties, connections: Object.freeze(di.connections.map(c => Object.freeze(c))), defaults: Object.freeze(defaults) });
273
+ }
274
+ /**
275
+ * What in a set of values cannot be taken: a key that is not a property, a value of the wrong type, outside its range,
276
+ * or not one of its enum's values. Own keys only; `false` and `0` are values, not absences. Empty when all may be taken.
277
+ * `true` is not `1` and `"1"` is not `1`: nothing is converted.
278
+ */
279
+ export function validateFigureDataValues(plan, values) {
280
+ if (!values || typeof values !== 'object' || Array.isArray(values))
281
+ return [{ reason: 'not-a-record' }];
282
+ const issues = [];
283
+ for (const key of Object.keys(values)) {
284
+ const value = values[key];
285
+ const property = plan.properties.get(key);
286
+ if (!property) {
287
+ issues.push({ reason: 'property-unknown', property: key });
288
+ continue;
289
+ }
290
+ const reason = valueRefusal(property, value);
291
+ if (reason)
292
+ issues.push({ reason, property: key, value });
293
+ }
294
+ return issues;
295
+ }
296
+ /**
297
+ * Each property's value, in the order the detail design sets (§4.3): a key in the live snapshot, else the saved setting,
298
+ * else the asset's default. A key absent from the snapshot is not held from an earlier one. Both are checked first; a
299
+ * set with an issue is refused whole (`DATA_VALUE`), so nothing of it is half taken.
300
+ */
301
+ export function resolveFigureDataValues(plan, given) {
302
+ for (const [which, set] of [['manual', given.manual], ['live', given.live]]) {
303
+ if (set === undefined || set === null)
304
+ continue;
305
+ const issues = validateFigureDataValues(plan, set);
306
+ if (issues.length)
307
+ fail('DATA_VALUE', which, `${issues.length} value(s) cannot be taken: ${issues.map(i => `${i.property ?? which} ${i.reason}`).join(', ')}`, { reason: 'data-values-refused', issues });
308
+ }
309
+ const values = Object.create(null);
310
+ const sources = Object.create(null);
311
+ for (const id of plan.properties.keys()) {
312
+ const live = given.live && Object.hasOwn(given.live, id) ? given.live[id] : undefined;
313
+ const manual = given.manual && Object.hasOwn(given.manual, id) ? given.manual[id] : undefined;
314
+ if (live !== undefined)
315
+ [values[id], sources[id]] = [live, 'live'];
316
+ else if (manual !== undefined)
317
+ [values[id], sources[id]] = [manual, 'manual'];
318
+ else
319
+ [values[id], sources[id]] = [plan.defaults[id], 'default'];
320
+ }
321
+ return { values, sources };
322
+ }
323
+ /**
324
+ * What the values move, through every connection. A property left out reads its default. The values are checked
325
+ * first, and a set with an issue is refused whole (`DATA_VALUE`). The result does not depend on the order of the
326
+ * connections: no two write the same thing, and none writes a property.
327
+ */
328
+ export function evaluateFigureDataInterface(plan, values = {}) {
329
+ const issues = validateFigureDataValues(plan, values);
330
+ if (issues.length)
331
+ fail('DATA_VALUE', 'values', `${issues.length} value(s) cannot be taken: ${issues.map(i => `${i.property ?? 'values'} ${i.reason}`).join(', ')}`, { reason: 'data-values-refused', issues });
332
+ const out = { states: Object.create(null), palette: Object.create(null), motion: Object.create(null) };
333
+ for (const c of plan.connections) {
334
+ const raw = (Object.hasOwn(values, c.property) ? values[c.property] : plan.defaults[c.property]);
335
+ const t = c.transform;
336
+ const value = t.kind === 'identity' ? raw : t.kind === 'affine' ? t.scale * raw + t.offset : t.cases.find(k => k.when === raw).value;
337
+ const target = c.target;
338
+ if (target.kind === 'state')
339
+ out.states[target.input] = { value: value, sourceMode: target.sourceMode };
340
+ else if (target.kind === 'palette')
341
+ out.palette[target.token] = value;
342
+ else if (target.kind === 'motion-clip')
343
+ out.motion[target.group] = { ...out.motion[target.group], clip: value };
344
+ else
345
+ out.motion[target.group] = { ...out.motion[target.group], speed: value };
346
+ }
347
+ return out;
348
+ }
349
+ /** The interface after a part was renamed: a state input the part owned (`<part>.…`) is followed to its new name. */
350
+ export function renameDataInterface(asset, from, to) {
351
+ if (!asset.dataInterface)
352
+ return;
353
+ const moved = (id) => (id === from ? to : id.startsWith(`${from}.`) ? to + id.slice(from.length) : id);
354
+ asset.dataInterface = {
355
+ ...asset.dataInterface,
356
+ connections: asset.dataInterface.connections.map(c => (c.target.kind === 'state' ? { ...c, target: { ...c.target, input: moved(c.target.input) } } : c))
357
+ };
358
+ }
359
+ /** The interface after a clip was renamed: every lookup that selects it in a motion group selects it by its new name. */
360
+ export function renameDataInterfaceClip(asset, group, from, to) {
361
+ if (!asset.dataInterface)
362
+ return;
363
+ asset.dataInterface = {
364
+ ...asset.dataInterface,
365
+ connections: asset.dataInterface.connections.map(c => c.target.kind === 'motion-clip' && c.target.group === group && c.transform.kind === 'lookup'
366
+ ? { ...c, transform: { ...c.transform, cases: c.transform.cases.map(k => (k.value === from ? { ...k, value: to } : k)) } }
367
+ : c)
368
+ };
369
+ }
370
+ //# sourceMappingURL=data-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-interface.js","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"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"}
package/dist/driver.d.ts CHANGED
@@ -11,6 +11,9 @@ export declare function driverValue(driver: FigureDriver, timeSeconds: number, u
11
11
  /**
12
12
  * Every driven state at one time, ready to pass as state overrides. The consumer chooses, per state, whether
13
13
  * the driver or an external input is the active control source; this returns the drivers' side only.
14
+ *
15
+ * Only for a figure with no motion groups: with groups, which clip plays is a selection, and `sampleFigureMotion` takes
16
+ * it (`MOTION_SELECTION_REQUIRED` otherwise) -- playing every clip and keeping the last would be list order deciding.
14
17
  */
15
18
  export declare function driverStates(asset: FigureAsset, timeSeconds: number): Record<string, number>;
16
19
  /** Refuses a `stateInputs` map the contract does not allow. Called by `compileFigureAsset`. */
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAWzF,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CA4C9D;AAiBD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAKzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,KAAK,GAAG,OAAiB,GAAG,MAAM,CAqBtH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5F;AAED,+FAA+F;AAC/F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAelE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,sBAAsB,CAEvF"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAWzF,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAsD9D;AAiBD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAKzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,KAAK,GAAG,OAAiB,GAAG,MAAM,CAqBtH;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU5F;AAED,+FAA+F;AAC/F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAelE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,sBAAsB,CAEvF"}
package/dist/driver.js CHANGED
@@ -13,8 +13,9 @@
13
13
  * keys first would make 350° → 370° turn the wrong way.
14
14
  */
15
15
  import { FigureContractError } from "./contract.js";
16
- const fail = (code, path, detail) => {
17
- throw new FigureContractError(code, path, detail);
16
+ import { figureClipGroupsOf } from "./motion-groups.js";
17
+ const fail = (code, path, detail, details) => {
18
+ throw new FigureContractError(code, path, detail, details);
18
19
  };
19
20
  /** The inputs a driver may write, with their units: the asset's state inputs. */
20
21
  function stateUnits(asset) {
@@ -29,7 +30,9 @@ export function validateFigureDrivers(asset) {
29
30
  fail('DRIVER', 'drivers', 'array required');
30
31
  const states = stateUnits(asset);
31
32
  const seenIds = new Set();
32
- const seenStates = new Set();
33
+ /* Who writes each state: one clip, or clips of one motion group of which only the selected one plays (ADR-0051 §3.2). */
34
+ const writers = new Map();
35
+ const groupOf = figureClipGroupsOf(asset);
33
36
  const clipDurations = new Map();
34
37
  for (const d of drivers) {
35
38
  const path = `drivers.${String(d?.id ?? '?')}`;
@@ -45,9 +48,17 @@ export function validateFigureDrivers(asset) {
45
48
  fail('DRIVER', path, 'clip required; the playback group is declared, not read out of the id');
46
49
  if (!states.has(d.state))
47
50
  fail('DRIVER_STATE', path, `${String(d.state)} is not a state input of this asset`);
48
- if (seenStates.has(d.state))
49
- fail('DRIVER_STATE', path, `two drivers write ${d.state}; one writer per state`);
50
- seenStates.add(d.state);
51
+ const clips = writers.get(d.state) ?? [];
52
+ if (clips.includes(d.clip))
53
+ fail('DRIVER_STATE', path, `clip ${d.clip} writes ${d.state} twice; one track per state in a clip`, { reason: 'driver-writers', state: d.state, clips: [d.clip] });
54
+ const group = groupOf.get(d.clip);
55
+ if (clips.length && (group === undefined || clips.some(c => groupOf.get(c) !== group)))
56
+ fail('DRIVER_STATE', path, `${[...clips, d.clip].join(', ')} all write ${d.state}; one writer per state, unless the clips are one motion group`, {
57
+ reason: 'driver-writers',
58
+ state: d.state,
59
+ clips: [...clips, d.clip]
60
+ });
61
+ writers.set(d.state, [...clips, d.clip]);
51
62
  if (JSON.stringify(keysOf(d.time)) !== JSON.stringify(['duration', 'unit']) || d.time.unit !== 's')
52
63
  fail('DRIVER_TIME', path, 'time must be { unit: "s", duration }');
53
64
  if (!(Number.isFinite(d.time.duration) && d.time.duration > 0))
@@ -140,8 +151,13 @@ export function driverValue(driver, timeSeconds, unit = 'other') {
140
151
  /**
141
152
  * Every driven state at one time, ready to pass as state overrides. The consumer chooses, per state, whether
142
153
  * the driver or an external input is the active control source; this returns the drivers' side only.
154
+ *
155
+ * Only for a figure with no motion groups: with groups, which clip plays is a selection, and `sampleFigureMotion` takes
156
+ * it (`MOTION_SELECTION_REQUIRED` otherwise) -- playing every clip and keeping the last would be list order deciding.
143
157
  */
144
158
  export function driverStates(asset, timeSeconds) {
159
+ if (asset.motionGroups?.length)
160
+ fail('MOTION_SELECTION_REQUIRED', 'motionGroups', 'this figure plays one clip of each motion group at a time; say which with sampleFigureMotion');
145
161
  const units = stateUnits(asset);
146
162
  const out = {};
147
163
  for (const d of asset.drivers ?? []) {
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}