@aelionsdk/project-schema 0.1.0-beta.1 → 1.1.0-rc.1
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 +26 -4
- package/dist/image-sequence.d.ts +13 -0
- package/dist/image-sequence.d.ts.map +1 -0
- package/dist/image-sequence.js +23 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +36 -3
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@aelionsdk/project-schema`
|
|
2
2
|
|
|
3
|
-
Project v1 types, validation and canonical serialization for
|
|
3
|
+
Project v1 types, bounded admission, validation and canonical serialization for
|
|
4
|
+
AelionSDK.
|
|
4
5
|
|
|
5
|
-
Install
|
|
6
|
+
## Install
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
```bash
|
|
9
|
+
npm install @aelionsdk/project-schema@next
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`next` currently resolves to `1.1.0-rc.1`. Use this package in importers,
|
|
13
|
+
services and Project tooling that must validate data without creating a browser
|
|
14
|
+
Session.
|
|
15
|
+
|
|
16
|
+
## Public surface
|
|
17
|
+
|
|
18
|
+
- Project v1 TypeScript types;
|
|
19
|
+
- bounded plain-JSON admission;
|
|
20
|
+
- `ProjectValidator` and stable diagnostics;
|
|
21
|
+
- canonical clone and serialization helpers.
|
|
22
|
+
|
|
23
|
+
Treat every file or network Project as untrusted input. Run admission before
|
|
24
|
+
schema and semantic validation; never invoke accessors or iterators on
|
|
25
|
+
untrusted values.
|
|
26
|
+
|
|
27
|
+
See the [Project Schema reference](https://foyonaczy.github.io/AelionSDK/reference/project-schema/)
|
|
28
|
+
and [API reference](https://foyonaczy.github.io/AelionSDK/api/aelionsdk/project-schema/overview/).
|
|
29
|
+
Licensed under MIT.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ImageSequenceReference } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Map an item time to the image-sequence frame whose interval contains it.
|
|
4
|
+
*
|
|
5
|
+
* Frames are uniform-duration and contiguous starting at zero. The mapping is
|
|
6
|
+
* deterministic and integer-based so preview and export agree on every frame
|
|
7
|
+
* boundary. Returns `undefined` when `itemTimeUs` is negative or at/after the
|
|
8
|
+
* last frame boundary, which callers must treat as fail-closed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function imageSequenceFrameIndex(sequence: ImageSequenceReference, itemTimeUs: number): number | undefined;
|
|
11
|
+
/** Total duration of the sequence in microseconds. */
|
|
12
|
+
export declare function imageSequenceDurationUs(sequence: ImageSequenceReference): number;
|
|
13
|
+
//# sourceMappingURL=image-sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-sequence.d.ts","sourceRoot":"","sources":["../src/image-sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,EAChC,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAOpB;AAED,sDAAsD;AACtD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAEhF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map an item time to the image-sequence frame whose interval contains it.
|
|
3
|
+
*
|
|
4
|
+
* Frames are uniform-duration and contiguous starting at zero. The mapping is
|
|
5
|
+
* deterministic and integer-based so preview and export agree on every frame
|
|
6
|
+
* boundary. Returns `undefined` when `itemTimeUs` is negative or at/after the
|
|
7
|
+
* last frame boundary, which callers must treat as fail-closed.
|
|
8
|
+
*/
|
|
9
|
+
export function imageSequenceFrameIndex(sequence, itemTimeUs) {
|
|
10
|
+
if (!Number.isSafeInteger(itemTimeUs) || itemTimeUs < 0)
|
|
11
|
+
return undefined;
|
|
12
|
+
const frameDurationUs = sequence.frameDurationUs;
|
|
13
|
+
if (!Number.isSafeInteger(frameDurationUs) || frameDurationUs <= 0)
|
|
14
|
+
return undefined;
|
|
15
|
+
const index = Math.floor(itemTimeUs / frameDurationUs);
|
|
16
|
+
if (index < 0 || index >= sequence.frameAssetIds.length)
|
|
17
|
+
return undefined;
|
|
18
|
+
return index;
|
|
19
|
+
}
|
|
20
|
+
/** Total duration of the sequence in microseconds. */
|
|
21
|
+
export function imageSequenceDurationUs(sequence) {
|
|
22
|
+
return sequence.frameDurationUs * sequence.frameAssetIds.length;
|
|
23
|
+
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -14,10 +14,49 @@ export interface ProjectSettings extends JsonObject {
|
|
|
14
14
|
locale?: string;
|
|
15
15
|
timezone?: string;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Frame manifest of an `image-sequence` asset. Frames are uniform-duration
|
|
19
|
+
* stills; each `frameAssetIds` entry references an `image` Asset in the same
|
|
20
|
+
* Project. Sampling a sequence at an item time maps to the frame whose
|
|
21
|
+
* interval contains that time (see {@link imageSequenceFrameIndex}).
|
|
22
|
+
*/
|
|
23
|
+
export interface ImageSequenceReference extends JsonObject {
|
|
24
|
+
/** Duration of every frame in microseconds. */
|
|
25
|
+
readonly frameDurationUs: number;
|
|
26
|
+
/** Ordered image Asset ids, one per frame, referencing `image` kind Assets. */
|
|
27
|
+
readonly frameAssetIds: EntityId[];
|
|
28
|
+
}
|
|
17
29
|
export interface ProjectEntity extends JsonObject {
|
|
18
30
|
id: EntityId;
|
|
19
31
|
}
|
|
32
|
+
export interface SequenceColorFormat extends JsonObject {
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
pixelAspectRatio: Rational & JsonObject;
|
|
36
|
+
frameRate: Rational & JsonObject;
|
|
37
|
+
sampleRate: 44_100 | 48_000 | 96_000;
|
|
38
|
+
channelLayout: 'mono' | 'stereo' | '5.1';
|
|
39
|
+
workingColorSpace: 'srgb-linear' | 'display-p3-linear' | 'rec2020-linear';
|
|
40
|
+
/** Defaults to `bt709` for legacy Project v1 documents. */
|
|
41
|
+
colorPrimaries?: 'bt709' | 'display-p3' | 'bt2020';
|
|
42
|
+
/** Defaults to `srgb` for legacy Project v1 documents. */
|
|
43
|
+
transferFunction?: 'srgb' | 'gamma22' | 'pq' | 'hlg';
|
|
44
|
+
/** Defaults to `rgb` for the linear compositing surface. */
|
|
45
|
+
matrixCoefficients?: 'rgb' | 'bt709' | 'bt2020-ncl';
|
|
46
|
+
/** Defaults to `full` for the linear compositing surface. */
|
|
47
|
+
colorRange?: 'full' | 'limited';
|
|
48
|
+
/** Defaults to `4:4:4`; an encoder may require an explicit conversion to `4:2:0`. */
|
|
49
|
+
chromaSubsampling?: 'rgb' | '4:4:4' | '4:2:2' | '4:2:0';
|
|
50
|
+
/** Defaults to `premultiplied` inside the renderer. */
|
|
51
|
+
alphaMode?: 'opaque' | 'premultiplied';
|
|
52
|
+
/** Defaults to `none`; HDR must fail closed when it cannot be presented without conversion. */
|
|
53
|
+
toneMapping?: 'none' | 'bt2390' | 'reinhard';
|
|
54
|
+
/** Defaults to 8 for legacy Project v1 documents. */
|
|
55
|
+
bitDepth?: 8 | 10;
|
|
56
|
+
backgroundColor: JsonObject;
|
|
57
|
+
}
|
|
20
58
|
export interface SequenceEntity extends ProjectEntity {
|
|
59
|
+
format: SequenceColorFormat & JsonObject;
|
|
21
60
|
trackIds: EntityId[];
|
|
22
61
|
transitionIds: EntityId[];
|
|
23
62
|
materialInstanceIds: EntityId[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,UAAU,EAAa,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAoB,KAAK,aAAa,EAAuB,MAAM,YAAY,CAAC;AAmCvF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,UAAU,EAAa,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAoB,KAAK,aAAa,EAAuB,MAAM,YAAY,CAAC;AAmCvF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAkwBD,qBAAa,gBAAgB;;gBAGR,OAAO,EAAE,uBAAuB;IAY5C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;CAgDlE"}
|
package/dist/validate.js
CHANGED
|
@@ -352,11 +352,43 @@ function validateAudioSemantics(project, diagnostics) {
|
|
|
352
352
|
function validateColorSemantics(project, diagnostics) {
|
|
353
353
|
for (const sequence of Object.values(project.sequences)) {
|
|
354
354
|
const format = sequence.format;
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
355
|
+
const expectedPrimaries = format.workingColorSpace === 'display-p3-linear'
|
|
356
|
+
? 'display-p3'
|
|
357
|
+
: format.workingColorSpace === 'rec2020-linear'
|
|
358
|
+
? 'bt2020'
|
|
359
|
+
: 'bt709';
|
|
360
|
+
if (format.colorPrimaries !== undefined && format.colorPrimaries !== expectedPrimaries) {
|
|
361
|
+
diagnostics.push(semanticDiagnostic('PROJECT_COLOR_PRIMARIES_MISMATCH', `Sequence ${sequence.id} color primaries do not match its linear working space`, ['sequences', sequence.id, 'format', 'colorPrimaries'], sequence.id));
|
|
362
|
+
}
|
|
363
|
+
const hdr = format.transferFunction === 'pq' || format.transferFunction === 'hlg';
|
|
364
|
+
if (hdr && (format.workingColorSpace !== 'rec2020-linear' || format.bitDepth !== 10)) {
|
|
358
365
|
diagnostics.push(semanticDiagnostic('PROJECT_HDR_FORMAT_INVALID', `HDR Sequence ${sequence.id} requires rec2020-linear working space and 10-bit output`, ['sequences', sequence.id, 'format'], sequence.id));
|
|
359
366
|
}
|
|
367
|
+
if (format.toneMapping !== undefined && format.toneMapping !== 'none' && !hdr) {
|
|
368
|
+
diagnostics.push(semanticDiagnostic('PROJECT_TONE_MAPPING_INPUT_INVALID', `Sequence ${sequence.id} tone mapping requires PQ or HLG input`, ['sequences', sequence.id, 'format', 'toneMapping'], sequence.id));
|
|
369
|
+
}
|
|
370
|
+
if (format.chromaSubsampling === 'rgb' && format.matrixCoefficients !== 'rgb') {
|
|
371
|
+
diagnostics.push(semanticDiagnostic('PROJECT_RGB_MATRIX_INVALID', `Sequence ${sequence.id} RGB chroma requires RGB matrix coefficients`, ['sequences', sequence.id, 'format', 'matrixCoefficients'], sequence.id));
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function validateImageSequenceReferences(project, diagnostics) {
|
|
376
|
+
for (const asset of Object.values(project.assets)) {
|
|
377
|
+
if (asset.kind !== 'image-sequence')
|
|
378
|
+
continue;
|
|
379
|
+
const sequence = asset.imageSequence;
|
|
380
|
+
const frameAssetIds = sequence?.frameAssetIds;
|
|
381
|
+
if (frameAssetIds === undefined)
|
|
382
|
+
continue;
|
|
383
|
+
frameAssetIds.forEach((frameAssetId, index) => {
|
|
384
|
+
const frameAsset = project.assets[frameAssetId];
|
|
385
|
+
if (frameAsset === undefined) {
|
|
386
|
+
diagnostics.push(semanticDiagnostic('PROJECT_IMAGE_SEQUENCE_FRAME_MISSING', `Image sequence ${asset.id} references missing frame Asset ${frameAssetId}`, ['assets', asset.id, 'imageSequence', 'frameAssetIds', index], asset.id));
|
|
387
|
+
}
|
|
388
|
+
else if (frameAsset.kind !== 'image') {
|
|
389
|
+
diagnostics.push(semanticDiagnostic('PROJECT_IMAGE_SEQUENCE_FRAME_KIND_INVALID', `Frame Asset ${frameAssetId} of image sequence ${asset.id} must be an image Asset`, ['assets', asset.id, 'imageSequence', 'frameAssetIds', index], asset.id));
|
|
390
|
+
}
|
|
391
|
+
});
|
|
360
392
|
}
|
|
361
393
|
}
|
|
362
394
|
export class ProjectValidator {
|
|
@@ -410,6 +442,7 @@ export class ProjectValidator {
|
|
|
410
442
|
validateTimeMappingSemantics(project, diagnostics);
|
|
411
443
|
validateAudioSemantics(project, diagnostics);
|
|
412
444
|
validateColorSemantics(project, diagnostics);
|
|
445
|
+
validateImageSequenceReferences(project, diagnostics);
|
|
413
446
|
return diagnostics.diagnostics.length === 0 ? ok({ project }) : err(...diagnostics.diagnostics);
|
|
414
447
|
}
|
|
415
448
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aelionsdk/project-schema",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0-rc.1",
|
|
4
4
|
"description": "Project v1 types, validation and canonical serialization for AelionSDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"!dist/.tsbuildinfo"
|
|
28
28
|
],
|
|
29
29
|
"engines": {
|
|
30
|
-
"node": ">=
|
|
30
|
+
"node": ">=24 <25"
|
|
31
31
|
},
|
|
32
32
|
"publishConfig": {
|
|
33
33
|
"access": "public",
|
|
34
34
|
"provenance": true
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@aelionsdk/core": "
|
|
38
|
-
"ajv": "8.
|
|
37
|
+
"@aelionsdk/core": "1.1.0-rc.1",
|
|
38
|
+
"ajv": "8.18.0",
|
|
39
39
|
"ajv-formats": "3.0.1"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|