@flatkit/compiler 0.1.2 → 0.3.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.
@@ -309,4 +309,4 @@ function run(argv) {
309
309
  export {
310
310
  run
311
311
  };
312
- //# sourceMappingURL=chunk-KKHUM55Q.js.map
312
+ //# sourceMappingURL=chunk-F3X2F6QC.js.map
package/dist/cli/flatc.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  run
3
- } from "../chunk-KKHUM55Q.js";
3
+ } from "../chunk-F3X2F6QC.js";
4
4
  import "../chunk-UADRVB63.js";
5
5
  import "../chunk-TPDP5FDF.js";
6
6
  export {
@@ -1,6 +1,37 @@
1
1
  // src/cli/render.ts
2
2
  import { FlatPlayer } from "@flatkit/player";
3
+ import { mkdtempSync, writeFileSync, rmSync } from "fs";
4
+ import { tmpdir } from "os";
5
+ import { join } from "path";
3
6
  var MAX_RENDER_STEPS = 1e4;
7
+ var FONT_EXT = {
8
+ "font/woff2": ".woff2",
9
+ "font/woff": ".woff",
10
+ "font/ttf": ".ttf",
11
+ "font/otf": ".otf",
12
+ "font/collection": ".ttc",
13
+ "application/font-woff": ".woff",
14
+ "application/x-font-ttf": ".ttf"
15
+ };
16
+ function registerFonts(doc, FontLibrary) {
17
+ const fonts = (doc.assets ?? []).filter((a) => a.kind === "font" && /^data:/.test(a.data ?? ""));
18
+ if (fonts.length === 0) return { dir: null, families: [] };
19
+ const dir = mkdtempSync(join(tmpdir(), "flatc-fonts-"));
20
+ const families = [];
21
+ for (const a of fonts) {
22
+ const b64 = a.data.slice(a.data.indexOf(",") + 1);
23
+ const ext = FONT_EXT[a.mime] ?? `.${(a.mime.split("/")[1] || "ttf").replace(/[^\w]/g, "")}`;
24
+ const file = join(dir, a.id.replace(/[^\w.-]/g, "_") + ext);
25
+ try {
26
+ writeFileSync(file, Buffer.from(b64, "base64"));
27
+ for (const f of FontLibrary.use([file])) if (!families.includes(f.family)) families.push(f.family);
28
+ } catch (e) {
29
+ process.stderr.write(`flatc: skipped font asset "${a.id}" (${a.mime}): ${e.message}
30
+ `);
31
+ }
32
+ }
33
+ return { dir, families };
34
+ }
4
35
  async function renderDocToPng(doc, opts = {}) {
5
36
  const skiaPkg = "skia-canvas";
6
37
  let skia;
@@ -11,9 +42,12 @@ async function renderDocToPng(doc, opts = {}) {
11
42
  'skia-canvas is required for --render. Install it as a dev dependency: `npm i -D skia-canvas` (pnpm users: also allow its build script with `pnpm approve-builds` or add "skia-canvas" to pnpm.onlyBuiltDependencies, then reinstall). If the native binary is still missing afterwards, run `node node_modules/skia-canvas/lib/prebuild.mjs download`.'
12
43
  );
13
44
  }
14
- const { Canvas, loadImage, Path2D } = skia;
45
+ const { Canvas, loadImage, Path2D, FontLibrary } = skia;
15
46
  const scale = opts.scale && opts.scale > 0 ? opts.scale : 2;
16
47
  const W = doc.width, H = doc.height;
48
+ const { dir: fontDir, families } = registerFonts(doc, FontLibrary);
49
+ if (families.length) process.stderr.write(`flatc: registered ${families.length} font famil${families.length > 1 ? "ies" : "y"}: ${families.join(", ")}
50
+ `);
17
51
  const images = /* @__PURE__ */ new Map();
18
52
  for (const a of doc.assets ?? []) {
19
53
  if (a.kind === "svg" || a.kind === "image" || /^data:image\//.test(a.data ?? "")) {
@@ -69,6 +103,10 @@ async function renderDocToPng(doc, opts = {}) {
69
103
  if (saved[k] === void 0) delete g[k];
70
104
  else g[k] = saved[k];
71
105
  }
106
+ if (fontDir) try {
107
+ rmSync(fontDir, { recursive: true, force: true });
108
+ } catch {
109
+ }
72
110
  }
73
111
  }
74
112
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/render.ts"],"sourcesContent":["// -----------------------------------------------------------------------------\n// render.ts -- HEADLESS PNG rendering of a Doc (skia-canvas backend), for `flatc --render`.\n//\n// Gives agents/CI an IMAGE of what they author (the \"blind positioning\" safeguard). We replay the\n// real `FlatPlayer` on a skia canvas: same paths, gradients, filters (glow/shadow via `ctx.filter`)\n// and SVG as the browser. skia-canvas is loaded through a DYNAMIC import with a NON-LITERAL specifier,\n// so it is never part of the public build graph -- install it on demand only when `--render` is used.\n// -----------------------------------------------------------------------------\nimport { FlatPlayer } from '@flatkit/player'\nimport type { Doc } from '@flatkit/types'\n\nexport type RenderOpts = { frame?: number; vars?: Record<string, number>; scale?: number; steps?: number }\n\n/** Cap on `--steps` (anti-DoS: an untrusted doc must not freeze the render host). One step = 1/60 s of sim. */\nconst MAX_RENDER_STEPS = 10_000\n\n/** Minimal structural view of the `skia-canvas` surface we use. Kept local so the public build needs\n * no native binary; the real module is resolved at runtime only when `--render` runs. */\ninterface SkiaCanvas {\n Canvas: new (w: number, h: number) => HTMLCanvasElement & { toBuffer(fmt: string): Promise<Uint8Array> }\n loadImage: (src: string) => Promise<unknown>\n Path2D: typeof Path2D\n}\n\n/** Render `doc` to a PNG (Buffer). `frame` = target image; `vars` = state override (`--at`); `scale` = x-px (default 2). */\nexport async function renderDocToPng(doc: Doc, opts: RenderOpts = {}): Promise<Uint8Array> {\n // Non-literal specifier: tsc does not resolve it, so skia-canvas is not a build dependency.\n const skiaPkg: string = 'skia-canvas'\n let skia: SkiaCanvas\n try { skia = (await import(skiaPkg)) as unknown as SkiaCanvas }\n catch {\n throw new Error(\n 'skia-canvas is required for --render. Install it as a dev dependency: `npm i -D skia-canvas` ' +\n '(pnpm users: also allow its build script with `pnpm approve-builds` or add \"skia-canvas\" to ' +\n 'pnpm.onlyBuiltDependencies, then reinstall). If the native binary is still missing afterwards, ' +\n 'run `node node_modules/skia-canvas/lib/prebuild.mjs download`.',\n )\n }\n const { Canvas, loadImage, Path2D } = skia\n const scale = opts.scale && opts.scale > 0 ? opts.scale : 2\n const W = doc.width, H = doc.height\n\n // Pre-decode the image assets (skia reads SVG/PNG/... from the data-URIs embedded by flatc).\n const images = new Map<string, CanvasImageSource>()\n for (const a of doc.assets ?? []) {\n if (a.kind === 'svg' || a.kind === 'image' || /^data:image\\//.test(a.data ?? '')) {\n try { images.set(a.id, (await loadImage(a.data)) as unknown as CanvasImageSource) } catch { /* unreadable asset: ignored (placeholder) */ }\n }\n }\n\n // Globals the player/rendering expects under Node (restored on exit).\n const g = globalThis as Record<string, unknown>\n const saved: Record<string, unknown> = {}\n const set = (k: string, v: unknown) => { saved[k] = g[k]; g[k] = v }\n set('Path2D', Path2D)\n set('window', { addEventListener() {}, removeEventListener() {}, devicePixelRatio: scale })\n set('addEventListener', () => {})\n set('removeEventListener', () => {})\n set('requestAnimationFrame', () => 0)\n set('cancelAnimationFrame', () => {})\n set('document', { createElement: (t: string) => (t === 'canvas' ? new Canvas(1, 1) : {}) }) // off-screen canvas (filters/tint)\n\n const canvas = new Canvas(Math.max(1, Math.round(W * scale)), Math.max(1, Math.round(H * scale)))\n const el = canvas as unknown as HTMLCanvasElement & { toBuffer(fmt: string): Promise<Uint8Array> }\n Object.assign(el, {\n getBoundingClientRect: () => ({ width: W, height: H, left: 0, top: 0, right: W, bottom: H }),\n addEventListener: () => {}, removeEventListener: () => {}, style: {},\n })\n\n try {\n const pl = new FlatPlayer(el, doc, { input: false, audio: false, padding: 0, image: (id) => images.get(id) ?? null })\n if (opts.vars) for (const [k, v] of Object.entries(opts.vars)) pl.setVar(k, v)\n pl.seek(opts.frame ?? 0) // applies frame + state\n if (opts.steps && opts.steps > 0) {\n const n = Math.min(Math.floor(opts.steps), MAX_RENDER_STEPS)\n if (opts.steps > MAX_RENDER_STEPS) process.stderr.write(`flatc: --steps clamped to ${MAX_RENDER_STEPS} (was ${opts.steps})\\n`)\n pl.stepSim(n) // run N fixed sim steps (onEnterFrame) so a stateful act unfolds before capture\n }\n const png = await el.toBuffer('png')\n pl.destroy()\n return png\n } finally {\n for (const k in saved) { if (saved[k] === undefined) delete g[k]; else g[k] = saved[k] }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/render.ts"],"sourcesContent":["// -----------------------------------------------------------------------------\n// render.ts -- HEADLESS PNG rendering of a Doc (skia-canvas backend), for `flatc --render`.\n//\n// Gives agents/CI an IMAGE of what they author (the \"blind positioning\" safeguard). We replay the\n// real `FlatPlayer` on a skia canvas: same paths, gradients, filters (glow/shadow via `ctx.filter`)\n// and SVG as the browser. skia-canvas is loaded through a DYNAMIC import with a NON-LITERAL specifier,\n// so it is never part of the public build graph -- install it on demand only when `--render` is used.\n// -----------------------------------------------------------------------------\nimport { FlatPlayer } from '@flatkit/player'\nimport type { Doc } from '@flatkit/types'\nimport { mkdtempSync, writeFileSync, rmSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\n\nexport type RenderOpts = { frame?: number; vars?: Record<string, number>; scale?: number; steps?: number }\n\n/** Cap on `--steps` (anti-DoS: an untrusted doc must not freeze the render host). One step = 1/60 s of sim. */\nconst MAX_RENDER_STEPS = 10_000\n\n/** Minimal structural view of the `skia-canvas` surface we use. Kept local so the public build needs\n * no native binary; the real module is resolved at runtime only when `--render` runs. */\ninterface SkiaCanvas {\n Canvas: new (w: number, h: number) => HTMLCanvasElement & { toBuffer(fmt: string): Promise<Uint8Array> }\n loadImage: (src: string) => Promise<unknown>\n Path2D: typeof Path2D\n /** Global font registry — `use(paths)` reads each file's intrinsic family from its name table. */\n FontLibrary: { use(fontPaths: readonly string[]): Array<{ family: string }> }\n}\n\n/** Map a font asset's MIME (or its data-URI) to a file extension skia-canvas can parse. */\nconst FONT_EXT: Record<string, string> = {\n 'font/woff2': '.woff2', 'font/woff': '.woff', 'font/ttf': '.ttf', 'font/otf': '.otf',\n 'font/collection': '.ttc', 'application/font-woff': '.woff', 'application/x-font-ttf': '.ttf',\n}\n\n/** Registers every embedded `font` asset with skia's FontLibrary so headless text uses the authored\n * faces (not host fallbacks). Fonts are baked as base64 data-URIs by flatc; FontLibrary only reads\n * FILE paths, so we materialize each into a temp dir, register it, and return that dir for cleanup. */\nfunction registerFonts(doc: Doc, FontLibrary: SkiaCanvas['FontLibrary']): { dir: string | null; families: string[] } {\n const fonts = (doc.assets ?? []).filter((a) => a.kind === 'font' && /^data:/.test(a.data ?? ''))\n if (fonts.length === 0) return { dir: null, families: [] }\n const dir = mkdtempSync(join(tmpdir(), 'flatc-fonts-'))\n const families: string[] = []\n for (const a of fonts) {\n const b64 = a.data.slice(a.data.indexOf(',') + 1)\n const ext = FONT_EXT[a.mime] ?? `.${(a.mime.split('/')[1] || 'ttf').replace(/[^\\w]/g, '')}`\n const file = join(dir, a.id.replace(/[^\\w.-]/g, '_') + ext)\n try {\n writeFileSync(file, Buffer.from(b64, 'base64'))\n for (const f of FontLibrary.use([file])) if (!families.includes(f.family)) families.push(f.family)\n } catch (e) {\n process.stderr.write(`flatc: skipped font asset \"${a.id}\" (${a.mime}): ${(e as Error).message}\\n`)\n }\n }\n return { dir, families }\n}\n\n/** Render `doc` to a PNG (Buffer). `frame` = target image; `vars` = state override (`--at`); `scale` = x-px (default 2). */\nexport async function renderDocToPng(doc: Doc, opts: RenderOpts = {}): Promise<Uint8Array> {\n // Non-literal specifier: tsc does not resolve it, so skia-canvas is not a build dependency.\n const skiaPkg: string = 'skia-canvas'\n let skia: SkiaCanvas\n try { skia = (await import(skiaPkg)) as unknown as SkiaCanvas }\n catch {\n throw new Error(\n 'skia-canvas is required for --render. Install it as a dev dependency: `npm i -D skia-canvas` ' +\n '(pnpm users: also allow its build script with `pnpm approve-builds` or add \"skia-canvas\" to ' +\n 'pnpm.onlyBuiltDependencies, then reinstall). If the native binary is still missing afterwards, ' +\n 'run `node node_modules/skia-canvas/lib/prebuild.mjs download`.',\n )\n }\n const { Canvas, loadImage, Path2D, FontLibrary } = skia\n const scale = opts.scale && opts.scale > 0 ? opts.scale : 2\n const W = doc.width, H = doc.height\n\n // Register embedded fonts up front so the player's `ctx.font` resolves to the authored faces.\n const { dir: fontDir, families } = registerFonts(doc, FontLibrary)\n if (families.length) process.stderr.write(`flatc: registered ${families.length} font famil${families.length > 1 ? 'ies' : 'y'}: ${families.join(', ')}\\n`)\n\n // Pre-decode the image assets (skia reads SVG/PNG/... from the data-URIs embedded by flatc).\n const images = new Map<string, CanvasImageSource>()\n for (const a of doc.assets ?? []) {\n if (a.kind === 'svg' || a.kind === 'image' || /^data:image\\//.test(a.data ?? '')) {\n try { images.set(a.id, (await loadImage(a.data)) as unknown as CanvasImageSource) } catch { /* unreadable asset: ignored (placeholder) */ }\n }\n }\n\n // Globals the player/rendering expects under Node (restored on exit).\n const g = globalThis as Record<string, unknown>\n const saved: Record<string, unknown> = {}\n const set = (k: string, v: unknown) => { saved[k] = g[k]; g[k] = v }\n set('Path2D', Path2D)\n set('window', { addEventListener() {}, removeEventListener() {}, devicePixelRatio: scale })\n set('addEventListener', () => {})\n set('removeEventListener', () => {})\n set('requestAnimationFrame', () => 0)\n set('cancelAnimationFrame', () => {})\n set('document', { createElement: (t: string) => (t === 'canvas' ? new Canvas(1, 1) : {}) }) // off-screen canvas (filters/tint)\n\n const canvas = new Canvas(Math.max(1, Math.round(W * scale)), Math.max(1, Math.round(H * scale)))\n const el = canvas as unknown as HTMLCanvasElement & { toBuffer(fmt: string): Promise<Uint8Array> }\n Object.assign(el, {\n getBoundingClientRect: () => ({ width: W, height: H, left: 0, top: 0, right: W, bottom: H }),\n addEventListener: () => {}, removeEventListener: () => {}, style: {},\n })\n\n try {\n const pl = new FlatPlayer(el, doc, { input: false, audio: false, padding: 0, image: (id) => images.get(id) ?? null })\n if (opts.vars) for (const [k, v] of Object.entries(opts.vars)) pl.setVar(k, v)\n pl.seek(opts.frame ?? 0) // applies frame + state\n if (opts.steps && opts.steps > 0) {\n const n = Math.min(Math.floor(opts.steps), MAX_RENDER_STEPS)\n if (opts.steps > MAX_RENDER_STEPS) process.stderr.write(`flatc: --steps clamped to ${MAX_RENDER_STEPS} (was ${opts.steps})\\n`)\n pl.stepSim(n) // run N fixed sim steps (onEnterFrame) so a stateful act unfolds before capture\n }\n const png = await el.toBuffer('png')\n pl.destroy()\n return png\n } finally {\n for (const k in saved) { if (saved[k] === undefined) delete g[k]; else g[k] = saved[k] }\n // skia keeps the parsed faces in memory after `use()`, so the temp files are safe to drop now.\n if (fontDir) try { rmSync(fontDir, { recursive: true, force: true }) } catch { /* best-effort cleanup */ }\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  run
3
- } from "./chunk-KKHUM55Q.js";
3
+ } from "./chunk-F3X2F6QC.js";
4
4
  import {
5
5
  allScopeVariables,
6
6
  docHasErrors,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatkit/compiler",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "description": "The FlatInk language (parser + AST) and compiler (.flatink → .flatpack). Ships the flatc CLI.",
5
5
  "license": "MIT",
6
6
  "author": "Zwyk Studio",
@@ -45,9 +45,9 @@
45
45
  "bin"
46
46
  ],
47
47
  "dependencies": {
48
- "@flatkit/player": "0.1.2",
49
- "@flatkit/engine": "0.1.2",
50
- "@flatkit/types": "0.1.2"
48
+ "@flatkit/player": "0.3.0",
49
+ "@flatkit/engine": "0.3.0",
50
+ "@flatkit/types": "0.3.0"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "skia-canvas": "^3.0.8"