@aelionsdk/sdk 0.1.0-beta.1 → 1.0.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 +19 -4
- package/dist/default-schemas.js +1 -1
- package/dist/diagnostic-report.d.ts +13 -0
- package/dist/diagnostic-report.d.ts.map +1 -0
- package/dist/diagnostic-report.js +107 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/media-provider.d.ts +2 -0
- package/dist/media-provider.d.ts.map +1 -1
- package/dist/media-provider.js +3 -0
- package/dist/migrate-cli-lib.d.ts +39 -0
- package/dist/migrate-cli-lib.d.ts.map +1 -0
- package/dist/migrate-cli-lib.js +119 -0
- package/dist/migrate-cli.d.ts +3 -0
- package/dist/migrate-cli.d.ts.map +1 -0
- package/dist/migrate-cli.js +52 -0
- package/dist/production-media-provider.d.ts +2 -0
- package/dist/production-media-provider.d.ts.map +1 -1
- package/dist/production-media-provider.js +3 -0
- package/dist/project-builder.d.ts +9 -0
- package/dist/project-builder.d.ts.map +1 -1
- package/dist/project-builder.js +9 -1
- package/dist/session.d.ts +2 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +112 -22
- package/dist/types.d.ts +46 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +19 -11
package/README.md
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Browser-first video editing, preview, playback and export APIs for AelionSDK.
|
|
4
4
|
|
|
5
|
-
## Install the
|
|
5
|
+
## Install the 1.0 Release Candidate
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install @aelionsdk/sdk@next
|
|
9
9
|
npm install --save-dev @aelionsdk/vite-plugin@next vite
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
`next` currently resolves to `
|
|
12
|
+
`next` currently resolves to `1.0.0-rc.1`. Pin the exact version after
|
|
13
13
|
validation instead of following a moving prerelease tag.
|
|
14
14
|
|
|
15
15
|
## Vite setup
|
|
@@ -52,9 +52,24 @@ See the [AelionSDK documentation](https://foyonaczy.github.io/AelionSDK/) for
|
|
|
52
52
|
media registration, Composition APIs, preview, local export, persistent
|
|
53
53
|
checkpoints, deployment headers and capability preflight.
|
|
54
54
|
|
|
55
|
-
##
|
|
55
|
+
## Migrate WebAV or Diffusion projects
|
|
56
56
|
|
|
57
|
-
The
|
|
57
|
+
The package also installs `aelion-migrate`. It produces a validated Project
|
|
58
|
+
and a versioned loss report; strict mode never writes a Project when rendering
|
|
59
|
+
semantics cannot be preserved.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pnpm exec aelion-migrate --from webav --input webav.json --out project.aelion.json
|
|
63
|
+
pnpm exec aelion-migrate --from diffusion --input checkpoint.json \
|
|
64
|
+
--assets assets.json --dry-run
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Use the `@aelionsdk/sdk/migrate-cli` subpath to call the same file migration
|
|
68
|
+
API from Node.js.
|
|
69
|
+
|
|
70
|
+
## Release Candidate contract
|
|
71
|
+
|
|
72
|
+
The RC is tested on the automated Chromium and Firefox matrix. Playwright
|
|
58
73
|
WebKit and a mobile viewport cover public capability and fallback contracts;
|
|
59
74
|
physical Safari, iOS and Android devices are not yet certified. Local color
|
|
60
75
|
execution is RGBA8 SDR. Public APIs may still change before the first stable
|
package/dist/default-schemas.js
CHANGED
|
@@ -6,7 +6,7 @@ function deepFreeze(value) {
|
|
|
6
6
|
}
|
|
7
7
|
return value;
|
|
8
8
|
}
|
|
9
|
-
const projectSchema = JSON.parse(String.raw `{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://schemas.aelion.dev/project/v1.json","title":"Aelion Project Document v1","type":"object","additionalProperties":false,"required":["$schema","schemaVersion","projectId","metadata","settings","assets","sequences","tracks","items","materialInstances","transitions","markers","linkGroups","extensions"],"properties":{"$schema":{"const":"https://schemas.aelion.dev/project/v1.json"},"schemaVersion":{"const":"1.0.0"},"projectId":{"$ref":"#/$defs/entityId"},"metadata":{"$ref":"#/$defs/jsonObject"},"settings":{"$ref":"#/$defs/settings"},"assets":{"$ref":"#/$defs/assetMap"},"sequences":{"$ref":"#/$defs/sequenceMap"},"tracks":{"$ref":"#/$defs/trackMap"},"items":{"$ref":"#/$defs/itemMap"},"materialInstances":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"https://schemas.aelion.dev/material/instance/v1.json"}},"transitions":{"$ref":"#/$defs/transitionMap"},"markers":{"$ref":"#/$defs/markerMap"},"linkGroups":{"$ref":"#/$defs/linkGroupMap"},"extensions":{"$ref":"#/$defs/extensions"}},"$defs":{"entityId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z][A-Za-z0-9._:-]*$"},"safeInteger":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timeUs":{"type":"integer","minimum":0,"maximum":9007199254740991},"positiveDurationUs":{"type":"integer","minimum":1,"maximum":9007199254740991},"jsonValue":{"oneOf":[{"type":"null"},{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"array","maxItems":16384,"items":{"$ref":"#/$defs/jsonValue"}},{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/jsonValue"}}]},"jsonObject":{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/jsonValue"}},"extensions":{"type":"object","maxProperties":4096,"propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:\\.[a-z0-9-]+)+$"},"additionalProperties":{"$ref":"#/$defs/jsonValue"}},"rational":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"integer","minimum":1,"maximum":9007199254740991},"denominator":{"type":"integer","minimum":1,"maximum":9007199254740991}}},"range":{"type":"object","additionalProperties":false,"required":["startUs","durationUs"],"properties":{"startUs":{"$ref":"#/$defs/timeUs"},"durationUs":{"$ref":"#/$defs/positiveDurationUs"}}},"color":{"type":"object","additionalProperties":false,"required":["space","rgba"],"properties":{"space":{"enum":["srgb-linear","display-p3-linear","rec2020-linear"]},"rgba":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"number"}}}},"vec2":{"type":"object","additionalProperties":false,"required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"animation":{"type":"object","additionalProperties":false,"required":["animation"],"properties":{"animation":{"type":"object","additionalProperties":false,"required":["timeSpace","preInfinity","postInfinity","keyframes"],"properties":{"timeSpace":{"enum":["item","sequence"]},"preInfinity":{"enum":["hold","linear","none","cycle","ping-pong"]},"postInfinity":{"enum":["hold","linear","none","cycle","ping-pong"]},"keyframes":{"type":"array","minItems":1,"maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["timeUs","value","interpolation"],"properties":{"timeUs":{"$ref":"#/$defs/timeUs"},"value":{"$ref":"#/$defs/jsonValue"},"interpolation":{"enum":["hold","linear","cubic-bezier"]},"easing":{"type":"object","required":["type"],"properties":{"type":{"enum":["linear","steps","cubic-bezier"]},"count":{"type":"integer","minimum":1},"position":{"enum":["start","end"]},"x1":{"type":"number"},"y1":{"type":"number"},"x2":{"type":"number"},"y2":{"type":"number"}},"additionalProperties":false}}}}}}}},"animatableNumber":{"oneOf":[{"type":"number"},{"$ref":"#/$defs/animation"}]},"animatableVec2":{"oneOf":[{"$ref":"#/$defs/vec2"},{"$ref":"#/$defs/animation"}]},"settings":{"type":"object","additionalProperties":false,"required":["defaultSequenceId","defaultStillDurationUs","missingAssetPolicy","missingMaterialPolicy","missingPluginPolicy"],"properties":{"defaultSequenceId":{"$ref":"#/$defs/entityId"},"defaultStillDurationUs":{"$ref":"#/$defs/positiveDurationUs"},"locale":{"type":"string","minLength":1,"maxLength":128},"timezone":{"type":"string","minLength":1,"maxLength":128},"missingAssetPolicy":{"enum":["placeholder","error"]},"missingMaterialPolicy":{"enum":["placeholder","error"]},"missingPluginPolicy":{"enum":["placeholder","error"]}}},"assetLocator":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","uri"],"properties":{"type":{"const":"url"},"uri":{"type":"string","minLength":1,"maxLength":8192}}},{"type":"object","additionalProperties":false,"required":["type","bindingId"],"properties":{"type":{"const":"runtime-binding"},"bindingId":{"$ref":"#/$defs/entityId"}}},{"type":"object","additionalProperties":false,"required":["type","path"],"properties":{"type":{"const":"opfs"},"path":{"type":"string","minLength":1,"maxLength":4096}}},{"type":"object","additionalProperties":false,"required":["type","mimeType","base64"],"properties":{"type":{"const":"data"},"mimeType":{"type":"string","minLength":1,"maxLength":256},"base64":{"type":"string","maxLength":349528}}}]},"asset":{"type":"object","additionalProperties":false,"required":["id","kind","locator"],"properties":{"id":{"$ref":"#/$defs/entityId"},"kind":{"enum":["video","audio","image","font","lut","binary"]},"name":{"type":"string","maxLength":256},"locator":{"$ref":"#/$defs/assetLocator"},"contentHash":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"properties":{"algorithm":{"const":"sha256"},"value":{"type":"string","pattern":"^[0-9a-f]{64}$"}}},"byteLength":{"type":"integer","minimum":0,"maximum":9007199254740991},"mimeType":{"type":"string","minLength":1,"maxLength":256},"representations":{"type":"array","maxItems":32,"items":{"type":"object","maxProperties":4096,"additionalProperties":true,"required":["id","role","locator"],"properties":{"id":{"$ref":"#/$defs/entityId"},"role":{"enum":["original","proxy","thumbnail","waveform"]},"locator":{"$ref":"#/$defs/assetLocator"}}}},"probeHint":{"type":"object","additionalProperties":false,"properties":{"durationUs":{"$ref":"#/$defs/positiveDurationUs"},"width":{"type":"integer","minimum":1,"maximum":65535},"height":{"type":"integer","minimum":1,"maximum":65535},"videoCodec":{"type":"string","maxLength":256},"audioCodec":{"type":"string","maxLength":256}}},"metadata":{"$ref":"#/$defs/jsonObject"},"extensions":{"$ref":"#/$defs/extensions"}}},"assetMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/asset"}},"sequence":{"type":"object","additionalProperties":false,"required":["id","format","duration","trackIds","transitionIds","materialInstanceIds","markerIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"name":{"type":"string","maxLength":256},"format":{"type":"object","additionalProperties":false,"required":["width","height","pixelAspectRatio","frameRate","sampleRate","channelLayout","workingColorSpace","backgroundColor"],"properties":{"width":{"type":"integer","minimum":1,"maximum":65535},"height":{"type":"integer","minimum":1,"maximum":65535},"pixelAspectRatio":{"$ref":"#/$defs/rational"},"frameRate":{"$ref":"#/$defs/rational"},"sampleRate":{"enum":[44100,48000,96000]},"channelLayout":{"enum":["mono","stereo","5.1"]},"workingColorSpace":{"enum":["srgb-linear","display-p3-linear","rec2020-linear"]},"transferFunction":{"enum":["srgb","gamma22","pq","hlg"],"default":"srgb"},"bitDepth":{"enum":[8,10],"default":8},"backgroundColor":{"$ref":"#/$defs/color"}}},"duration":{"oneOf":[{"type":"object","additionalProperties":false,"required":["mode"],"properties":{"mode":{"const":"content"}}},{"type":"object","additionalProperties":false,"required":["mode","durationUs","overflow"],"properties":{"mode":{"const":"fixed"},"durationUs":{"$ref":"#/$defs/timeUs"},"overflow":{"enum":["clip","allow"]}}}]},"trackIds":{"$ref":"#/$defs/idList"},"transitionIds":{"$ref":"#/$defs/idList"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"markerIds":{"$ref":"#/$defs/idList"},"extensions":{"$ref":"#/$defs/extensions"}}},"sequenceMap":{"type":"object","minProperties":1,"maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/sequence"}},"idList":{"type":"array","maxItems":16384,"items":{"$ref":"#/$defs/entityId"}},"track":{"type":"object","additionalProperties":false,"required":["id","sequenceId","kind","enabled","locked","itemIds","materialInstanceIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"sequenceId":{"$ref":"#/$defs/entityId"},"kind":{"enum":["visual","audio","caption"]},"name":{"type":"string","maxLength":256},"enabled":{"type":"boolean"},"locked":{"type":"boolean"},"itemIds":{"$ref":"#/$defs/idList"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"audio":{"type":"object","additionalProperties":false,"required":["gainDb","pan","muted"],"properties":{"gainDb":{"$ref":"#/$defs/animatableNumber"},"pan":{"$ref":"#/$defs/animatableNumber"},"muted":{"type":"boolean"},"solo":{"type":"boolean","default":false}}},"extensions":{"$ref":"#/$defs/extensions"}}},"trackMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/track"}},"baseItem":{"type":"object","required":["id","trackId","type","enabled","range","materialInstanceIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"trackId":{"$ref":"#/$defs/entityId"},"type":{"enum":["video","audio","image","text","caption","shape","generator","nested-sequence","adjustment","material-content"]},"name":{"type":"string","maxLength":256},"enabled":{"type":"boolean"},"range":{"$ref":"#/$defs/range"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"linkGroupId":{"$ref":"#/$defs/entityId"},"markerIds":{"$ref":"#/$defs/idList"},"metadata":{"$ref":"#/$defs/jsonObject"},"extensions":{"$ref":"#/$defs/extensions"}}},"mediaSource":{"type":"object","additionalProperties":false,"required":["assetId","stream","sourceRange","timeMapping"],"properties":{"assetId":{"$ref":"#/$defs/entityId"},"stream":{"type":"object","additionalProperties":false,"required":["type","index"],"properties":{"type":{"enum":["video","audio"]},"index":{"type":"integer","minimum":0,"maximum":1024}}},"sourceRange":{"$ref":"#/$defs/range"},"timeMapping":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","rate","reverse","boundary"],"properties":{"type":{"const":"linear"},"rate":{"$ref":"#/$defs/rational"},"reverse":{"type":"boolean"},"boundary":{"enum":["error","hold","loop","transparent"]}}},{"type":"object","additionalProperties":false,"required":["type","points","boundary"],"properties":{"type":{"const":"curve"},"points":{"type":"array","minItems":2,"maxItems":4096,"items":{"type":"object","maxProperties":4096,"additionalProperties":true,"required":["itemTimeUs","sourceTimeUs","interpolation"],"properties":{"itemTimeUs":{"$ref":"#/$defs/timeUs"},"sourceTimeUs":{"$ref":"#/$defs/timeUs"},"interpolation":{"enum":["linear","hold","cubic"]}}}},"boundary":{"enum":["error","hold","loop","transparent"]}}}]}}},"visual":{"type":"object","additionalProperties":false,"required":["fit","transform","crop","opacity","blendMode"],"properties":{"fit":{"enum":["contain","cover","fill","none"]},"transform":{"type":"object","additionalProperties":false,"required":["positionPx","anchor","scale","rotationDeg","skewDeg"],"properties":{"positionPx":{"$ref":"#/$defs/animatableVec2"},"anchor":{"$ref":"#/$defs/animatableVec2"},"scale":{"$ref":"#/$defs/animatableVec2"},"rotationDeg":{"$ref":"#/$defs/animatableNumber"},"skewDeg":{"$ref":"#/$defs/animatableVec2"}}},"crop":{"oneOf":[{"type":"object","additionalProperties":false,"required":["left","top","right","bottom"],"properties":{"left":{"type":"number","minimum":0,"maximum":1},"top":{"type":"number","minimum":0,"maximum":1},"right":{"type":"number","minimum":0,"maximum":1},"bottom":{"type":"number","minimum":0,"maximum":1}}},{"$ref":"#/$defs/animation"}]},"opacity":{"$ref":"#/$defs/animatableNumber"},"blendMode":{"enum":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion"]},"mask":{"type":"object","additionalProperties":false,"required":["sourceItemId","channel","invert","featherPx","space","consumeSource"],"properties":{"sourceItemId":{"$ref":"#/$defs/entityId"},"channel":{"enum":["alpha","luma"]},"invert":{"type":"boolean"},"featherPx":{"type":"number","minimum":0,"maximum":4096},"space":{"enum":["source","canvas"]},"consumeSource":{"type":"boolean"}}}}},"audioProperties":{"type":"object","additionalProperties":false,"required":["gainDb","pan"],"properties":{"gainDb":{"$ref":"#/$defs/animatableNumber"},"pan":{"$ref":"#/$defs/animatableNumber"},"fadeInUs":{"$ref":"#/$defs/timeUs"},"fadeOutUs":{"$ref":"#/$defs/timeUs"},"pitchPolicy":{"enum":["varispeed","preserve"],"description":"Varispeed follows source time directly; preserve uses deterministic overlap-add time stretching."},"channelMap":{"type":"array","maxItems":16384,"items":{"type":"array","maxItems":16384,"items":{"type":"number"}}}}},"videoItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"video"},"source":{"$ref":"#/$defs/mediaSource"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"audioItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","audio"],"properties":{"type":{"const":"audio"},"source":{"$ref":"#/$defs/mediaSource"},"audio":{"$ref":"#/$defs/audioProperties"}}}],"unevaluatedProperties":false},"imageItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"image"},"source":{"$ref":"#/$defs/mediaSource"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"textItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["box","overflow","writingMode","paragraphs","visual"],"properties":{"type":{"const":"text"},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"overflow":{"enum":["clip","ellipsis","visible","auto-fit"]},"writingMode":{"enum":["horizontal-tb","vertical-rl","vertical-lr"]},"paragraphs":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["style","runs"],"properties":{"style":{"$ref":"#/$defs/jsonObject"},"runs":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["text","style"],"properties":{"text":{"type":"string","maxLength":1000000},"style":{"$ref":"#/$defs/jsonObject"}}}}}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"captionItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["text","box","style","visual"],"properties":{"type":{"const":"caption"},"text":{"type":"string","maxLength":1000000},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"style":{"$ref":"#/$defs/jsonObject"},"overflow":{"enum":["clip","auto-fit"]},"cueSettings":{"$ref":"#/$defs/jsonObject"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"nestedSequenceItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"nested-sequence"},"source":{"type":"object","additionalProperties":false,"required":["sequenceId","sourceRange","timeMapping"],"properties":{"sequenceId":{"$ref":"#/$defs/entityId"},"sourceRange":{"$ref":"#/$defs/range"},"timeMapping":{"$ref":"#/$defs/mediaSource/properties/timeMapping"}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"generatorItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["generator","visual"],"properties":{"type":{"const":"generator"},"generator":{"type":"object","additionalProperties":false,"required":["kind","colors"],"properties":{"kind":{"enum":["solid","linear-gradient"]},"colors":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/$defs/color"}},"angleDeg":{"type":"number"}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"adjustmentItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["visual"],"properties":{"type":{"const":"adjustment"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"shapeItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["shape","visual"],"properties":{"type":{"const":"shape"},"shape":{"type":"object","additionalProperties":false,"required":["kind","box","fill"],"properties":{"kind":{"enum":["rectangle","ellipse","polygon"]},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"fill":{"$ref":"#/$defs/color"},"stroke":{"$ref":"#/$defs/color"},"strokeWidthPx":{"type":"number","minimum":0,"maximum":4096},"cornerRadiusPx":{"type":"number","minimum":0,"maximum":32768},"points":{"type":"array","minItems":3,"maxItems":1024,"items":{"$ref":"#/$defs/vec2"}}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"materialContentItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["materialInstanceId","visual"],"properties":{"type":{"const":"material-content"},"materialInstanceId":{"$ref":"#/$defs/entityId"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"item":{"oneOf":[{"$ref":"#/$defs/videoItem"},{"$ref":"#/$defs/audioItem"},{"$ref":"#/$defs/imageItem"},{"$ref":"#/$defs/textItem"},{"$ref":"#/$defs/captionItem"},{"$ref":"#/$defs/nestedSequenceItem"},{"$ref":"#/$defs/generatorItem"},{"$ref":"#/$defs/adjustmentItem"},{"$ref":"#/$defs/materialContentItem"},{"$ref":"#/$defs/shapeItem"}]},"itemMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/item"}},"transition":{"type":"object","additionalProperties":false,"required":["id","sequenceId","trackId","kind","fromItemId","toItemId","range","materialInstanceId"],"properties":{"id":{"$ref":"#/$defs/entityId"},"sequenceId":{"$ref":"#/$defs/entityId"},"trackId":{"$ref":"#/$defs/entityId"},"kind":{"enum":["visual","audio"]},"fromItemId":{"$ref":"#/$defs/entityId"},"toItemId":{"$ref":"#/$defs/entityId"},"range":{"$ref":"#/$defs/range"},"materialInstanceId":{"$ref":"#/$defs/entityId"},"extensions":{"$ref":"#/$defs/extensions"}}},"transitionMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/transition"}},"marker":{"type":"object","additionalProperties":false,"required":["id","owner","timeUs","durationUs"],"properties":{"id":{"$ref":"#/$defs/entityId"},"owner":{"type":"object","additionalProperties":false,"required":["type","id"],"properties":{"type":{"enum":["sequence","item"]},"id":{"$ref":"#/$defs/entityId"}}},"timeUs":{"$ref":"#/$defs/timeUs"},"durationUs":{"$ref":"#/$defs/timeUs"},"label":{"type":"string","maxLength":1024},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$"},"payload":{"$ref":"#/$defs/jsonValue"}}},"markerMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/marker"}},"linkGroup":{"type":"object","additionalProperties":false,"required":["id","kind","itemIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"kind":{"enum":["av-sync","edit-group"]},"itemIds":{"$ref":"#/$defs/idList"},"syncOffsetsUs":{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/safeInteger"}}}},"linkGroupMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/linkGroup"}}}}`);
|
|
9
|
+
const projectSchema = JSON.parse(String.raw `{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://schemas.aelion.dev/project/v1.json","title":"Aelion Project Document v1","type":"object","additionalProperties":false,"required":["$schema","schemaVersion","projectId","metadata","settings","assets","sequences","tracks","items","materialInstances","transitions","markers","linkGroups","extensions"],"properties":{"$schema":{"const":"https://schemas.aelion.dev/project/v1.json"},"schemaVersion":{"const":"1.0.0"},"projectId":{"$ref":"#/$defs/entityId"},"metadata":{"$ref":"#/$defs/jsonObject"},"settings":{"$ref":"#/$defs/settings"},"assets":{"$ref":"#/$defs/assetMap"},"sequences":{"$ref":"#/$defs/sequenceMap"},"tracks":{"$ref":"#/$defs/trackMap"},"items":{"$ref":"#/$defs/itemMap"},"materialInstances":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"https://schemas.aelion.dev/material/instance/v1.json"}},"transitions":{"$ref":"#/$defs/transitionMap"},"markers":{"$ref":"#/$defs/markerMap"},"linkGroups":{"$ref":"#/$defs/linkGroupMap"},"extensions":{"$ref":"#/$defs/extensions"}},"$defs":{"entityId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z][A-Za-z0-9._:-]*$"},"safeInteger":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timeUs":{"type":"integer","minimum":0,"maximum":9007199254740991},"positiveDurationUs":{"type":"integer","minimum":1,"maximum":9007199254740991},"jsonValue":{"oneOf":[{"type":"null"},{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"array","maxItems":16384,"items":{"$ref":"#/$defs/jsonValue"}},{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/jsonValue"}}]},"jsonObject":{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/jsonValue"}},"extensions":{"type":"object","maxProperties":4096,"propertyNames":{"type":"string","pattern":"^[a-z0-9]+(?:\\.[a-z0-9-]+)+$"},"additionalProperties":{"$ref":"#/$defs/jsonValue"}},"rational":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"integer","minimum":1,"maximum":9007199254740991},"denominator":{"type":"integer","minimum":1,"maximum":9007199254740991}}},"range":{"type":"object","additionalProperties":false,"required":["startUs","durationUs"],"properties":{"startUs":{"$ref":"#/$defs/timeUs"},"durationUs":{"$ref":"#/$defs/positiveDurationUs"}}},"color":{"type":"object","additionalProperties":false,"required":["space","rgba"],"properties":{"space":{"enum":["srgb-linear","display-p3-linear","rec2020-linear"]},"rgba":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"number"}}}},"vec2":{"type":"object","additionalProperties":false,"required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"animation":{"type":"object","additionalProperties":false,"required":["animation"],"properties":{"animation":{"type":"object","additionalProperties":false,"required":["timeSpace","preInfinity","postInfinity","keyframes"],"properties":{"timeSpace":{"enum":["item","sequence"]},"preInfinity":{"enum":["hold","linear","none","cycle","ping-pong"]},"postInfinity":{"enum":["hold","linear","none","cycle","ping-pong"]},"keyframes":{"type":"array","minItems":1,"maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["timeUs","value","interpolation"],"properties":{"timeUs":{"$ref":"#/$defs/timeUs"},"value":{"$ref":"#/$defs/jsonValue"},"interpolation":{"enum":["hold","linear","cubic-bezier"]},"easing":{"type":"object","required":["type"],"properties":{"type":{"enum":["linear","steps","cubic-bezier"]},"count":{"type":"integer","minimum":1},"position":{"enum":["start","end"]},"x1":{"type":"number"},"y1":{"type":"number"},"x2":{"type":"number"},"y2":{"type":"number"}},"additionalProperties":false}}}}}}}},"animatableNumber":{"oneOf":[{"type":"number"},{"$ref":"#/$defs/animation"}]},"animatableVec2":{"oneOf":[{"$ref":"#/$defs/vec2"},{"$ref":"#/$defs/animation"}]},"settings":{"type":"object","additionalProperties":false,"required":["defaultSequenceId","defaultStillDurationUs","missingAssetPolicy","missingMaterialPolicy","missingPluginPolicy"],"properties":{"defaultSequenceId":{"$ref":"#/$defs/entityId"},"defaultStillDurationUs":{"$ref":"#/$defs/positiveDurationUs"},"locale":{"type":"string","minLength":1,"maxLength":128},"timezone":{"type":"string","minLength":1,"maxLength":128},"missingAssetPolicy":{"enum":["placeholder","error"]},"missingMaterialPolicy":{"enum":["placeholder","error"]},"missingPluginPolicy":{"enum":["placeholder","error"]}}},"assetLocator":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","uri"],"properties":{"type":{"const":"url"},"uri":{"type":"string","minLength":1,"maxLength":8192}}},{"type":"object","additionalProperties":false,"required":["type","bindingId"],"properties":{"type":{"const":"runtime-binding"},"bindingId":{"$ref":"#/$defs/entityId"}}},{"type":"object","additionalProperties":false,"required":["type","path"],"properties":{"type":{"const":"opfs"},"path":{"type":"string","minLength":1,"maxLength":4096}}},{"type":"object","additionalProperties":false,"required":["type","mimeType","base64"],"properties":{"type":{"const":"data"},"mimeType":{"type":"string","minLength":1,"maxLength":256},"base64":{"type":"string","maxLength":349528}}}]},"asset":{"type":"object","additionalProperties":false,"required":["id","kind","locator"],"properties":{"id":{"$ref":"#/$defs/entityId"},"kind":{"enum":["video","audio","image","font","lut","binary"]},"name":{"type":"string","maxLength":256},"locator":{"$ref":"#/$defs/assetLocator"},"contentHash":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"properties":{"algorithm":{"const":"sha256"},"value":{"type":"string","pattern":"^[0-9a-f]{64}$"}}},"byteLength":{"type":"integer","minimum":0,"maximum":9007199254740991},"mimeType":{"type":"string","minLength":1,"maxLength":256},"representations":{"type":"array","maxItems":32,"items":{"type":"object","maxProperties":4096,"additionalProperties":true,"required":["id","role","locator"],"properties":{"id":{"$ref":"#/$defs/entityId"},"role":{"enum":["original","proxy","thumbnail","waveform"]},"locator":{"$ref":"#/$defs/assetLocator"}}}},"probeHint":{"type":"object","additionalProperties":false,"properties":{"durationUs":{"$ref":"#/$defs/positiveDurationUs"},"width":{"type":"integer","minimum":1,"maximum":65535},"height":{"type":"integer","minimum":1,"maximum":65535},"videoCodec":{"type":"string","maxLength":256},"audioCodec":{"type":"string","maxLength":256}}},"metadata":{"$ref":"#/$defs/jsonObject"},"extensions":{"$ref":"#/$defs/extensions"}}},"assetMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/asset"}},"sequence":{"type":"object","additionalProperties":false,"required":["id","format","duration","trackIds","transitionIds","materialInstanceIds","markerIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"name":{"type":"string","maxLength":256},"format":{"type":"object","additionalProperties":false,"required":["width","height","pixelAspectRatio","frameRate","sampleRate","channelLayout","workingColorSpace","backgroundColor"],"properties":{"width":{"type":"integer","minimum":1,"maximum":65535},"height":{"type":"integer","minimum":1,"maximum":65535},"pixelAspectRatio":{"$ref":"#/$defs/rational"},"frameRate":{"$ref":"#/$defs/rational"},"sampleRate":{"enum":[44100,48000,96000]},"channelLayout":{"enum":["mono","stereo","5.1"]},"workingColorSpace":{"enum":["srgb-linear","display-p3-linear","rec2020-linear"]},"transferFunction":{"enum":["srgb","gamma22","pq","hlg"],"default":"srgb"},"colorPrimaries":{"enum":["bt709","display-p3","bt2020"],"default":"bt709"},"matrixCoefficients":{"enum":["rgb","bt709","bt2020-ncl"],"default":"rgb"},"colorRange":{"enum":["full","limited"],"default":"full"},"chromaSubsampling":{"enum":["rgb","4:4:4","4:2:2","4:2:0"],"default":"4:4:4"},"alphaMode":{"enum":["opaque","premultiplied"],"default":"premultiplied"},"toneMapping":{"enum":["none","bt2390","reinhard"],"default":"none"},"bitDepth":{"enum":[8,10],"default":8},"backgroundColor":{"$ref":"#/$defs/color"}}},"duration":{"oneOf":[{"type":"object","additionalProperties":false,"required":["mode"],"properties":{"mode":{"const":"content"}}},{"type":"object","additionalProperties":false,"required":["mode","durationUs","overflow"],"properties":{"mode":{"const":"fixed"},"durationUs":{"$ref":"#/$defs/timeUs"},"overflow":{"enum":["clip","allow"]}}}]},"trackIds":{"$ref":"#/$defs/idList"},"transitionIds":{"$ref":"#/$defs/idList"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"markerIds":{"$ref":"#/$defs/idList"},"extensions":{"$ref":"#/$defs/extensions"}}},"sequenceMap":{"type":"object","minProperties":1,"maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/sequence"}},"idList":{"type":"array","maxItems":16384,"items":{"$ref":"#/$defs/entityId"}},"track":{"type":"object","additionalProperties":false,"required":["id","sequenceId","kind","enabled","locked","itemIds","materialInstanceIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"sequenceId":{"$ref":"#/$defs/entityId"},"kind":{"enum":["visual","audio","caption"]},"name":{"type":"string","maxLength":256},"enabled":{"type":"boolean"},"locked":{"type":"boolean"},"itemIds":{"$ref":"#/$defs/idList"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"audio":{"type":"object","additionalProperties":false,"required":["gainDb","pan","muted"],"properties":{"gainDb":{"$ref":"#/$defs/animatableNumber"},"pan":{"$ref":"#/$defs/animatableNumber"},"muted":{"type":"boolean"},"solo":{"type":"boolean","default":false}}},"extensions":{"$ref":"#/$defs/extensions"}}},"trackMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/track"}},"baseItem":{"type":"object","required":["id","trackId","type","enabled","range","materialInstanceIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"trackId":{"$ref":"#/$defs/entityId"},"type":{"enum":["video","audio","image","text","caption","shape","generator","nested-sequence","adjustment","material-content"]},"name":{"type":"string","maxLength":256},"enabled":{"type":"boolean"},"range":{"$ref":"#/$defs/range"},"materialInstanceIds":{"$ref":"#/$defs/idList"},"linkGroupId":{"$ref":"#/$defs/entityId"},"markerIds":{"$ref":"#/$defs/idList"},"metadata":{"$ref":"#/$defs/jsonObject"},"extensions":{"$ref":"#/$defs/extensions"}}},"mediaSource":{"type":"object","additionalProperties":false,"required":["assetId","stream","sourceRange","timeMapping"],"properties":{"assetId":{"$ref":"#/$defs/entityId"},"stream":{"type":"object","additionalProperties":false,"required":["type","index"],"properties":{"type":{"enum":["video","audio"]},"index":{"type":"integer","minimum":0,"maximum":1024}}},"sourceRange":{"$ref":"#/$defs/range"},"timeMapping":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","rate","reverse","boundary"],"properties":{"type":{"const":"linear"},"rate":{"$ref":"#/$defs/rational"},"reverse":{"type":"boolean"},"boundary":{"enum":["error","hold","loop","transparent"]}}},{"type":"object","additionalProperties":false,"required":["type","points","boundary"],"properties":{"type":{"const":"curve"},"points":{"type":"array","minItems":2,"maxItems":4096,"items":{"type":"object","maxProperties":4096,"additionalProperties":true,"required":["itemTimeUs","sourceTimeUs","interpolation"],"properties":{"itemTimeUs":{"$ref":"#/$defs/timeUs"},"sourceTimeUs":{"$ref":"#/$defs/timeUs"},"interpolation":{"enum":["linear","hold","cubic"]}}}},"boundary":{"enum":["error","hold","loop","transparent"]}}}]}}},"visual":{"type":"object","additionalProperties":false,"required":["fit","transform","crop","opacity","blendMode"],"properties":{"fit":{"enum":["contain","cover","fill","none"]},"transform":{"type":"object","additionalProperties":false,"required":["positionPx","anchor","scale","rotationDeg","skewDeg"],"properties":{"positionPx":{"$ref":"#/$defs/animatableVec2"},"anchor":{"$ref":"#/$defs/animatableVec2"},"scale":{"$ref":"#/$defs/animatableVec2"},"rotationDeg":{"$ref":"#/$defs/animatableNumber"},"skewDeg":{"$ref":"#/$defs/animatableVec2"}}},"crop":{"oneOf":[{"type":"object","additionalProperties":false,"required":["left","top","right","bottom"],"properties":{"left":{"type":"number","minimum":0,"maximum":1},"top":{"type":"number","minimum":0,"maximum":1},"right":{"type":"number","minimum":0,"maximum":1},"bottom":{"type":"number","minimum":0,"maximum":1}}},{"$ref":"#/$defs/animation"}]},"opacity":{"$ref":"#/$defs/animatableNumber"},"blendMode":{"enum":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion"]},"mask":{"type":"object","additionalProperties":false,"required":["sourceItemId","channel","invert","featherPx","space","consumeSource"],"properties":{"sourceItemId":{"$ref":"#/$defs/entityId"},"channel":{"enum":["alpha","luma"]},"invert":{"type":"boolean"},"featherPx":{"type":"number","minimum":0,"maximum":4096},"space":{"enum":["source","canvas"]},"consumeSource":{"type":"boolean"}}}}},"audioProperties":{"type":"object","additionalProperties":false,"required":["gainDb","pan"],"properties":{"gainDb":{"$ref":"#/$defs/animatableNumber"},"pan":{"$ref":"#/$defs/animatableNumber"},"fadeInUs":{"$ref":"#/$defs/timeUs"},"fadeOutUs":{"$ref":"#/$defs/timeUs"},"pitchPolicy":{"enum":["varispeed","preserve"],"description":"Varispeed follows source time directly; preserve uses deterministic overlap-add time stretching."},"channelMap":{"type":"array","maxItems":16384,"items":{"type":"array","maxItems":16384,"items":{"type":"number"}}}}},"videoItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"video"},"source":{"$ref":"#/$defs/mediaSource"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"audioItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","audio"],"properties":{"type":{"const":"audio"},"source":{"$ref":"#/$defs/mediaSource"},"audio":{"$ref":"#/$defs/audioProperties"}}}],"unevaluatedProperties":false},"imageItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"image"},"source":{"$ref":"#/$defs/mediaSource"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"textItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["box","overflow","writingMode","paragraphs","visual"],"properties":{"type":{"const":"text"},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"overflow":{"enum":["clip","ellipsis","visible","auto-fit"]},"writingMode":{"enum":["horizontal-tb","vertical-rl","vertical-lr"]},"paragraphs":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["style","runs"],"properties":{"style":{"$ref":"#/$defs/jsonObject"},"runs":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["text","style"],"properties":{"text":{"type":"string","maxLength":1000000},"style":{"$ref":"#/$defs/jsonObject"}}}}}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"captionItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["text","box","style","visual"],"properties":{"type":{"const":"caption"},"text":{"type":"string","maxLength":1000000},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"style":{"$ref":"#/$defs/jsonObject"},"overflow":{"enum":["clip","auto-fit"]},"cueSettings":{"$ref":"#/$defs/jsonObject"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"nestedSequenceItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["source","visual"],"properties":{"type":{"const":"nested-sequence"},"source":{"type":"object","additionalProperties":false,"required":["sequenceId","sourceRange","timeMapping"],"properties":{"sequenceId":{"$ref":"#/$defs/entityId"},"sourceRange":{"$ref":"#/$defs/range"},"timeMapping":{"$ref":"#/$defs/mediaSource/properties/timeMapping"}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"generatorItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["generator","visual"],"properties":{"type":{"const":"generator"},"generator":{"type":"object","additionalProperties":false,"required":["kind","colors"],"properties":{"kind":{"enum":["solid","linear-gradient"]},"colors":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/$defs/color"}},"angleDeg":{"type":"number"}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"adjustmentItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["visual"],"properties":{"type":{"const":"adjustment"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"shapeItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["shape","visual"],"properties":{"type":{"const":"shape"},"shape":{"type":"object","additionalProperties":false,"required":["kind","box","fill"],"properties":{"kind":{"enum":["rectangle","ellipse","polygon"]},"box":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number","exclusiveMinimum":0},"height":{"type":"number","exclusiveMinimum":0}}},"fill":{"$ref":"#/$defs/color"},"stroke":{"$ref":"#/$defs/color"},"strokeWidthPx":{"type":"number","minimum":0,"maximum":4096},"cornerRadiusPx":{"type":"number","minimum":0,"maximum":32768},"points":{"type":"array","minItems":3,"maxItems":1024,"items":{"$ref":"#/$defs/vec2"}}}},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"materialContentItem":{"type":"object","allOf":[{"$ref":"#/$defs/baseItem"},{"type":"object","required":["materialInstanceId","visual"],"properties":{"type":{"const":"material-content"},"materialInstanceId":{"$ref":"#/$defs/entityId"},"visual":{"$ref":"#/$defs/visual"}}}],"unevaluatedProperties":false},"item":{"oneOf":[{"$ref":"#/$defs/videoItem"},{"$ref":"#/$defs/audioItem"},{"$ref":"#/$defs/imageItem"},{"$ref":"#/$defs/textItem"},{"$ref":"#/$defs/captionItem"},{"$ref":"#/$defs/nestedSequenceItem"},{"$ref":"#/$defs/generatorItem"},{"$ref":"#/$defs/adjustmentItem"},{"$ref":"#/$defs/materialContentItem"},{"$ref":"#/$defs/shapeItem"}]},"itemMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/item"}},"transition":{"type":"object","additionalProperties":false,"required":["id","sequenceId","trackId","kind","fromItemId","toItemId","range","materialInstanceId"],"properties":{"id":{"$ref":"#/$defs/entityId"},"sequenceId":{"$ref":"#/$defs/entityId"},"trackId":{"$ref":"#/$defs/entityId"},"kind":{"enum":["visual","audio"]},"fromItemId":{"$ref":"#/$defs/entityId"},"toItemId":{"$ref":"#/$defs/entityId"},"range":{"$ref":"#/$defs/range"},"materialInstanceId":{"$ref":"#/$defs/entityId"},"extensions":{"$ref":"#/$defs/extensions"}}},"transitionMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/transition"}},"marker":{"type":"object","additionalProperties":false,"required":["id","owner","timeUs","durationUs"],"properties":{"id":{"$ref":"#/$defs/entityId"},"owner":{"type":"object","additionalProperties":false,"required":["type","id"],"properties":{"type":{"enum":["sequence","item"]},"id":{"$ref":"#/$defs/entityId"}}},"timeUs":{"$ref":"#/$defs/timeUs"},"durationUs":{"$ref":"#/$defs/timeUs"},"label":{"type":"string","maxLength":1024},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$"},"payload":{"$ref":"#/$defs/jsonValue"}}},"markerMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/marker"}},"linkGroup":{"type":"object","additionalProperties":false,"required":["id","kind","itemIds"],"properties":{"id":{"$ref":"#/$defs/entityId"},"kind":{"enum":["av-sync","edit-group"]},"itemIds":{"$ref":"#/$defs/idList"},"syncOffsetsUs":{"type":"object","maxProperties":4096,"additionalProperties":{"$ref":"#/$defs/safeInteger"}}}},"linkGroupMap":{"type":"object","maxProperties":4096,"propertyNames":{"$ref":"#/$defs/entityId"},"additionalProperties":{"$ref":"#/$defs/linkGroup"}}}}`);
|
|
10
10
|
const materialInstanceSchema = JSON.parse(String.raw `{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://schemas.aelion.dev/material/instance/v1.json","title":"Aelion Project Material Instance v1","type":"object","additionalProperties":false,"required":["id","definition","enabled","parameters"],"properties":{"id":{"type":"string","minLength":1,"maxLength":128},"definition":{"type":"object","additionalProperties":false,"required":["packageId","packageVersion","packageIntegrity","materialId"],"properties":{"packageId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9]+(?:[._-][a-z0-9]+)*$"},"packageVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"},"packageIntegrity":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"},"materialId":{"type":"string","minLength":1,"maxLength":96,"pattern":"^[A-Za-z][A-Za-z0-9_-]*$"}}},"name":{"type":"string","maxLength":256},"enabled":{"type":"boolean"},"previewPolicy":{"enum":["required","skippable-when-degraded"]},"parameters":{"type":"object","maxProperties":64,"additionalProperties":true},"resourceBindings":{"type":"object","maxProperties":16,"additionalProperties":true},"inputBindings":{"type":"object","maxProperties":16,"additionalProperties":true},"randomSeed":{"type":"integer","minimum":0,"maximum":4294967295},"extensions":{"type":"object","additionalProperties":true}}}`);
|
|
11
11
|
/**
|
|
12
12
|
* The canonical v1 validators bundled into the JavaScript artifact. Consumers
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CapabilityReport } from '@aelionsdk/capability';
|
|
2
|
+
import type { Diagnostic, JsonObject } from '@aelionsdk/core';
|
|
3
|
+
import type { AelionDiagnosticReport, AelionDiagnosticReportOptions, AelionSessionState, AelionSessionStats } from './types.js';
|
|
4
|
+
export declare function createAelionDiagnosticReport(input: {
|
|
5
|
+
readonly state: AelionSessionState;
|
|
6
|
+
readonly revision: bigint | null;
|
|
7
|
+
readonly capability: CapabilityReport | null;
|
|
8
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
9
|
+
readonly stats: AelionSessionStats;
|
|
10
|
+
readonly media: JsonObject | null;
|
|
11
|
+
readonly options?: AelionDiagnosticReportOptions;
|
|
12
|
+
}): AelionDiagnosticReport;
|
|
13
|
+
//# sourceMappingURL=diagnostic-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic-report.d.ts","sourceRoot":"","sources":["../src/diagnostic-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAa,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAwFpB,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,6BAA6B,CAAC;CAClD,GAAG,sBAAsB,CAgBzB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
function jsonValue(value) {
|
|
2
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
3
|
+
return value;
|
|
4
|
+
if (typeof value === 'number')
|
|
5
|
+
return Number.isFinite(value) ? value : null;
|
|
6
|
+
if (typeof value === 'bigint')
|
|
7
|
+
return value.toString();
|
|
8
|
+
if (Array.isArray(value))
|
|
9
|
+
return value.map(jsonValue);
|
|
10
|
+
if (typeof value === 'object') {
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const [key, member] of Object.entries(value)) {
|
|
13
|
+
if (member === undefined || typeof member === 'function' || typeof member === 'symbol') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
result[key] = jsonValue(member);
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
if (typeof value === 'symbol')
|
|
21
|
+
return value.description ?? '';
|
|
22
|
+
if (typeof value === 'function')
|
|
23
|
+
return `[function ${value.name || 'anonymous'}]`;
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
function safeDiagnostic(value, full) {
|
|
27
|
+
return {
|
|
28
|
+
code: value.code,
|
|
29
|
+
severity: value.severity,
|
|
30
|
+
recoverable: value.recoverable,
|
|
31
|
+
...(value.path === undefined ? {} : { path: jsonValue(value.path) }),
|
|
32
|
+
...(value.rangeUs === undefined ? {} : { rangeUs: jsonValue(value.rangeUs) }),
|
|
33
|
+
...(full
|
|
34
|
+
? {
|
|
35
|
+
message: value.message,
|
|
36
|
+
...(value.entityId === undefined ? {} : { entityId: value.entityId }),
|
|
37
|
+
...(value.details === undefined ? {} : { details: jsonValue(value.details) }),
|
|
38
|
+
}
|
|
39
|
+
: {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function safeProbe(value) {
|
|
43
|
+
return {
|
|
44
|
+
status: value.status,
|
|
45
|
+
available: value.available,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function capability(value, full) {
|
|
49
|
+
if (value === null)
|
|
50
|
+
return null;
|
|
51
|
+
if (full)
|
|
52
|
+
return jsonValue(value);
|
|
53
|
+
return jsonValue({
|
|
54
|
+
schemaVersion: value.schemaVersion,
|
|
55
|
+
generatedAt: value.generatedAt,
|
|
56
|
+
tier: value.tier,
|
|
57
|
+
codecs: value.codecs.map(codec => ({
|
|
58
|
+
id: codec.id,
|
|
59
|
+
kind: codec.kind,
|
|
60
|
+
codec: codec.codec,
|
|
61
|
+
supported: codec.supported,
|
|
62
|
+
})),
|
|
63
|
+
gpu: {
|
|
64
|
+
webgpu: safeProbe(value.gpu.webgpu),
|
|
65
|
+
webgl2: safeProbe(value.gpu.webgl2),
|
|
66
|
+
offscreenCanvas: safeProbe(value.gpu.offscreenCanvas),
|
|
67
|
+
worker: safeProbe(value.gpu.worker),
|
|
68
|
+
},
|
|
69
|
+
audio: {
|
|
70
|
+
audioContext: safeProbe(value.audio.audioContext),
|
|
71
|
+
audioWorklet: safeProbe(value.audio.audioWorklet),
|
|
72
|
+
sharedArrayBuffer: safeProbe(value.audio.sharedArrayBuffer),
|
|
73
|
+
},
|
|
74
|
+
storage: {
|
|
75
|
+
opfs: safeProbe(value.storage.opfs),
|
|
76
|
+
fileSystemAccess: safeProbe(value.storage.fileSystemAccess),
|
|
77
|
+
transferableStreams: safeProbe(value.storage.transferableStreams),
|
|
78
|
+
},
|
|
79
|
+
color: {
|
|
80
|
+
displayP3Gamut: safeProbe(value.color.displayP3Gamut),
|
|
81
|
+
highDynamicRange: safeProbe(value.color.highDynamicRange),
|
|
82
|
+
localExecution: value.color.localExecution,
|
|
83
|
+
},
|
|
84
|
+
wasm: { available: safeProbe(value.wasm.available) },
|
|
85
|
+
environment: {
|
|
86
|
+
secureContext: value.environment.secureContext,
|
|
87
|
+
crossOriginIsolated: value.environment.crossOriginIsolated,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export function createAelionDiagnosticReport(input) {
|
|
92
|
+
const privacy = input.options?.privacy ?? 'safe';
|
|
93
|
+
const full = privacy === 'full';
|
|
94
|
+
return Object.freeze({
|
|
95
|
+
schemaVersion: '1.0.0',
|
|
96
|
+
generatedAt: new Date().toISOString(),
|
|
97
|
+
privacy,
|
|
98
|
+
session: Object.freeze({
|
|
99
|
+
state: input.state,
|
|
100
|
+
revision: input.revision?.toString() ?? null,
|
|
101
|
+
}),
|
|
102
|
+
capability: capability(input.capability, full),
|
|
103
|
+
diagnostics: Object.freeze(input.diagnostics.map(value => safeDiagnostic(value, full))),
|
|
104
|
+
stats: jsonValue(input.stats),
|
|
105
|
+
media: input.media === null ? null : jsonValue(input.media),
|
|
106
|
+
});
|
|
107
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './media-provider.js';
|
|
|
4
4
|
export * from './production-media-provider.js';
|
|
5
5
|
export * from './project-builder.js';
|
|
6
6
|
export * from './composition.js';
|
|
7
|
+
export * from './diagnostic-report.js';
|
|
7
8
|
export * from './migration.js';
|
|
8
9
|
export * from './migration-materials.js';
|
|
9
10
|
export * from './audio-controller.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,MAAM,EAAE,SAEpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,eAAO,MAAM,MAAM,EAAE,SAEpB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from './media-provider.js';
|
|
|
4
4
|
export * from './production-media-provider.js';
|
|
5
5
|
export * from './project-builder.js';
|
|
6
6
|
export * from './composition.js';
|
|
7
|
+
export * from './diagnostic-report.js';
|
|
7
8
|
export * from './migration.js';
|
|
8
9
|
export * from './migration-materials.js';
|
|
9
10
|
export * from './audio-controller.js';
|
package/dist/media-provider.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PcmSourceBlock } from '@aelionsdk/audio';
|
|
2
|
+
import { type JsonObject } from '@aelionsdk/core';
|
|
2
3
|
import type { AelionMediaProvider } from './types.js';
|
|
3
4
|
export type AelionAssetBytesResolver = (assetId: string, signal?: AbortSignal) => Promise<Uint8Array>;
|
|
4
5
|
export interface ByteMediaProviderOptions {
|
|
@@ -45,5 +46,6 @@ export declare class ByteMediaProvider implements AelionMediaProvider {
|
|
|
45
46
|
/** Compatibility alias for maxConcurrentOperations. */
|
|
46
47
|
readonly maxConcurrentLoads: number;
|
|
47
48
|
};
|
|
49
|
+
getDiagnosticSnapshot(): JsonObject;
|
|
48
50
|
}
|
|
49
51
|
//# sourceMappingURL=media-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-provider.d.ts","sourceRoot":"","sources":["../src/media-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"media-provider.d.ts","sourceRoot":"","sources":["../src/media-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,2FAA2F;IAC3F,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAgID;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;;gBAgBxC,OAAO,EAAE,wBAAwB;IA2BvC,OAAO,CAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IA+BT,QAAQ,CACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC;IAiBnB,KAAK,IAAI,IAAI;IAOb,QAAQ,IAAI;QACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,oFAAoF;QACpF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,mFAAmF;QACnF,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,8EAA8E;QAC9E,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;QAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;QACzC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;QACtC,gDAAgD;QAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,iDAAiD;QACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,uDAAuD;QACvD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC;IAuBM,qBAAqB,IAAI,UAAU;CAyM3C"}
|
package/dist/media-provider.js
CHANGED
|
@@ -190,6 +190,9 @@ export class ByteMediaProvider {
|
|
|
190
190
|
maxConcurrentLoads: this.#maxConcurrentOperations,
|
|
191
191
|
};
|
|
192
192
|
}
|
|
193
|
+
getDiagnosticSnapshot() {
|
|
194
|
+
return this.snapshot();
|
|
195
|
+
}
|
|
193
196
|
async #asset(assetId, signal) {
|
|
194
197
|
if (signal?.aborted === true)
|
|
195
198
|
throw abortReason(signal);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type MigrationDiagnostic } from './migration.js';
|
|
2
|
+
export type MigrationSource = 'webav' | 'diffusion';
|
|
3
|
+
export interface MigrateProjectFileOptions {
|
|
4
|
+
readonly source: MigrationSource;
|
|
5
|
+
readonly inputPath: string;
|
|
6
|
+
readonly assetsPath?: string;
|
|
7
|
+
readonly outputPath?: string;
|
|
8
|
+
readonly reportPath?: string;
|
|
9
|
+
/** Reject migrations with unsupported rendering semantics. Defaults to true. */
|
|
10
|
+
readonly strict?: boolean;
|
|
11
|
+
/** Generate and validate the project without writing it. */
|
|
12
|
+
readonly dryRun?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ProjectMigrationFileReport {
|
|
15
|
+
readonly reportVersion: '1.0.0';
|
|
16
|
+
readonly source: MigrationSource;
|
|
17
|
+
readonly inputPath: string;
|
|
18
|
+
readonly assetsPath?: string;
|
|
19
|
+
readonly outputPath?: string;
|
|
20
|
+
readonly reportPath: string;
|
|
21
|
+
readonly strict: boolean;
|
|
22
|
+
readonly dryRun: boolean;
|
|
23
|
+
readonly status: 'passed' | 'lossy' | 'failed';
|
|
24
|
+
readonly projectId: string;
|
|
25
|
+
readonly projectBytes: number;
|
|
26
|
+
readonly projectSha256: string;
|
|
27
|
+
readonly diagnosticSummary: Readonly<Record<'info' | 'warning' | 'error', number>>;
|
|
28
|
+
readonly diagnostics: readonly MigrationDiagnostic[];
|
|
29
|
+
readonly entityMap: Readonly<Record<string, string>>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Migrates a serialized WebAV snapshot or Diffusion Studio Core checkpoint.
|
|
33
|
+
*
|
|
34
|
+
* The report is always written before returning. Strict failures never write a
|
|
35
|
+
* project file, while `strict: false` makes an explicitly lossy project
|
|
36
|
+
* available together with the full loss report.
|
|
37
|
+
*/
|
|
38
|
+
export declare function migrateProjectFile(options: MigrateProjectFileOptions): Promise<ProjectMigrationFileReport>;
|
|
39
|
+
//# sourceMappingURL=migrate-cli-lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cli-lib.d.ts","sourceRoot":"","sources":["../src/migrate-cli-lib.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,mBAAmB,EAIzB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,WAAW,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACnF,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD;AA2ED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,0BAA0B,CAAC,CA+CrC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, dirname, extname, resolve } from 'node:path';
|
|
4
|
+
import { migrateDiffusionCheckpoint, migrateWebAvProject, } from './migration.js';
|
|
5
|
+
function parseJson(source, path) {
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(source);
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
throw new TypeError(`${path} is not valid JSON`, { cause: error });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function object(value, path) {
|
|
14
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
15
|
+
throw new TypeError(`${path} must contain a JSON object`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function array(value, path) {
|
|
20
|
+
if (!Array.isArray(value))
|
|
21
|
+
throw new TypeError(`${path} must contain a JSON array`);
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
async function readJson(path) {
|
|
25
|
+
return parseJson(await readFile(path, 'utf8'), path);
|
|
26
|
+
}
|
|
27
|
+
async function atomicWrite(path, data) {
|
|
28
|
+
const absolute = resolve(path);
|
|
29
|
+
await mkdir(dirname(absolute), { recursive: true });
|
|
30
|
+
const temporary = `${absolute}.${process.pid.toString()}.${randomUUID()}.tmp`;
|
|
31
|
+
await writeFile(temporary, data, 'utf8');
|
|
32
|
+
await rename(temporary, absolute);
|
|
33
|
+
}
|
|
34
|
+
function defaultOutputPath(inputPath) {
|
|
35
|
+
const absolute = resolve(inputPath);
|
|
36
|
+
const extension = extname(absolute);
|
|
37
|
+
const stem = basename(absolute, extension);
|
|
38
|
+
return resolve(dirname(absolute), `${stem}.aelion.json`);
|
|
39
|
+
}
|
|
40
|
+
function defaultReportPath(inputPath) {
|
|
41
|
+
const absolute = resolve(inputPath);
|
|
42
|
+
const extension = extname(absolute);
|
|
43
|
+
const stem = basename(absolute, extension);
|
|
44
|
+
return resolve(dirname(absolute), `${stem}.migration-report.json`);
|
|
45
|
+
}
|
|
46
|
+
function assetArray(value, path) {
|
|
47
|
+
if (Array.isArray(value))
|
|
48
|
+
return array(value, path);
|
|
49
|
+
const container = object(value, path);
|
|
50
|
+
return array(container.assets, `${path}.assets`);
|
|
51
|
+
}
|
|
52
|
+
function migrate(source, input, assets) {
|
|
53
|
+
if (source === 'webav') {
|
|
54
|
+
const snapshot = object(input, 'input');
|
|
55
|
+
const withAssets = assets === undefined
|
|
56
|
+
? snapshot
|
|
57
|
+
: {
|
|
58
|
+
...snapshot,
|
|
59
|
+
assets: assetArray(assets, 'assets'),
|
|
60
|
+
};
|
|
61
|
+
return migrateWebAvProject(withAssets, { strict: false });
|
|
62
|
+
}
|
|
63
|
+
return migrateDiffusionCheckpoint(input, {
|
|
64
|
+
strict: false,
|
|
65
|
+
assets: assets === undefined
|
|
66
|
+
? []
|
|
67
|
+
: assetArray(assets, 'assets'),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Migrates a serialized WebAV snapshot or Diffusion Studio Core checkpoint.
|
|
72
|
+
*
|
|
73
|
+
* The report is always written before returning. Strict failures never write a
|
|
74
|
+
* project file, while `strict: false` makes an explicitly lossy project
|
|
75
|
+
* available together with the full loss report.
|
|
76
|
+
*/
|
|
77
|
+
export async function migrateProjectFile(options) {
|
|
78
|
+
const inputPath = resolve(options.inputPath);
|
|
79
|
+
const assetsPath = options.assetsPath === undefined ? undefined : resolve(options.assetsPath);
|
|
80
|
+
const outputPath = options.outputPath === undefined ? defaultOutputPath(inputPath) : resolve(options.outputPath);
|
|
81
|
+
const reportPath = options.reportPath === undefined ? defaultReportPath(inputPath) : resolve(options.reportPath);
|
|
82
|
+
const strict = options.strict ?? true;
|
|
83
|
+
const dryRun = options.dryRun ?? false;
|
|
84
|
+
const [input, assets] = await Promise.all([
|
|
85
|
+
readJson(inputPath),
|
|
86
|
+
assetsPath === undefined ? Promise.resolve(undefined) : readJson(assetsPath),
|
|
87
|
+
]);
|
|
88
|
+
const result = migrate(options.source, input, assets);
|
|
89
|
+
const projectSource = `${JSON.stringify(result.project, null, 2)}\n`;
|
|
90
|
+
const projectBytes = Buffer.byteLength(projectSource);
|
|
91
|
+
const projectSha256 = createHash('sha256').update(projectSource).digest('hex');
|
|
92
|
+
const diagnosticSummary = result.diagnostics.reduce((summary, diagnostic) => {
|
|
93
|
+
summary[diagnostic.severity] += 1;
|
|
94
|
+
return summary;
|
|
95
|
+
}, { info: 0, warning: 0, error: 0 });
|
|
96
|
+
const hasErrors = diagnosticSummary.error > 0;
|
|
97
|
+
const status = hasErrors ? (strict ? 'failed' : 'lossy') : 'passed';
|
|
98
|
+
if (!dryRun && status !== 'failed')
|
|
99
|
+
await atomicWrite(outputPath, projectSource);
|
|
100
|
+
const report = {
|
|
101
|
+
reportVersion: '1.0.0',
|
|
102
|
+
source: options.source,
|
|
103
|
+
inputPath,
|
|
104
|
+
...(assetsPath === undefined ? {} : { assetsPath }),
|
|
105
|
+
...(!dryRun && status !== 'failed' ? { outputPath } : {}),
|
|
106
|
+
reportPath,
|
|
107
|
+
strict,
|
|
108
|
+
dryRun,
|
|
109
|
+
status,
|
|
110
|
+
projectId: result.project.projectId,
|
|
111
|
+
projectBytes,
|
|
112
|
+
projectSha256,
|
|
113
|
+
diagnosticSummary,
|
|
114
|
+
diagnostics: result.diagnostics,
|
|
115
|
+
entityMap: result.entityMap,
|
|
116
|
+
};
|
|
117
|
+
await atomicWrite(reportPath, `${JSON.stringify(report, null, 2)}\n`);
|
|
118
|
+
return report;
|
|
119
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cli.d.ts","sourceRoot":"","sources":["../src/migrate-cli.ts"],"names":[],"mappings":""}
|