@depths/waves 0.1.0

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/dist/cli.mjs ADDED
@@ -0,0 +1,440 @@
1
+ import {
2
+ IRValidator,
3
+ WavesEngine,
4
+ __wavesVersion,
5
+ getPromptPayload
6
+ } from "./chunk-WGQITADJ.mjs";
7
+ import {
8
+ VideoIRSchema,
9
+ WavesRenderError,
10
+ __require,
11
+ globalRegistry,
12
+ registerBuiltInComponents,
13
+ zodSchemaToJsonSchema
14
+ } from "./chunk-TGAL5RQN.mjs";
15
+
16
+ // src/cli.ts
17
+ import fs from "fs/promises";
18
+ import path from "path";
19
+ var EXIT_OK = 0;
20
+ var EXIT_USAGE = 1;
21
+ var EXIT_VALIDATE = 2;
22
+ var EXIT_RENDER = 3;
23
+ var EXIT_IO = 4;
24
+ var EXIT_INTERNAL = 5;
25
+ function parseArgs(argv) {
26
+ const positionals = [];
27
+ const flags = {};
28
+ let command = null;
29
+ for (let i = 0; i < argv.length; i++) {
30
+ const arg = argv[i] ?? "";
31
+ if (!command && !arg.startsWith("-")) {
32
+ command = arg;
33
+ continue;
34
+ }
35
+ if (arg === "--") {
36
+ positionals.push(...argv.slice(i + 1));
37
+ break;
38
+ }
39
+ if (arg.startsWith("--")) {
40
+ const eq = arg.indexOf("=");
41
+ const key = (eq >= 0 ? arg.slice(2, eq) : arg.slice(2)).trim();
42
+ const hasInlineValue = eq >= 0;
43
+ const inlineValue = hasInlineValue ? arg.slice(eq + 1) : void 0;
44
+ const next = argv[i + 1];
45
+ const isBoolean = key === "help" || key === "pretty";
46
+ if (isBoolean) {
47
+ flags[key] = true;
48
+ continue;
49
+ }
50
+ const value = inlineValue ?? (next && !next.startsWith("-") ? (i++, next) : void 0);
51
+ if (value === void 0) {
52
+ flags[key] = true;
53
+ continue;
54
+ }
55
+ const existing = flags[key];
56
+ if (existing === void 0) {
57
+ flags[key] = value;
58
+ } else if (Array.isArray(existing)) {
59
+ existing.push(value);
60
+ } else {
61
+ flags[key] = [String(existing), value];
62
+ }
63
+ continue;
64
+ }
65
+ if (arg === "-h" || arg === "--help") {
66
+ flags.help = true;
67
+ continue;
68
+ }
69
+ if (arg === "-v" || arg === "--version") {
70
+ flags.version = true;
71
+ continue;
72
+ }
73
+ positionals.push(arg);
74
+ }
75
+ return { command, positionals, flags };
76
+ }
77
+ function formatHelp() {
78
+ return `waves v${__wavesVersion}
79
+
80
+ Usage:
81
+ waves <command> [options]
82
+
83
+ Commands:
84
+ prompt Print an agent-ready system prompt + schema payload
85
+ schema Print JSON Schemas for IR/components
86
+ write-ir Write a starter IR JSON file
87
+ validate Validate an IR JSON file
88
+ render Render MP4 from an IR JSON file
89
+
90
+ Options:
91
+ -h, --help Show help
92
+ -v, --version Show version
93
+ `;
94
+ }
95
+ function getFlagString(flags, key) {
96
+ const v = flags[key];
97
+ if (typeof v === "string") return v;
98
+ if (Array.isArray(v)) return String(v[v.length - 1]);
99
+ return void 0;
100
+ }
101
+ function getFlagStrings(flags, key) {
102
+ const v = flags[key];
103
+ if (typeof v === "string") return [v];
104
+ if (Array.isArray(v)) return v.map(String);
105
+ return [];
106
+ }
107
+ async function tryWriteOut(outPath, content) {
108
+ if (!outPath) return null;
109
+ try {
110
+ await fs.mkdir(path.dirname(outPath), { recursive: true });
111
+ await fs.writeFile(outPath, content, "utf-8");
112
+ return null;
113
+ } catch (err) {
114
+ return err instanceof Error ? err.message : String(err);
115
+ }
116
+ }
117
+ async function importRegistrationModules(modules) {
118
+ for (const m of modules) {
119
+ await import(m);
120
+ }
121
+ }
122
+ function stringifyJSON(value, pretty) {
123
+ return JSON.stringify(value, null, pretty ? 2 : 0) + "\n";
124
+ }
125
+ function collectComponentTypes(ir) {
126
+ const types = /* @__PURE__ */ new Set();
127
+ for (const scene of ir.scenes) {
128
+ walkComponent(scene, types);
129
+ }
130
+ return types;
131
+ }
132
+ function walkComponent(component, types) {
133
+ types.add(component.type);
134
+ const children = component.children;
135
+ if (children?.length) {
136
+ for (const child of children) {
137
+ walkComponent(child, types);
138
+ }
139
+ }
140
+ }
141
+ async function main(argv = process.argv.slice(2)) {
142
+ const parsed = parseArgs(argv);
143
+ if (parsed.flags.version) {
144
+ process.stdout.write(`${__wavesVersion}
145
+ `);
146
+ return EXIT_OK;
147
+ }
148
+ if (parsed.flags.help || !parsed.command) {
149
+ process.stdout.write(formatHelp());
150
+ return EXIT_OK;
151
+ }
152
+ if (parsed.command === "help") {
153
+ process.stdout.write(formatHelp());
154
+ return EXIT_OK;
155
+ }
156
+ const outPath = getFlagString(parsed.flags, "out");
157
+ const pretty = Boolean(parsed.flags.pretty);
158
+ const registrationModules = getFlagStrings(parsed.flags, "register");
159
+ try {
160
+ await importRegistrationModules(registrationModules);
161
+ } catch (err) {
162
+ const message = err instanceof Error ? err.message : String(err);
163
+ process.stderr.write(`Failed to import --register module: ${message}
164
+ `);
165
+ return EXIT_USAGE;
166
+ }
167
+ registerBuiltInComponents();
168
+ if (parsed.command === "prompt") {
169
+ const format = (getFlagString(parsed.flags, "format") ?? "text").toLowerCase();
170
+ const maxCharsRaw = getFlagString(parsed.flags, "maxChars");
171
+ const maxChars = maxCharsRaw ? Number(maxCharsRaw) : void 0;
172
+ const payload = getPromptPayload({ registry: globalRegistry });
173
+ if (format === "json") {
174
+ const json = stringifyJSON(payload, pretty);
175
+ const writeErr = await tryWriteOut(outPath, json);
176
+ if (writeErr) {
177
+ process.stderr.write(`Failed to write ${outPath}: ${writeErr}
178
+ `);
179
+ process.stdout.write(json);
180
+ return EXIT_IO;
181
+ }
182
+ process.stdout.write(json);
183
+ if (outPath) process.stderr.write(`Wrote ${outPath}
184
+ `);
185
+ return EXIT_OK;
186
+ }
187
+ if (format === "text") {
188
+ const text = typeof maxChars === "number" && Number.isFinite(maxChars) && maxChars > 0 ? payload.systemPrompt.slice(0, maxChars) : payload.systemPrompt;
189
+ const out = text.endsWith("\n") ? text : `${text}
190
+ `;
191
+ const writeErr = await tryWriteOut(outPath, out);
192
+ if (writeErr) {
193
+ process.stderr.write(`Failed to write ${outPath}: ${writeErr}
194
+ `);
195
+ process.stdout.write(out);
196
+ return EXIT_IO;
197
+ }
198
+ process.stdout.write(out);
199
+ if (outPath) process.stderr.write(`Wrote ${outPath}
200
+ `);
201
+ return EXIT_OK;
202
+ }
203
+ process.stderr.write(`Invalid --format: ${format} (expected "text" or "json")
204
+ `);
205
+ return EXIT_USAGE;
206
+ }
207
+ if (parsed.command === "schema") {
208
+ const kind = (getFlagString(parsed.flags, "kind") ?? "all").toLowerCase();
209
+ let output;
210
+ if (kind === "video-ir") {
211
+ output = zodSchemaToJsonSchema(VideoIRSchema);
212
+ } else if (kind === "components") {
213
+ output = globalRegistry.getJSONSchemaForLLM();
214
+ } else if (kind === "all") {
215
+ output = {
216
+ videoIR: zodSchemaToJsonSchema(VideoIRSchema),
217
+ components: globalRegistry.getJSONSchemaForLLM()
218
+ };
219
+ } else {
220
+ process.stderr.write(`Invalid --kind: ${kind} (expected video-ir|components|all)
221
+ `);
222
+ return EXIT_USAGE;
223
+ }
224
+ const json = stringifyJSON(output, pretty);
225
+ const writeErr = await tryWriteOut(outPath, json);
226
+ if (writeErr) {
227
+ process.stderr.write(`Failed to write ${outPath}: ${writeErr}
228
+ `);
229
+ process.stdout.write(json);
230
+ return EXIT_IO;
231
+ }
232
+ process.stdout.write(json);
233
+ if (outPath) process.stderr.write(`Wrote ${outPath}
234
+ `);
235
+ return EXIT_OK;
236
+ }
237
+ if (parsed.command === "write-ir") {
238
+ const template = (getFlagString(parsed.flags, "template") ?? "minimal").toLowerCase();
239
+ const out = outPath;
240
+ if (!out) {
241
+ process.stderr.write("Missing required --out <path>\n");
242
+ return EXIT_USAGE;
243
+ }
244
+ const ir = template === "basic" ? {
245
+ version: "1.0",
246
+ video: { id: "main", width: 1920, height: 1080, fps: 30, durationInFrames: 90 },
247
+ scenes: [
248
+ {
249
+ id: "scene-1",
250
+ type: "Scene",
251
+ timing: { from: 0, durationInFrames: 90 },
252
+ props: { background: { type: "color", value: "#000000" } },
253
+ children: [
254
+ {
255
+ id: "title",
256
+ type: "Text",
257
+ timing: { from: 0, durationInFrames: 90 },
258
+ props: { content: "Hello Waves", fontSize: 72, animation: "fade" }
259
+ }
260
+ ]
261
+ }
262
+ ]
263
+ } : template === "minimal" ? {
264
+ version: "1.0",
265
+ video: { id: "main", width: 1920, height: 1080, fps: 30, durationInFrames: 60 },
266
+ scenes: [
267
+ {
268
+ id: "scene-1",
269
+ type: "Scene",
270
+ timing: { from: 0, durationInFrames: 60 },
271
+ props: { background: { type: "color", value: "#000000" } }
272
+ }
273
+ ]
274
+ } : null;
275
+ if (!ir) {
276
+ process.stderr.write(`Invalid --template: ${template} (expected minimal|basic)
277
+ `);
278
+ return EXIT_USAGE;
279
+ }
280
+ const schemaCheck = VideoIRSchema.safeParse(ir);
281
+ if (!schemaCheck.success) {
282
+ process.stderr.write("Internal error: generated template does not validate against VideoIRSchema\n");
283
+ return EXIT_INTERNAL;
284
+ }
285
+ const json = stringifyJSON(ir, pretty);
286
+ const writeErr = await tryWriteOut(out, json);
287
+ if (writeErr) {
288
+ process.stderr.write(`Failed to write ${out}: ${writeErr}
289
+ `);
290
+ return EXIT_IO;
291
+ }
292
+ process.stdout.write(json);
293
+ process.stderr.write(`Wrote ${out}
294
+ `);
295
+ return EXIT_OK;
296
+ }
297
+ if (parsed.command === "validate") {
298
+ const inputPath = getFlagString(parsed.flags, "in");
299
+ if (!inputPath) {
300
+ process.stderr.write("Missing required --in <path>\n");
301
+ return EXIT_USAGE;
302
+ }
303
+ const format = (getFlagString(parsed.flags, "format") ?? "text").toLowerCase();
304
+ if (format !== "text" && format !== "json") {
305
+ process.stderr.write(`Invalid --format: ${format} (expected "text" or "json")
306
+ `);
307
+ return EXIT_USAGE;
308
+ }
309
+ let raw;
310
+ try {
311
+ raw = await fs.readFile(inputPath, "utf-8");
312
+ } catch (err) {
313
+ const message = err instanceof Error ? err.message : String(err);
314
+ process.stderr.write(`Failed to read ${inputPath}: ${message}
315
+ `);
316
+ return EXIT_IO;
317
+ }
318
+ let json;
319
+ try {
320
+ json = JSON.parse(raw);
321
+ } catch (err) {
322
+ const message = err instanceof Error ? err.message : String(err);
323
+ if (format === "json") {
324
+ process.stdout.write(
325
+ stringifyJSON(
326
+ { success: false, errors: [{ path: ["<file>"], message, code: "INVALID_JSON" }] },
327
+ pretty
328
+ )
329
+ );
330
+ } else {
331
+ process.stderr.write(`Invalid JSON: ${message}
332
+ `);
333
+ }
334
+ return EXIT_VALIDATE;
335
+ }
336
+ const validator = new IRValidator();
337
+ const result = validator.validate(json);
338
+ const errors = result.success ? [] : result.errors;
339
+ if (result.success) {
340
+ const types = collectComponentTypes(result.data);
341
+ const unknownTypes = [...types].filter((t) => !globalRegistry.has(t)).sort();
342
+ for (const t of unknownTypes) {
343
+ errors.push({
344
+ path: ["components", t],
345
+ message: `Unknown component type: ${t}`,
346
+ code: "UNKNOWN_COMPONENT_TYPE"
347
+ });
348
+ }
349
+ }
350
+ const ok = errors.length === 0;
351
+ if (format === "json") {
352
+ process.stdout.write(stringifyJSON(ok ? { success: true } : { success: false, errors }, pretty));
353
+ } else {
354
+ if (ok) {
355
+ process.stdout.write("ok\n");
356
+ } else {
357
+ process.stderr.write("validation failed\n");
358
+ for (const e of errors) {
359
+ process.stderr.write(`- ${e.code} ${e.path.join(".")}: ${e.message}
360
+ `);
361
+ }
362
+ }
363
+ }
364
+ return ok ? EXIT_OK : EXIT_VALIDATE;
365
+ }
366
+ if (parsed.command === "render") {
367
+ const inputPath = getFlagString(parsed.flags, "in");
368
+ const outputPath = outPath;
369
+ if (!inputPath) {
370
+ process.stderr.write("Missing required --in <path>\n");
371
+ return EXIT_USAGE;
372
+ }
373
+ if (!outputPath) {
374
+ process.stderr.write("Missing required --out <path>\n");
375
+ return EXIT_USAGE;
376
+ }
377
+ let raw;
378
+ try {
379
+ raw = await fs.readFile(inputPath, "utf-8");
380
+ } catch (err) {
381
+ const message = err instanceof Error ? err.message : String(err);
382
+ process.stderr.write(`Failed to read ${inputPath}: ${message}
383
+ `);
384
+ return EXIT_IO;
385
+ }
386
+ let json;
387
+ try {
388
+ json = JSON.parse(raw);
389
+ } catch (err) {
390
+ const message = err instanceof Error ? err.message : String(err);
391
+ process.stderr.write(`Invalid JSON: ${message}
392
+ `);
393
+ return EXIT_VALIDATE;
394
+ }
395
+ const codec = getFlagString(parsed.flags, "codec");
396
+ const crfRaw = getFlagString(parsed.flags, "crf");
397
+ const concurrencyRaw = getFlagString(parsed.flags, "concurrency");
398
+ const publicDir = getFlagString(parsed.flags, "publicDir");
399
+ const crf = crfRaw ? Number(crfRaw) : void 0;
400
+ const concurrency = concurrencyRaw ? /^[0-9]+$/.test(concurrencyRaw) ? Number(concurrencyRaw) : concurrencyRaw : void 0;
401
+ const engine = new WavesEngine(globalRegistry, new IRValidator());
402
+ try {
403
+ const opts = { outputPath, registrationModules };
404
+ if (publicDir) opts.publicDir = publicDir;
405
+ if (codec) opts.codec = codec;
406
+ if (Number.isFinite(crf ?? Number.NaN)) opts.crf = crf;
407
+ if (concurrency !== void 0) opts.concurrency = concurrency;
408
+ await engine.render(json, opts);
409
+ } catch (err) {
410
+ const message = err instanceof Error ? err.message : String(err);
411
+ const context = err instanceof WavesRenderError ? err.context : void 0;
412
+ const payload = context ? stringifyJSON({ error: message, context }, pretty) : null;
413
+ process.stderr.write(`render failed: ${message}
414
+ `);
415
+ if (payload) process.stderr.write(payload);
416
+ return EXIT_RENDER;
417
+ }
418
+ process.stderr.write(`Rendered ${outputPath}
419
+ `);
420
+ return EXIT_OK;
421
+ }
422
+ process.stderr.write(`Unknown command: ${parsed.command}
423
+ `);
424
+ process.stderr.write(`Run: waves --help
425
+ `);
426
+ return EXIT_USAGE;
427
+ }
428
+ var req = typeof __require !== "undefined" ? __require : void 0;
429
+ var isCjsMain = typeof req !== "undefined" && typeof module !== "undefined" && req.main === module;
430
+ if (isCjsMain) {
431
+ main().then((code) => process.exit(code)).catch((err) => {
432
+ const message = err instanceof Error ? err.stack ?? err.message : String(err);
433
+ process.stderr.write(`${message}
434
+ `);
435
+ process.exit(EXIT_INTERNAL);
436
+ });
437
+ }
438
+ export {
439
+ main
440
+ };
@@ -0,0 +1,89 @@
1
+ import { V as VideoIR, C as ComponentRegistry } from './registry-hVIyqwS6.mjs';
2
+ export { A as AssetPathSchema, a as AudioComponentIRSchema, b as AudioIR, B as BackgroundSpec, c as BackgroundSpecSchema, d as BaseComponentIR, e as BaseComponentIRSchema, f as ComponentIR, g as ComponentIRSchema, h as ComponentSchemas, S as SceneComponentIRSchema, i as SceneIR, T as TextComponentIRSchema, j as TextIR, k as TimingSpec, l as TimingSpecSchema, m as VideoIRSchema, n as globalRegistry, r as registerBuiltInComponents } from './registry-hVIyqwS6.mjs';
3
+ import 'zod';
4
+ import 'react';
5
+
6
+ declare const __wavesVersion = "0.1.0";
7
+
8
+ interface ValidationError {
9
+ path: string[];
10
+ message: string;
11
+ code: string;
12
+ }
13
+ interface ValidationResult {
14
+ success: boolean;
15
+ errors?: ValidationError[];
16
+ }
17
+ declare class IRValidator {
18
+ validateSchema(ir: unknown): {
19
+ success: true;
20
+ data: VideoIR;
21
+ } | {
22
+ success: false;
23
+ errors: ValidationError[];
24
+ };
25
+ validateSemantics(ir: VideoIR): ValidationResult;
26
+ validate(ir: unknown): {
27
+ success: true;
28
+ data: VideoIR;
29
+ } | {
30
+ success: false;
31
+ errors: ValidationError[];
32
+ };
33
+ private validateComponentTimingRecursive;
34
+ }
35
+
36
+ interface RenderOptions {
37
+ outputPath: string;
38
+ codec?: 'h264' | 'h265' | 'vp8' | 'vp9';
39
+ crf?: number;
40
+ concurrency?: number | string;
41
+ publicDir?: string;
42
+ rootDir?: string;
43
+ registrationModules?: string[];
44
+ }
45
+ declare class WavesEngine {
46
+ private readonly registry;
47
+ private readonly validator;
48
+ constructor(registry: ComponentRegistry, validator: IRValidator);
49
+ render(ir: unknown, options: RenderOptions): Promise<void>;
50
+ }
51
+
52
+ declare class WavesError extends Error {
53
+ readonly context?: Record<string, unknown> | undefined;
54
+ constructor(message: string, context?: Record<string, unknown> | undefined);
55
+ }
56
+ declare class WavesValidationError extends WavesError {
57
+ constructor(message: string, context?: Record<string, unknown>);
58
+ }
59
+ declare class WavesRenderError extends WavesError {
60
+ constructor(message: string, context?: Record<string, unknown>);
61
+ }
62
+
63
+ type PromptPayload = {
64
+ package: '@depths/waves';
65
+ version: string;
66
+ irVersion: '1.0';
67
+ systemPrompt: string;
68
+ schemas: {
69
+ videoIR: Record<string, unknown>;
70
+ components: Record<string, unknown>;
71
+ };
72
+ rules: {
73
+ timing: string[];
74
+ assets: string[];
75
+ ids: string[];
76
+ output: string[];
77
+ };
78
+ };
79
+ declare function getSystemPrompt(registeredTypes: string[]): string;
80
+ declare function getPromptPayload(options?: {
81
+ registry?: ComponentRegistry;
82
+ }): PromptPayload;
83
+
84
+ declare function renderVideo(ir: unknown, options: {
85
+ outputPath: string;
86
+ publicDir?: string;
87
+ }): Promise<void>;
88
+
89
+ export { ComponentRegistry, IRValidator, type PromptPayload, VideoIR, WavesEngine, WavesError, WavesRenderError, WavesValidationError, __wavesVersion, getPromptPayload, getSystemPrompt, renderVideo };
@@ -0,0 +1,89 @@
1
+ import { V as VideoIR, C as ComponentRegistry } from './registry-hVIyqwS6.js';
2
+ export { A as AssetPathSchema, a as AudioComponentIRSchema, b as AudioIR, B as BackgroundSpec, c as BackgroundSpecSchema, d as BaseComponentIR, e as BaseComponentIRSchema, f as ComponentIR, g as ComponentIRSchema, h as ComponentSchemas, S as SceneComponentIRSchema, i as SceneIR, T as TextComponentIRSchema, j as TextIR, k as TimingSpec, l as TimingSpecSchema, m as VideoIRSchema, n as globalRegistry, r as registerBuiltInComponents } from './registry-hVIyqwS6.js';
3
+ import 'zod';
4
+ import 'react';
5
+
6
+ declare const __wavesVersion = "0.1.0";
7
+
8
+ interface ValidationError {
9
+ path: string[];
10
+ message: string;
11
+ code: string;
12
+ }
13
+ interface ValidationResult {
14
+ success: boolean;
15
+ errors?: ValidationError[];
16
+ }
17
+ declare class IRValidator {
18
+ validateSchema(ir: unknown): {
19
+ success: true;
20
+ data: VideoIR;
21
+ } | {
22
+ success: false;
23
+ errors: ValidationError[];
24
+ };
25
+ validateSemantics(ir: VideoIR): ValidationResult;
26
+ validate(ir: unknown): {
27
+ success: true;
28
+ data: VideoIR;
29
+ } | {
30
+ success: false;
31
+ errors: ValidationError[];
32
+ };
33
+ private validateComponentTimingRecursive;
34
+ }
35
+
36
+ interface RenderOptions {
37
+ outputPath: string;
38
+ codec?: 'h264' | 'h265' | 'vp8' | 'vp9';
39
+ crf?: number;
40
+ concurrency?: number | string;
41
+ publicDir?: string;
42
+ rootDir?: string;
43
+ registrationModules?: string[];
44
+ }
45
+ declare class WavesEngine {
46
+ private readonly registry;
47
+ private readonly validator;
48
+ constructor(registry: ComponentRegistry, validator: IRValidator);
49
+ render(ir: unknown, options: RenderOptions): Promise<void>;
50
+ }
51
+
52
+ declare class WavesError extends Error {
53
+ readonly context?: Record<string, unknown> | undefined;
54
+ constructor(message: string, context?: Record<string, unknown> | undefined);
55
+ }
56
+ declare class WavesValidationError extends WavesError {
57
+ constructor(message: string, context?: Record<string, unknown>);
58
+ }
59
+ declare class WavesRenderError extends WavesError {
60
+ constructor(message: string, context?: Record<string, unknown>);
61
+ }
62
+
63
+ type PromptPayload = {
64
+ package: '@depths/waves';
65
+ version: string;
66
+ irVersion: '1.0';
67
+ systemPrompt: string;
68
+ schemas: {
69
+ videoIR: Record<string, unknown>;
70
+ components: Record<string, unknown>;
71
+ };
72
+ rules: {
73
+ timing: string[];
74
+ assets: string[];
75
+ ids: string[];
76
+ output: string[];
77
+ };
78
+ };
79
+ declare function getSystemPrompt(registeredTypes: string[]): string;
80
+ declare function getPromptPayload(options?: {
81
+ registry?: ComponentRegistry;
82
+ }): PromptPayload;
83
+
84
+ declare function renderVideo(ir: unknown, options: {
85
+ outputPath: string;
86
+ publicDir?: string;
87
+ }): Promise<void>;
88
+
89
+ export { ComponentRegistry, IRValidator, type PromptPayload, VideoIR, WavesEngine, WavesError, WavesRenderError, WavesValidationError, __wavesVersion, getPromptPayload, getSystemPrompt, renderVideo };