@aelionsdk/project-schema 1.0.0-rc.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 CHANGED
@@ -1,7 +1,29 @@
1
- # @aelionsdk/project-schema
1
+ # `@aelionsdk/project-schema`
2
2
 
3
- Project v1 types, validation and canonical serialization for AelionSDK
3
+ Project v1 types, bounded admission, validation and canonical serialization for
4
+ AelionSDK.
4
5
 
5
- Install with `npm install @aelionsdk/project-schema@next`.
6
+ ## Install
6
7
 
7
- Version 1.0.0-rc.1 is a prerelease and its API may change before the first stable release. This package is part of [AelionSDK](https://github.com/FoyonaCZY/AelionSDK); see the repository README for supported browsers, examples and deployment requirements.
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
@@ -1,5 +1,6 @@
1
1
  export * from './admission.js';
2
2
  export * from './canonical.js';
3
+ export * from './image-sequence.js';
3
4
  export * from './types.js';
4
5
  export * from './validate.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,4 +1,5 @@
1
1
  export * from './admission.js';
2
2
  export * from './canonical.js';
3
+ export * from './image-sequence.js';
3
4
  export * from './types.js';
4
5
  export * from './validate.js';
package/dist/types.d.ts CHANGED
@@ -14,6 +14,18 @@ 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
  }
@@ -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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"}
@@ -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;AA8tBD,qBAAa,gBAAgB;;gBAGR,OAAO,EAAE,uBAAuB;IAY5C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;CA+ClE"}
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
@@ -372,6 +372,25 @@ function validateColorSemantics(project, diagnostics) {
372
372
  }
373
373
  }
374
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
+ });
392
+ }
393
+ }
375
394
  export class ProjectValidator {
376
395
  #schemaValidator;
377
396
  constructor(options) {
@@ -423,6 +442,7 @@ export class ProjectValidator {
423
442
  validateTimeMappingSemantics(project, diagnostics);
424
443
  validateAudioSemantics(project, diagnostics);
425
444
  validateColorSemantics(project, diagnostics);
445
+ validateImageSequenceReferences(project, diagnostics);
426
446
  return diagnostics.diagnostics.length === 0 ? ok({ project }) : err(...diagnostics.diagnostics);
427
447
  }
428
448
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aelionsdk/project-schema",
3
- "version": "1.0.0-rc.1",
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,14 +27,14 @@
27
27
  "!dist/.tsbuildinfo"
28
28
  ],
29
29
  "engines": {
30
- "node": ">=20.19"
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": "1.0.0-rc.1",
37
+ "@aelionsdk/core": "1.1.0-rc.1",
38
38
  "ajv": "8.18.0",
39
39
  "ajv-formats": "3.0.1"
40
40
  },