@flighthq/shape-formats 0.5.0-next.1944.cd6b6e7 → 0.5.1-edge.638.d4dbd4e
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 +2 -2
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/shapeCommandSchemas.d.ts +3 -0
- package/dist/shapeCommandSchemas.d.ts.map +1 -0
- package/dist/shapeCommandSchemas.js +104 -0
- package/dist/shapeCommandSchemas.js.map +1 -0
- package/dist/shapeJson.d.ts.map +1 -1
- package/dist/shapeJson.js +8 -37
- package/dist/shapeJson.js.map +1 -1
- package/package.json +5 -4
- package/src/shapeCommandSchemas.test.ts +35 -0
- package/src/shapeJson.test.ts +6 -8
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/shape-formats`. The
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/shape-formats@0.5.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/shape-formats@0.5.1-edge.638.d4dbd4e](https://github.com/flighthq/flight/tree/d4dbd4e347dc8be10b180c85a766ab50333dcb51/packages/shape-formats)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/d4dbd4e347dc8be10b180c85a766ab50333dcb51/LICENSE.md)
|
package/dist/contract.d.ts
CHANGED
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC"}
|
package/dist/contract.js
CHANGED
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { formatShapeJson, parseShapeJson } from './contract';
|
|
1
|
+
export { defaultShapeCommandSchemas, formatShapeJson, parseShapeJson } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { formatShapeJson, parseShapeJson } from './contract';
|
|
1
|
+
export { defaultShapeCommandSchemas, formatShapeJson, parseShapeJson } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapeCommandSchemas.d.ts","sourceRoot":"","sources":["../src/shapeCommandSchemas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AA0GlC,eAAO,MAAM,0BAA0B,EAAE,UAAU,CAAC,kBAAkB,CAAsC,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { createKeyedTable, withRegistryTableEntry } from '@flighthq/registry/contract';
|
|
2
|
+
function createDefaultShapeCommandSchemas() {
|
|
3
|
+
let table = createKeyedTable('ShapeCommandSchema', 'Unregistered');
|
|
4
|
+
for (const key of Object.keys(SHAPE_COMMAND_SCHEMA_ARGUMENTS)) {
|
|
5
|
+
const schema = SHAPE_COMMAND_SCHEMA_ARGUMENTS[key];
|
|
6
|
+
table = withRegistryTableEntry(table, key, {
|
|
7
|
+
arguments: schema.arguments,
|
|
8
|
+
key,
|
|
9
|
+
requiredArgumentCount: schema.requiredArgumentCount,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
return table;
|
|
13
|
+
}
|
|
14
|
+
const gradientArguments = [
|
|
15
|
+
argument('gradientType', 'string'),
|
|
16
|
+
argument('colors', 'numbers'),
|
|
17
|
+
argument('alphas', 'numbers'),
|
|
18
|
+
argument('ratios', 'numbers'),
|
|
19
|
+
argument('matrix', 'matrixOrNull'),
|
|
20
|
+
argument('spreadMethod', 'string'),
|
|
21
|
+
argument('interpolationMethod', 'string'),
|
|
22
|
+
argument('focalPointRatio', 'number'),
|
|
23
|
+
];
|
|
24
|
+
const textureArguments = [
|
|
25
|
+
argument('texture', 'texture'),
|
|
26
|
+
argument('matrix', 'matrixOrNull'),
|
|
27
|
+
];
|
|
28
|
+
const SHAPE_COMMAND_SCHEMA_ARGUMENTS = {
|
|
29
|
+
beginTextureFill: definition(1, textureArguments),
|
|
30
|
+
beginFill: definition(0, [argument('color', 'number'), argument('alpha', 'number')]),
|
|
31
|
+
beginGradientFill: definition(4, gradientArguments),
|
|
32
|
+
cubicCurveTo: definition(6, [
|
|
33
|
+
argument('controlX1', 'number'),
|
|
34
|
+
argument('controlY1', 'number'),
|
|
35
|
+
argument('controlX2', 'number'),
|
|
36
|
+
argument('controlY2', 'number'),
|
|
37
|
+
argument('anchorX', 'number'),
|
|
38
|
+
argument('anchorY', 'number'),
|
|
39
|
+
]),
|
|
40
|
+
curveTo: definition(4, [
|
|
41
|
+
argument('controlX', 'number'),
|
|
42
|
+
argument('controlY', 'number'),
|
|
43
|
+
argument('anchorX', 'number'),
|
|
44
|
+
argument('anchorY', 'number'),
|
|
45
|
+
]),
|
|
46
|
+
drawCircle: definition(3, [argument('x', 'number'), argument('y', 'number'), argument('radius', 'number')]),
|
|
47
|
+
drawEllipse: definition(4, [
|
|
48
|
+
argument('x', 'number'),
|
|
49
|
+
argument('y', 'number'),
|
|
50
|
+
argument('width', 'number'),
|
|
51
|
+
argument('height', 'number'),
|
|
52
|
+
]),
|
|
53
|
+
drawPath: definition(2, [
|
|
54
|
+
argument('commands', 'numbers'),
|
|
55
|
+
argument('data', 'numbers'),
|
|
56
|
+
argument('winding', 'string'),
|
|
57
|
+
]),
|
|
58
|
+
drawRectangle: definition(4, [
|
|
59
|
+
argument('x', 'number'),
|
|
60
|
+
argument('y', 'number'),
|
|
61
|
+
argument('width', 'number'),
|
|
62
|
+
argument('height', 'number'),
|
|
63
|
+
]),
|
|
64
|
+
drawRoundRectangle: definition(6, [
|
|
65
|
+
argument('x', 'number'),
|
|
66
|
+
argument('y', 'number'),
|
|
67
|
+
argument('width', 'number'),
|
|
68
|
+
argument('height', 'number'),
|
|
69
|
+
argument('ellipseWidth', 'number'),
|
|
70
|
+
argument('ellipseHeight', 'number'),
|
|
71
|
+
]),
|
|
72
|
+
drawTriangles: definition(1, [
|
|
73
|
+
argument('vertices', 'numbers'),
|
|
74
|
+
argument('indices', 'numbersOrNull'),
|
|
75
|
+
argument('uvtData', 'numbersOrNull'),
|
|
76
|
+
argument('culling', 'string'),
|
|
77
|
+
]),
|
|
78
|
+
endFill: definition(0, []),
|
|
79
|
+
lineTextureStyle: definition(1, textureArguments),
|
|
80
|
+
lineGradientStyle: definition(4, gradientArguments),
|
|
81
|
+
lineStyle: definition(0, [
|
|
82
|
+
argument('thickness', 'number'),
|
|
83
|
+
argument('color', 'number'),
|
|
84
|
+
argument('alpha', 'number'),
|
|
85
|
+
argument('pixelHinting', 'boolean'),
|
|
86
|
+
argument('scaleMode', 'string'),
|
|
87
|
+
argument('caps', 'string'),
|
|
88
|
+
argument('joints', 'string'),
|
|
89
|
+
argument('miterLimit', 'number'),
|
|
90
|
+
]),
|
|
91
|
+
lineTo: definition(2, [argument('x', 'number'), argument('y', 'number')]),
|
|
92
|
+
moveTo: definition(2, [argument('x', 'number'), argument('y', 'number')]),
|
|
93
|
+
};
|
|
94
|
+
// The one runtime schema table for the built-in retained-shape vocabulary. Native shape JSON uses
|
|
95
|
+
// its positional types and arity; scene-document text uses the same entries' argument names. Custom
|
|
96
|
+
// commands belong in a caller-owned table assembled with the same KeyedTable vocabulary.
|
|
97
|
+
export const defaultShapeCommandSchemas = createDefaultShapeCommandSchemas();
|
|
98
|
+
function argument(name, type) {
|
|
99
|
+
return { name, type };
|
|
100
|
+
}
|
|
101
|
+
function definition(requiredArgumentCount, arguments_) {
|
|
102
|
+
return { arguments: arguments_, requiredArgumentCount };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=shapeCommandSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapeCommandSchemas.js","sourceRoot":"","sources":["../src/shapeCommandSchemas.ts"],"names":[],"mappings":"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"}
|
package/dist/shapeJson.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapeJson.d.ts","sourceRoot":"","sources":["../src/shapeJson.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shapeJson.d.ts","sourceRoot":"","sources":["../src/shapeJson.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,KAAK,EAEL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAmC1G;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,KAAK,GAAG,IAAI,CAsCpG"}
|
package/dist/shapeJson.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createMatrix } from '@flighthq/geometry/contract';
|
|
2
|
+
import { getRegistryTableEntry } from '@flighthq/registry/contract';
|
|
2
3
|
import { appendShapeBeginTextureFill, appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeCircle, appendShapeCubicCurveTo, appendShapeCurveTo, appendShapeDrawTriangles, appendShapeEllipse, appendShapeEndFill, appendShapeLineTextureStyle, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTo, appendShapeMoveTo, appendShapePath, appendShapeRectangle, appendShapeRoundRectangle, createShape, } from '@flighthq/shape/contract';
|
|
4
|
+
import { defaultShapeCommandSchemas } from './shapeCommandSchemas';
|
|
3
5
|
// Serializes a shape's full drawing-command stream to a native JSON string that `parseShapeJson`
|
|
4
6
|
// restores. Every stored command is checked against the same positional and finiteness predicates the
|
|
5
7
|
// reader uses before anything is emitted: a writer that can produce a document its own reader rejects
|
|
@@ -127,16 +129,15 @@ function reconstructShapeCommandArg(value, resolveTexture) {
|
|
|
127
129
|
// Runs after reconstruction, so matrices are already Matrix values and textures already resolved, and
|
|
128
130
|
// after the drop check, so an unresolved texture is still a dropped command rather than a parse failure.
|
|
129
131
|
function isValidShapeCommandArgs(key, args) {
|
|
130
|
-
const
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
if (spec === undefined)
|
|
132
|
+
const schema = getRegistryTableEntry(defaultShapeCommandSchemas, key);
|
|
133
|
+
// A missing runtime schema invalidates the command. The full-vocabulary round-trip test therefore
|
|
134
|
+
// fails if the appender table and the shared schema table ever drift apart.
|
|
135
|
+
if (schema === null)
|
|
135
136
|
return false;
|
|
136
|
-
if (args.length <
|
|
137
|
+
if (args.length < schema.requiredArgumentCount || args.length > schema.arguments.length)
|
|
137
138
|
return false;
|
|
138
139
|
for (let i = 0; i < args.length; i++) {
|
|
139
|
-
if (!isValidShapeCommandArg(args[i],
|
|
140
|
+
if (!isValidShapeCommandArg(args[i], schema.arguments[i].type))
|
|
140
141
|
return false;
|
|
141
142
|
}
|
|
142
143
|
return true;
|
|
@@ -203,36 +204,6 @@ const MALFORMED_ARG = Symbol('shapeFormats.malformedArg');
|
|
|
203
204
|
// Sentinel returned when a texture reference cannot be resolved; the owning command is dropped.
|
|
204
205
|
const DROP_COMMAND = Symbol('shapeFormats.dropCommand');
|
|
205
206
|
const SHAPE_JSON_FORMAT = 3;
|
|
206
|
-
const GRADIENT_ARG_SPEC = {
|
|
207
|
-
required: 4,
|
|
208
|
-
types: ['string', 'numbers', 'numbers', 'numbers', 'matrixOrNull', 'string', 'string', 'number'],
|
|
209
|
-
};
|
|
210
|
-
const TEXTURE_ARG_SPEC = { required: 1, types: ['texture', 'matrixOrNull'] };
|
|
211
|
-
const SHAPE_COMMAND_ARG_SPECS = {
|
|
212
|
-
beginTextureFill: TEXTURE_ARG_SPEC,
|
|
213
|
-
beginFill: { required: 0, types: ['number', 'number'] },
|
|
214
|
-
beginGradientFill: GRADIENT_ARG_SPEC,
|
|
215
|
-
cubicCurveTo: { required: 6, types: ['number', 'number', 'number', 'number', 'number', 'number'] },
|
|
216
|
-
curveTo: { required: 4, types: ['number', 'number', 'number', 'number'] },
|
|
217
|
-
drawCircle: { required: 3, types: ['number', 'number', 'number'] },
|
|
218
|
-
drawEllipse: { required: 4, types: ['number', 'number', 'number', 'number'] },
|
|
219
|
-
drawPath: { required: 2, types: ['numbers', 'numbers', 'string'] },
|
|
220
|
-
drawRectangle: { required: 4, types: ['number', 'number', 'number', 'number'] },
|
|
221
|
-
drawRoundRectangle: {
|
|
222
|
-
required: 6,
|
|
223
|
-
types: ['number', 'number', 'number', 'number', 'number', 'number'],
|
|
224
|
-
},
|
|
225
|
-
drawTriangles: { required: 1, types: ['numbers', 'numbersOrNull', 'numbersOrNull', 'string'] },
|
|
226
|
-
endFill: { required: 0, types: [] },
|
|
227
|
-
lineTextureStyle: TEXTURE_ARG_SPEC,
|
|
228
|
-
lineGradientStyle: GRADIENT_ARG_SPEC,
|
|
229
|
-
lineStyle: {
|
|
230
|
-
required: 0,
|
|
231
|
-
types: ['number', 'number', 'number', 'boolean', 'string', 'string', 'string', 'number'],
|
|
232
|
-
},
|
|
233
|
-
lineTo: { required: 2, types: ['number', 'number'] },
|
|
234
|
-
moveTo: { required: 2, types: ['number', 'number'] },
|
|
235
|
-
};
|
|
236
207
|
const SHAPE_COMMAND_APPENDERS = {
|
|
237
208
|
beginTextureFill: appendShapeBeginTextureFill,
|
|
238
209
|
beginFill: appendShapeBeginFill,
|
package/dist/shapeJson.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapeJson.js","sourceRoot":"","sources":["../src/shapeJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,WAAW,GACZ,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"shapeJson.js","sourceRoot":"","sources":["../src/shapeJson.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/shape-formats",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1-edge.638.d4dbd4e",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,9 +38,10 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/geometry": "0.5.
|
|
42
|
-
"@flighthq/
|
|
43
|
-
"@flighthq/
|
|
41
|
+
"@flighthq/geometry": "0.5.1-edge.638.d4dbd4e",
|
|
42
|
+
"@flighthq/registry": "0.5.1-edge.638.d4dbd4e",
|
|
43
|
+
"@flighthq/shape": "0.5.1-edge.638.d4dbd4e",
|
|
44
|
+
"@flighthq/types": "0.5.1-edge.638.d4dbd4e"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
47
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { getRegistryTableEntry } from '@flighthq/registry/contract';
|
|
2
|
+
|
|
3
|
+
import { defaultShapeCommandSchemas } from './shapeCommandSchemas';
|
|
4
|
+
|
|
5
|
+
describe('defaultShapeCommandSchemas', () => {
|
|
6
|
+
it('pins the authored quadratic curve argument names to the ShapeCommandRegistry labels', () => {
|
|
7
|
+
const schema = getRegistryTableEntry(defaultShapeCommandSchemas, 'curveTo');
|
|
8
|
+
expect(schema?.arguments.map(({ name }) => name)).toEqual(['controlX', 'controlY', 'anchorX', 'anchorY']);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('pins the authored cubic curve argument names to the ShapeCommandRegistry labels', () => {
|
|
12
|
+
const schema = getRegistryTableEntry(defaultShapeCommandSchemas, 'cubicCurveTo');
|
|
13
|
+
expect(schema?.arguments.map(({ name }) => name)).toEqual([
|
|
14
|
+
'controlX1',
|
|
15
|
+
'controlY1',
|
|
16
|
+
'controlX2',
|
|
17
|
+
'controlY2',
|
|
18
|
+
'anchorX',
|
|
19
|
+
'anchorY',
|
|
20
|
+
]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('carries positional validation types and required arity in the same runtime entry', () => {
|
|
24
|
+
expect(getRegistryTableEntry(defaultShapeCommandSchemas, 'drawTriangles')).toEqual({
|
|
25
|
+
arguments: [
|
|
26
|
+
{ name: 'vertices', type: 'numbers' },
|
|
27
|
+
{ name: 'indices', type: 'numbersOrNull' },
|
|
28
|
+
{ name: 'uvtData', type: 'numbersOrNull' },
|
|
29
|
+
{ name: 'culling', type: 'string' },
|
|
30
|
+
],
|
|
31
|
+
key: 'drawTriangles',
|
|
32
|
+
requiredArgumentCount: 1,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
package/src/shapeJson.test.ts
CHANGED
|
@@ -252,12 +252,12 @@ describe('parseShapeJson argument validation', () => {
|
|
|
252
252
|
});
|
|
253
253
|
|
|
254
254
|
it('rejects an out-of-range literal that parses as Infinity', () => {
|
|
255
|
-
expect(parseShapeJson('{"shapeFormat":
|
|
255
|
+
expect(parseShapeJson('{"shapeFormat":3,"commands":[{"key":"moveTo","args":[1e999,2]}]}')).toBeNull();
|
|
256
256
|
});
|
|
257
257
|
|
|
258
258
|
it('rejects a non-finite entry inside a numeric array', () => {
|
|
259
259
|
expect(
|
|
260
|
-
parseShapeJson('{"shapeFormat":
|
|
260
|
+
parseShapeJson('{"shapeFormat":3,"commands":[{"key":"drawPath","args":[[1],[1e999,0],"evenOdd"]}]}'),
|
|
261
261
|
).toBeNull();
|
|
262
262
|
});
|
|
263
263
|
|
|
@@ -294,7 +294,7 @@ describe('parseShapeJson argument validation', () => {
|
|
|
294
294
|
.map(([key, value]) => `"${key}":${value}`)
|
|
295
295
|
.join(',')}}`;
|
|
296
296
|
const text =
|
|
297
|
-
`{"shapeFormat":
|
|
297
|
+
`{"shapeFormat":3,"commands":[{"key":"beginGradientFill","args":` +
|
|
298
298
|
`["linear",[1],[1],[0],${matrix},"pad","rgb",0]}]}`;
|
|
299
299
|
|
|
300
300
|
expect(parseShapeJson(text)).toBeNull();
|
|
@@ -322,11 +322,9 @@ describe('parseShapeJson argument validation', () => {
|
|
|
322
322
|
expect(getShapeCommandCount(restored!)).toBe(1);
|
|
323
323
|
});
|
|
324
324
|
|
|
325
|
-
//
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
// vocabulary therefore *is* the consistency check: a forgotten spec turns this null.
|
|
329
|
-
it('parses every command the serializer can emit, proving each has an argument spec', () => {
|
|
325
|
+
// Runtime validation reads the shared schema on every command, so a key in the appender table with
|
|
326
|
+
// no schema becomes unparseable. Exercising the whole non-texture vocabulary catches that drift.
|
|
327
|
+
it('parses every command the serializer can emit, proving each has a runtime schema', () => {
|
|
330
328
|
const shape = createEveryNonBitmapCommandShape();
|
|
331
329
|
const expected = getShapeCommandCount(shape);
|
|
332
330
|
const restored = parseShapeJson(formatShapeJson(shape));
|