@velumo/compiler 0.1.0-beta.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.
@@ -0,0 +1,21 @@
1
+ import type { VelumoConfig, Manifest } from "@velumo/core";
2
+ export declare class DeckCompilerError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export interface DeckValidationResult {
6
+ readonly valid: boolean;
7
+ readonly errors: readonly string[];
8
+ readonly warnings: readonly string[];
9
+ }
10
+ export interface LoadedVelumoConfig {
11
+ readonly configPath: string;
12
+ readonly projectRoot: string;
13
+ readonly config: VelumoConfig;
14
+ readonly entryPath?: string;
15
+ readonly outDir?: string;
16
+ }
17
+ export declare function compileDeck(entryPath: string): Promise<Manifest>;
18
+ export declare function loadConfig(configPath: string): Promise<LoadedVelumoConfig>;
19
+ export declare function validateDeck(entryPath: string): Promise<DeckValidationResult>;
20
+ export declare function compileMarkdownDeck(entryPath: string): Promise<Manifest>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,YAAY,EAGZ,QAAQ,EAET,MAAM,cAAc,CAAC;AAGtB,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgGD,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqBtE;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CA2D7B;AAgLD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AA+QD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAAC,CAqCnB"}
package/dist/index.js ADDED
@@ -0,0 +1,494 @@
1
+ import { createHash } from "node:crypto";
2
+ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { dirname, extname, isAbsolute, relative, resolve } from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import ts from "typescript";
6
+ import { deck, markdown, scene, slide, validateManifest } from "@velumo/core";
7
+ export class DeckCompilerError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "DeckCompilerError";
11
+ }
12
+ }
13
+ function compilerCacheRoot() {
14
+ return resolve(process.cwd(), "node_modules", ".cache", "velumo", "compiler");
15
+ }
16
+ function cachePathForEntry(entryPath, source) {
17
+ const hash = createHash("sha256")
18
+ .update(entryPath)
19
+ .update("\0")
20
+ .update(source)
21
+ .digest("hex");
22
+ return resolve(compilerCacheRoot(), `${hash}.mjs`);
23
+ }
24
+ function transpileEntry(entryPath, source) {
25
+ const output = ts.transpileModule(source, {
26
+ fileName: entryPath,
27
+ compilerOptions: {
28
+ target: ts.ScriptTarget.ES2022,
29
+ module: ts.ModuleKind.ES2022,
30
+ moduleResolution: ts.ModuleResolutionKind.NodeNext,
31
+ esModuleInterop: true,
32
+ strict: true,
33
+ },
34
+ });
35
+ return output.outputText;
36
+ }
37
+ function selectDeckExport(moduleExports) {
38
+ if (Object.hasOwn(moduleExports, "default")) {
39
+ return moduleExports.default;
40
+ }
41
+ return moduleExports.deck;
42
+ }
43
+ function selectConfigExport(moduleExports) {
44
+ return Object.hasOwn(moduleExports, "default")
45
+ ? moduleExports.default
46
+ : undefined;
47
+ }
48
+ async function importTranspiledModule(entryPath, source) {
49
+ const compiledPath = cachePathForEntry(entryPath, source);
50
+ await mkdir(dirname(compiledPath), { recursive: true });
51
+ await writeFile(compiledPath, transpileEntry(entryPath, source));
52
+ return import(pathToFileURL(compiledPath).href);
53
+ }
54
+ function isPreservedAssetSource(src) {
55
+ return (isAbsolute(src) ||
56
+ src.startsWith("/") ||
57
+ src.startsWith("http://") ||
58
+ src.startsWith("https://") ||
59
+ src.startsWith("data:") ||
60
+ src.startsWith("blob:"));
61
+ }
62
+ function resolveAssetSource(entryPath, asset) {
63
+ if (isPreservedAssetSource(asset.src)) {
64
+ return asset;
65
+ }
66
+ return {
67
+ ...asset,
68
+ src: resolve(dirname(entryPath), asset.src),
69
+ };
70
+ }
71
+ function resolveRelativeAssets(manifest, entryPath) {
72
+ if (manifest.assets === undefined) {
73
+ return manifest;
74
+ }
75
+ return {
76
+ ...manifest,
77
+ assets: manifest.assets.map((asset) => resolveAssetSource(entryPath, asset)),
78
+ };
79
+ }
80
+ export async function compileDeck(entryPath) {
81
+ const resolvedEntryPath = resolve(entryPath);
82
+ let source;
83
+ try {
84
+ source = await readFile(resolvedEntryPath, "utf8");
85
+ }
86
+ catch {
87
+ throw new DeckCompilerError(`deck entry not found: ${resolvedEntryPath}`);
88
+ }
89
+ const moduleExports = await importTranspiledModule(resolvedEntryPath, source);
90
+ const candidate = selectDeckExport(moduleExports);
91
+ const validation = validateManifest(candidate);
92
+ if (!validation.valid) {
93
+ throw new DeckCompilerError(`invalid deck export: ${validation.errors.join("; ")}`);
94
+ }
95
+ return resolveRelativeAssets(candidate, resolvedEntryPath);
96
+ }
97
+ export async function loadConfig(configPath) {
98
+ const resolvedConfigPath = resolve(configPath);
99
+ let source;
100
+ try {
101
+ source = await readFile(resolvedConfigPath, "utf8");
102
+ }
103
+ catch {
104
+ throw new DeckCompilerError(`config not found: ${resolvedConfigPath}`);
105
+ }
106
+ const moduleExports = await importTranspiledModule(resolvedConfigPath, source);
107
+ const candidate = selectConfigExport(moduleExports);
108
+ if (!isRecord(candidate)) {
109
+ throw new DeckCompilerError(`invalid config default export: ${resolvedConfigPath}`);
110
+ }
111
+ const projectRoot = dirname(resolvedConfigPath);
112
+ const entry = candidate.entry;
113
+ const outDir = candidate.outDir;
114
+ const runtime = candidate.runtime;
115
+ const exportOptions = candidate.export;
116
+ if (entry !== undefined && typeof entry !== "string") {
117
+ throw new DeckCompilerError(`invalid config field "entry" in ${resolvedConfigPath}`);
118
+ }
119
+ if (outDir !== undefined && typeof outDir !== "string") {
120
+ throw new DeckCompilerError(`invalid config field "outDir" in ${resolvedConfigPath}`);
121
+ }
122
+ if (runtime !== undefined && !isRecord(runtime)) {
123
+ throw new DeckCompilerError(`invalid config field "runtime" in ${resolvedConfigPath}`);
124
+ }
125
+ if (exportOptions !== undefined && !isRecord(exportOptions)) {
126
+ throw new DeckCompilerError(`invalid config field "export" in ${resolvedConfigPath}`);
127
+ }
128
+ return {
129
+ configPath: resolvedConfigPath,
130
+ projectRoot,
131
+ config: candidate,
132
+ ...(entry === undefined ? {} : { entryPath: resolve(projectRoot, entry) }),
133
+ ...(outDir === undefined ? {} : { outDir: resolve(projectRoot, outDir) }),
134
+ };
135
+ }
136
+ const knownLayerTypes = new Set([
137
+ "html",
138
+ "markdown",
139
+ "canvas2d",
140
+ "three",
141
+ "hud",
142
+ "fx",
143
+ "audio",
144
+ "video",
145
+ "debug",
146
+ ]);
147
+ function isRecord(value) {
148
+ return typeof value === "object" && value !== null && !Array.isArray(value);
149
+ }
150
+ function isPathInside(parentPath, candidatePath) {
151
+ const relativePath = relative(parentPath, candidatePath);
152
+ return (relativePath === "" ||
153
+ (!relativePath.startsWith("..") && !isAbsolute(relativePath)));
154
+ }
155
+ function isSkippedAssetSource(src, entryPath) {
156
+ return (src.startsWith("http://") ||
157
+ src.startsWith("https://") ||
158
+ src.startsWith("data:") ||
159
+ src.startsWith("blob:") ||
160
+ (src.startsWith("/") && !isPathInside(dirname(entryPath), src)));
161
+ }
162
+ async function loadManifestForValidation(entryPath) {
163
+ const extension = extname(entryPath);
164
+ if (extension === ".ts" || extension === ".tsx") {
165
+ return compileDeck(entryPath);
166
+ }
167
+ if (extension === ".md" || extension === ".markdown") {
168
+ return compileMarkdownDeck(entryPath);
169
+ }
170
+ if (extension !== ".json") {
171
+ throw new DeckCompilerError(`unsupported deck entry extension: ${extension}`);
172
+ }
173
+ try {
174
+ return JSON.parse(await readFile(entryPath, "utf8"));
175
+ }
176
+ catch (error) {
177
+ if (error instanceof SyntaxError) {
178
+ throw new DeckCompilerError(`invalid JSON manifest: ${entryPath}`);
179
+ }
180
+ throw new DeckCompilerError(`deck entry not found: ${entryPath}`);
181
+ }
182
+ }
183
+ function collectValidationWarnings(manifest) {
184
+ const warnings = [];
185
+ if (!Array.isArray(manifest.slides)) {
186
+ return warnings;
187
+ }
188
+ manifest.slides.forEach((slideEntry, slideIndex) => {
189
+ if (!isRecord(slideEntry) || !Array.isArray(slideEntry.layers)) {
190
+ return;
191
+ }
192
+ slideEntry.layers?.forEach((layerEntry, layerIndex) => {
193
+ if (!isRecord(layerEntry) || typeof layerEntry.type !== "string") {
194
+ return;
195
+ }
196
+ if (!knownLayerTypes.has(layerEntry.type)) {
197
+ warnings.push(`unknown layer type: ${layerEntry.type} at slides[${slideIndex}].layers[${layerIndex}]`);
198
+ }
199
+ });
200
+ });
201
+ return warnings;
202
+ }
203
+ function collectCompilerValidationErrors(manifest) {
204
+ const errors = [];
205
+ const seenSlideIds = new Set();
206
+ if (!Array.isArray(manifest.slides)) {
207
+ return errors;
208
+ }
209
+ if (manifest.slides.length === 0) {
210
+ errors.push("slides must contain at least one slide or scene");
211
+ }
212
+ manifest.slides.forEach((slideEntry, slideIndex) => {
213
+ if (!isRecord(slideEntry)) {
214
+ return;
215
+ }
216
+ if (typeof slideEntry.id !== "string") {
217
+ return;
218
+ }
219
+ if (seenSlideIds.has(slideEntry.id)) {
220
+ errors.push(`duplicate slide id: ${slideEntry.id}`);
221
+ }
222
+ seenSlideIds.add(slideEntry.id);
223
+ if (!Array.isArray(slideEntry.cues)) {
224
+ return;
225
+ }
226
+ slideEntry.cues.forEach((cueEntry, cueIndex) => {
227
+ if (!isRecord(cueEntry)) {
228
+ return;
229
+ }
230
+ if (typeof cueEntry.time !== "number" ||
231
+ !Number.isFinite(cueEntry.time)) {
232
+ errors.push(`slides[${slideIndex}].cues[${cueIndex}].time must be a finite number`);
233
+ }
234
+ });
235
+ });
236
+ return errors;
237
+ }
238
+ async function collectAssetErrors(manifest, entryPath) {
239
+ const errors = [];
240
+ if (!Array.isArray(manifest.assets)) {
241
+ return errors;
242
+ }
243
+ for (const assetEntry of manifest.assets) {
244
+ if (!isRecord(assetEntry) || typeof assetEntry.src !== "string") {
245
+ continue;
246
+ }
247
+ if (isSkippedAssetSource(assetEntry.src, entryPath)) {
248
+ continue;
249
+ }
250
+ const assetPath = isAbsolute(assetEntry.src)
251
+ ? assetEntry.src
252
+ : resolve(dirname(entryPath), assetEntry.src);
253
+ try {
254
+ await access(assetPath);
255
+ }
256
+ catch {
257
+ errors.push(`missing asset: ${assetEntry.src}`);
258
+ }
259
+ }
260
+ return errors;
261
+ }
262
+ export async function validateDeck(entryPath) {
263
+ const resolvedEntryPath = resolve(entryPath);
264
+ try {
265
+ const manifest = await loadManifestForValidation(resolvedEntryPath);
266
+ const baseline = validateManifest(manifest);
267
+ const errors = [
268
+ ...baseline.errors,
269
+ ...collectCompilerValidationErrors(manifest),
270
+ ...(await collectAssetErrors(manifest, resolvedEntryPath)),
271
+ ];
272
+ const warnings = collectValidationWarnings(manifest);
273
+ return {
274
+ valid: errors.length === 0,
275
+ errors,
276
+ warnings,
277
+ };
278
+ }
279
+ catch (error) {
280
+ return {
281
+ valid: false,
282
+ errors: [
283
+ error instanceof Error ? error.message : "unknown validation error",
284
+ ],
285
+ warnings: [],
286
+ };
287
+ }
288
+ }
289
+ function parseFrontmatter(lines) {
290
+ if (lines[0]?.text.trim() !== "---") {
291
+ return { metadata: {}, bodyStartIndex: 0 };
292
+ }
293
+ const endIndex = lines.findIndex((line, index) => index > 0 && line.text.trim() === "---");
294
+ if (endIndex === -1) {
295
+ throw new DeckCompilerError("frontmatter starting on line 1 is not closed");
296
+ }
297
+ return {
298
+ metadata: parseFrontmatterLines(lines.slice(1, endIndex)),
299
+ bodyStartIndex: endIndex + 1,
300
+ };
301
+ }
302
+ function parseFrontmatterLines(lines) {
303
+ const metadata = {};
304
+ for (const line of lines) {
305
+ const separatorIndex = line.text.indexOf(":");
306
+ if (separatorIndex > 0) {
307
+ metadata[line.text.slice(0, separatorIndex).trim()] = line.text
308
+ .slice(separatorIndex + 1)
309
+ .trim();
310
+ }
311
+ }
312
+ return metadata;
313
+ }
314
+ function splitSlideSections(lines, startIndex) {
315
+ const sections = [];
316
+ let sectionLines = [];
317
+ let startLine = lines[startIndex]?.number ?? 1;
318
+ for (const line of lines.slice(startIndex)) {
319
+ if (line.text.trim() === "---") {
320
+ sections.push({ lines: sectionLines, startLine });
321
+ sectionLines = [];
322
+ startLine = line.number + 1;
323
+ continue;
324
+ }
325
+ sectionLines.push(line);
326
+ }
327
+ sections.push({ lines: sectionLines, startLine });
328
+ return sections;
329
+ }
330
+ function trimLines(lines) {
331
+ let start = 0;
332
+ let end = lines.length;
333
+ while (start < end && lines[start].text.trim() === "") {
334
+ start += 1;
335
+ }
336
+ while (end > start && lines[end - 1].text.trim() === "") {
337
+ end -= 1;
338
+ }
339
+ return lines.slice(start, end);
340
+ }
341
+ function textFromLines(lines) {
342
+ return trimLines(lines)
343
+ .map((line) => line.text)
344
+ .join("\n");
345
+ }
346
+ function firstHeading(lines) {
347
+ return lines.find((line) => /^# (.+)$/.test(line.text));
348
+ }
349
+ function slugFromHeading(heading) {
350
+ return heading
351
+ .replace(/^#\s+/, "")
352
+ .trim()
353
+ .toLowerCase()
354
+ .replace(/[^a-z0-9]+/g, "-")
355
+ .replace(/^-+|-+$/g, "");
356
+ }
357
+ function parseDirectiveAttributes(source) {
358
+ const attributes = {};
359
+ for (const match of source.matchAll(/([A-Za-z0-9_-]+)="([^"]*)"/g)) {
360
+ attributes[match[1]] = match[2];
361
+ }
362
+ return attributes;
363
+ }
364
+ function readDirectiveBlock(lines, startIndex, name) {
365
+ const contentLines = [];
366
+ for (let index = startIndex + 1; index < lines.length; index += 1) {
367
+ if (lines[index].text.trim() === ":::") {
368
+ return {
369
+ content: textFromLines(contentLines),
370
+ endIndex: index,
371
+ };
372
+ }
373
+ contentLines.push(lines[index]);
374
+ }
375
+ throw new DeckCompilerError(`${name} directive starting on line ${lines[startIndex].number} is not closed`);
376
+ }
377
+ function parseSceneSection(section, lines) {
378
+ const openingLine = lines[0];
379
+ const attributes = parseDirectiveAttributes(openingLine.text);
380
+ const block = readDirectiveBlock(lines, 0, "scene");
381
+ const contentLines = block.content.split("\n").map((text, index) => ({
382
+ text,
383
+ number: openingLine.number + 1 + index,
384
+ }));
385
+ const heading = firstHeading(contentLines);
386
+ if (!heading) {
387
+ throw new DeckCompilerError(`empty slide starting on line ${section.startLine}`);
388
+ }
389
+ const content = textFromLines(contentLines);
390
+ const duration = attributes.duration === undefined ? undefined : Number(attributes.duration);
391
+ if (duration !== undefined && !Number.isFinite(duration)) {
392
+ throw new DeckCompilerError(`scene duration on line ${openingLine.number} must be a finite number`);
393
+ }
394
+ return scene(slugFromHeading(heading.text), {
395
+ ...(duration === undefined ? {} : { duration }),
396
+ layers: [markdown(content)],
397
+ });
398
+ }
399
+ function parseNormalSlide(section, lines) {
400
+ const visibleLines = [];
401
+ const extraLayers = [];
402
+ const fragments = [];
403
+ let notes;
404
+ let fragmentCount = 0;
405
+ for (let index = 0; index < lines.length; index += 1) {
406
+ const line = lines[index];
407
+ const trimmed = line.text.trim();
408
+ if (trimmed === ":::notes") {
409
+ const block = readDirectiveBlock(lines, index, "notes");
410
+ notes = block.content;
411
+ index = block.endIndex;
412
+ continue;
413
+ }
414
+ if (trimmed === ":::fragment") {
415
+ const block = readDirectiveBlock(lines, index, "fragment");
416
+ fragmentCount += 1;
417
+ const id = `fragment-${fragmentCount}`;
418
+ extraLayers.push(markdown(block.content, { id }));
419
+ fragments.push({ id, layerId: id });
420
+ index = block.endIndex;
421
+ continue;
422
+ }
423
+ if (trimmed.startsWith(":::fx ")) {
424
+ const attributes = parseDirectiveAttributes(trimmed);
425
+ const { type, ...rest } = attributes;
426
+ extraLayers.push({
427
+ type: "fx",
428
+ props: {
429
+ ...(type === undefined ? {} : { effect: type }),
430
+ ...rest,
431
+ },
432
+ });
433
+ continue;
434
+ }
435
+ visibleLines.push(line);
436
+ }
437
+ const heading = firstHeading(visibleLines);
438
+ const content = textFromLines(visibleLines);
439
+ if (!heading || content.trim() === "") {
440
+ throw new DeckCompilerError(`empty slide starting on line ${section.startLine}`);
441
+ }
442
+ return slide(slugFromHeading(heading.text), {
443
+ layers: [markdown(content), ...extraLayers],
444
+ ...(fragments.length === 0 ? {} : { fragments }),
445
+ ...(notes === undefined ? {} : { notes }),
446
+ });
447
+ }
448
+ function parseSlideSection(section) {
449
+ const lines = trimLines(section.lines);
450
+ if (lines.length === 0) {
451
+ throw new DeckCompilerError(`empty slide starting on line ${section.startLine}`);
452
+ }
453
+ if (lines[0].text.trim().startsWith(":::scene ")) {
454
+ return parseSceneSection(section, lines);
455
+ }
456
+ return parseNormalSlide(section, lines);
457
+ }
458
+ function assertUniqueMarkdownSlideIds(slides) {
459
+ const seen = new Set();
460
+ for (const slideEntry of slides) {
461
+ if (seen.has(slideEntry.id)) {
462
+ throw new DeckCompilerError(`duplicate slide id: ${slideEntry.id}`);
463
+ }
464
+ seen.add(slideEntry.id);
465
+ }
466
+ }
467
+ export async function compileMarkdownDeck(entryPath) {
468
+ const resolvedEntryPath = resolve(entryPath);
469
+ let source;
470
+ try {
471
+ source = await readFile(resolvedEntryPath, "utf8");
472
+ }
473
+ catch {
474
+ throw new DeckCompilerError(`markdown deck entry not found: ${resolvedEntryPath}`);
475
+ }
476
+ const lines = source.split(/\r?\n/).map((text, index) => ({
477
+ text,
478
+ number: index + 1,
479
+ }));
480
+ const { metadata, bodyStartIndex } = parseFrontmatter(lines);
481
+ const slides = splitSlideSections(lines, bodyStartIndex).map(parseSlideSection);
482
+ assertUniqueMarkdownSlideIds(slides);
483
+ const manifest = deck({
484
+ title: metadata.title ?? "Untitled Deck",
485
+ slides,
486
+ ...(metadata.theme === undefined ? {} : { theme: { id: metadata.theme } }),
487
+ });
488
+ const validation = validateManifest(manifest);
489
+ if (!validation.valid) {
490
+ throw new DeckCompilerError(`invalid markdown deck: ${validation.errors.join("; ")}`);
491
+ }
492
+ return manifest;
493
+ }
494
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}