@sealpixel/render 1.0.0-rc.13 → 1.0.0-rc.15
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/assets.d.ts +0 -1
- package/dist/assets.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/renderer.d.ts +2 -3
- package/dist/renderer.js.map +1 -1
- package/package.json +5 -5
- package/dist/assets.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/renderer.d.ts.map +0 -1
package/dist/assets.d.ts
CHANGED
|
@@ -31,4 +31,3 @@ export declare function passedAssetResolver(passed: ReadonlyMap<string, Uint8Arr
|
|
|
31
31
|
* the resolver throws `SOURCE_MISMATCH`.
|
|
32
32
|
*/
|
|
33
33
|
export declare function verifiedAssets(passed: ReadonlyMap<string, Uint8Array>, declarations: readonly AssetInfo[], hashOf: (bytes: Uint8Array) => string): [id: string, bytes: Uint8Array][];
|
|
34
|
-
//# sourceMappingURL=assets.d.ts.map
|
package/dist/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type AnyPlugin,\n type AssetResolver,\n type EditLog,\n SealpixelError,\n staticAssetResolver,\n} from '@sealpixel/core';\n\n/** The bytes of one font or image, under the id that the ops use. */\nexport interface AssetBytes {\n id: string;\n bytes: Uint8Array;\n}\n\n/** An asset that a render can need. */\nexport interface AssetInfo {\n id: string;\n /** The sha256 that the bytes must have. */\n sha256: string;\n /** Where the declaration says the bytes are. Information for the host only. */\n url?: string;\n}\n\n/**\n * Lists the assets that a render can need: the declarations of the plugins,\n * then the entries of `editLog.assets`. A plugin declaration wins over a log\n * entry with the same id. Pure: it reads and fetches nothing.\n */\nexport function assetDeclarations(\n plugins: readonly AnyPlugin[],\n editLog?: Pick<EditLog, 'assets'> | null,\n): AssetInfo[] {\n const byId = new Map<string, AssetInfo>();\n for (const decl of [...plugins.flatMap((p) => p.assets ?? []), ...(editLog?.assets ?? [])]) {\n if (byId.has(decl.id)) continue;\n byId.set(decl.id, {\n id: decl.id,\n sha256: decl.hash,\n ...(decl.url === undefined ? {} : { url: decl.url }),\n });\n }\n return [...byId.values()];\n}\n\n/**\n * A resolver over bytes the host passed. It never loads anything. An id\n * without bytes is `MISSING_ASSET`. Bytes whose sha256 differs from the\n * declaration are `SOURCE_MISMATCH`. Both carry `details.assetId`.\n */\nexport function passedAssetResolver(\n passed: ReadonlyMap<string, Uint8Array>,\n declarations: readonly AssetInfo[],\n hashOf: (bytes: Uint8Array) => string,\n): AssetResolver {\n const declared = new Map(declarations.map((d) => [d.id, d.sha256]));\n return {\n declarations: () =>\n declarations.filter((d) => passed.has(d.id)).map((d) => ({ id: d.id, hash: d.sha256 })),\n async resolve(id) {\n const bytes = passed.get(id);\n if (bytes === undefined) {\n throw new SealpixelError('MISSING_ASSET', `asset \"${id}\" was not passed to the renderer`, {\n assetId: id,\n });\n }\n const expected = declared.get(id);\n const actual = hashOf(bytes);\n if (expected !== undefined && actual !== expected) {\n throw new SealpixelError(\n 'SOURCE_MISMATCH',\n `asset \"${id}\" has sha256 ${actual}, the declaration expects ${expected}`,\n { assetId: id },\n );\n }\n // Only the asset asked for is hashed, not every one the host passed.\n return staticAssetResolver([{ declaration: { id, hash: actual }, bytes }], hashOf).resolve(\n id,\n );\n },\n };\n}\n\n/**\n * The passed assets whose bytes match their declared sha256, or that have no\n * declaration. The renderer puts these into the core before the render, so the\n * pipeline runs once. A mismatched asset stays out: when the render needs it,\n * the resolver throws `SOURCE_MISMATCH`.\n */\nexport function verifiedAssets(\n passed: ReadonlyMap<string, Uint8Array>,\n declarations: readonly AssetInfo[],\n hashOf: (bytes: Uint8Array) => string,\n): [id: string, bytes: Uint8Array][] {\n const declared = new Map(declarations.map((d) => [d.id, d.sha256]));\n return [...passed].filter(([id, bytes]) => {\n const expected = declared.get(id);\n return expected === undefined || hashOf(bytes) === expected;\n });\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { estimateMemoryMB } from '@sealpixel/core';
|
|
2
2
|
export { type AssetBytes, type AssetInfo, assetDeclarations } from './assets.js';
|
|
3
3
|
export { createRenderer, type Renderer, type RendererOptions, type RenderInput, type RenderLimits, type RenderOutput, } from './renderer.js';
|
|
4
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAmC,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,cAAc,GAMf,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAmC,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,cAAc,GAMf,MAAM,eAAe,CAAC","sourcesContent":["export { estimateMemoryMB } from '@sealpixel/core';\nexport { type AssetBytes, type AssetInfo, assetDeclarations } from './assets.js';\nexport {\n createRenderer,\n type Renderer,\n type RendererOptions,\n type RenderInput,\n type RenderLimits,\n type RenderOutput,\n} from './renderer.js';\n"]}
|
package/dist/renderer.d.ts
CHANGED
|
@@ -44,8 +44,8 @@ export interface RenderInput {
|
|
|
44
44
|
signal?: AbortSignal;
|
|
45
45
|
}
|
|
46
46
|
export interface RenderOutput {
|
|
47
|
-
/** The encoded file
|
|
48
|
-
bytes: Uint8Array
|
|
47
|
+
/** The encoded file, backed by a plain `ArrayBuffer`, so it is a `BlobPart`. */
|
|
48
|
+
bytes: Uint8Array<ArrayBuffer>;
|
|
49
49
|
/** A stream over `bytes`. The file is complete before the stream starts, so it saves no memory. */
|
|
50
50
|
stream(): ReadableStream<Uint8Array>;
|
|
51
51
|
/** sha256 of `bytes`, computed inside the core. */
|
|
@@ -66,4 +66,3 @@ export interface Renderer {
|
|
|
66
66
|
* WebAssembly core once, on the first render.
|
|
67
67
|
*/
|
|
68
68
|
export declare function createRenderer(options: RendererOptions): Renderer;
|
|
69
|
-
//# sourceMappingURL=renderer.d.ts.map
|
package/dist/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type AnyPlugin,\n canonicalJson,\n compile,\n configurePlugins,\n createRegistry,\n estimateMemoryMB,\n type OutputOptions,\n type PluginOptionsMap,\n type Registry,\n readImageSize,\n render,\n SealpixelError,\n} from '@sealpixel/core';\nimport { type LoadOptions, loadSealpixelWasm, type SealpixelWasm } from '@sealpixel/wasm';\nimport {\n type AssetBytes,\n assetDeclarations,\n passedAssetResolver,\n verifiedAssets,\n} from './assets.js';\n\nexport interface RenderLimits {\n /** Largest original, in megapixels, read from the header before any decode. Default 80. */\n maxMegapixels?: number;\n /** Largest original, in bytes. Default 100e6. */\n maxBytes?: number;\n /** Largest edit log, in UTF-8 bytes of its canonical JSON. Default 2e6. */\n maxLogBytes?: number;\n}\n\nexport interface RendererOptions {\n /** The plugins that interpret the log. Register the same list as the editor. */\n plugins: readonly AnyPlugin[];\n /** `{ pluginId: partialOptions }` applied through `configurePlugins`. Mirror the editor's. */\n pluginOptions?: PluginOptionsMap;\n /**\n * Fonts and images that every render can use, for example the plugins'\n * fonts. The renderer loads no asset itself.\n */\n assets?: readonly AssetBytes[];\n limits?: RenderLimits;\n /** Reject an original whose sha256 differs from `log.source.hash`, when the log has one. Default true. */\n verifySourceHash?: boolean;\n /**\n * Where the WebAssembly binary comes from. Omit it when `@sealpixel/wasm` is\n * installed in `node_modules`. A bundle passes `{ module: <path to sealpixel_core_bg.wasm> }`.\n */\n wasm?: LoadOptions;\n}\n\nexport interface RenderInput {\n /** The original, byte for byte: the file the editor loaded. */\n original: Uint8Array;\n /** The edit log from the editor's `getEditLog().log`. Untrusted: it is parsed and checked. */\n editLog: unknown;\n /** Render `ops[0..upTo)`: the `index` from `getEditLog()`. Default: every op. */\n upTo?: number;\n /** Default `{ format: 'image/png' }`. */\n output?: OutputOptions;\n /** Fonts and images of this log only, for example uploaded stickers. They win over `createRenderer`'s. */\n assets?: readonly AssetBytes[];\n /** Store `{ log, index }` in the file's metadata. Default false. */\n embedEditLog?: boolean;\n signal?: AbortSignal;\n}\n\nexport interface RenderOutput {\n /** The encoded file, backed by a plain `ArrayBuffer`, so it is a `BlobPart`. */\n bytes: Uint8Array<ArrayBuffer>;\n /** A stream over `bytes`. The file is complete before the stream starts, so it saves no memory. */\n stream(): ReadableStream<Uint8Array>;\n /** sha256 of `bytes`, computed inside the core. */\n hash: string;\n width: number;\n height: number;\n mimeType: OutputOptions['format'];\n /** Milliseconds per step: `check`, `decode`, `render`, `encode`, `total`. */\n timings: Record<string, number>;\n}\n\nexport interface Renderer {\n /** Runs every check, then renders. Every failure is a `SealpixelError`. */\n render(input: RenderInput): Promise<RenderOutput>;\n}\n\nconst FORMATS: ReadonlySet<string> = new Set(['image/png', 'image/jpeg', 'image/webp']);\n\n/**\n * Creates a renderer: original bytes and edit log in, rendered file out.\n * Create it once per process. It builds the registry once and loads the\n * WebAssembly core once, on the first render.\n */\nexport function createRenderer(options: RendererOptions): Renderer {\n const plugins = configurePlugins(options.plugins, options.pluginOptions);\n const registry: Registry = createRegistry(plugins);\n let wasmPromise: Promise<SealpixelWasm> | null = null;\n const loadWasm = (): Promise<SealpixelWasm> => {\n wasmPromise ??= loadSealpixelWasm(options.wasm).catch((error: unknown) => {\n wasmPromise = null;\n throw error;\n });\n return wasmPromise;\n };\n const limits = {\n maxMegapixels: options.limits?.maxMegapixels ?? 80,\n maxBytes: options.limits?.maxBytes ?? 100e6,\n maxLogBytes: options.limits?.maxLogBytes ?? 2e6,\n };\n const verifySourceHash = options.verifySourceHash ?? true;\n const shared = new Map((options.assets ?? []).map((a) => [a.id, a.bytes]));\n // The bytes given here are hashed once per renderer, the bytes given to\n // render() once per render.\n const sharedBytes = new Set(shared.values());\n const sharedHashes = new WeakMap<Uint8Array, string>();\n const pluginDeclarations = assetDeclarations(plugins);\n\n return {\n async render(input) {\n const started = now();\n throwIfAborted(input.signal);\n const { original } = input;\n if (!(original instanceof Uint8Array)) {\n throw new SealpixelError('INVALID_REQUEST', 'original must be a Uint8Array');\n }\n\n // 1. The byte limit.\n if (original.byteLength > limits.maxBytes) {\n throw new SealpixelError(\n 'TOO_LARGE',\n `${original.byteLength} bytes exceed ${limits.maxBytes}`,\n );\n }\n // 2. The pixel count from the header, before any decode.\n const size = readImageSize(original);\n const megapixels = (size.width * size.height) / 1e6;\n if (megapixels > limits.maxMegapixels) {\n throw new SealpixelError(\n 'TOO_LARGE',\n `${megapixels.toFixed(1)} MP exceed ${limits.maxMegapixels} MP (needs about ${estimateMemoryMB(size.width, size.height)} MB)`,\n );\n }\n // 3. The log size.\n if (input.editLog === undefined) {\n throw new SealpixelError('INVALID_REQUEST', 'editLog is required');\n }\n let logBytes: number;\n try {\n logBytes = new TextEncoder().encode(canonicalJson(input.editLog)).byteLength;\n } catch (error) {\n throw new SealpixelError('INVALID_EDIT_LOG', `edit log is not JSON: ${String(error)}`);\n }\n if (logBytes > limits.maxLogBytes) {\n throw new SealpixelError(\n 'TOO_LARGE',\n `edit log of ${logBytes} bytes exceeds ${limits.maxLogBytes}`,\n );\n }\n // 4. Parse: schema, known plugins, per-op option checks.\n const log = registry.parseEditLog(input.editLog);\n const upTo = input.upTo ?? log.ops.length;\n if (!Number.isInteger(upTo) || upTo < 0 || upTo > log.ops.length) {\n throw new SealpixelError(\n 'INVALID_REQUEST',\n `upTo must be an integer from 0 to ${log.ops.length}, got ${upTo}`,\n );\n }\n const output = input.output ?? { format: 'image/png' };\n if (!FORMATS.has(output.format)) {\n throw new SealpixelError(\n 'INVALID_REQUEST',\n `output.format must be image/png, image/jpeg or image/webp, got ${String(output.format)}`,\n );\n }\n const wasm = await loadWasm();\n // 5. The original the log was written against.\n if (verifySourceHash && log.source.hash !== undefined) {\n const hash = wasm.sha256Hex(original);\n if (hash !== log.source.hash) {\n throw new SealpixelError(\n 'SOURCE_MISMATCH',\n `edit log source hash ${log.source.hash} does not match the original ${hash}`,\n );\n }\n }\n // The assets of this render. Hashing needs no decode, so it runs here.\n const passed = new Map(shared);\n for (const a of input.assets ?? []) passed.set(a.id, a.bytes);\n const declarations = log.assets?.length\n ? assetDeclarations(plugins, log)\n : pluginDeclarations;\n const renderHashes = new WeakMap<Uint8Array, string>();\n const hashOf = (bytes: Uint8Array): string => {\n const cache = sharedBytes.has(bytes) ? sharedHashes : renderHashes;\n let hash = cache.get(bytes);\n if (hash === undefined) {\n hash = wasm.sha256Hex(bytes);\n cache.set(bytes, hash);\n }\n return hash;\n };\n const toPut = verifiedAssets(passed, declarations, hashOf);\n const assets = passedAssetResolver(passed, declarations, hashOf);\n const checkMs = now() - started;\n\n // One render at a time holds a decoded image: a queued render holds only\n // its encoded bytes.\n const { result, decodeMs } = await exclusive(async () => {\n throwIfAborted(input.signal);\n // 6. The size. Orientation may swap width and height, so the decoded\n // size is authoritative. The render reuses this decode.\n const t0 = now();\n const image = tryCore(() => wasm.decode(original));\n const decodeMs = now() - t0;\n if (image.width !== log.source.width || image.height !== log.source.height) {\n throw new SealpixelError(\n 'SOURCE_MISMATCH',\n `edit log expects ${log.source.width}x${log.source.height}, the original is ${image.width}x${image.height}`,\n );\n }\n // 7. The final state against the configured options.\n const violations = registry.validateDocument(compile(log, registry, upTo), log.source);\n if (violations.length > 0) {\n throw new SealpixelError(\n 'OPTION_VIOLATION',\n violations.map((v) => `${v.plugin}: ${v.message}`).join('; '),\n violations,\n );\n }\n // 8. Render. The core keeps assets by id for the life of the instance.\n // Start empty and put every passed asset, so this render uses only its\n // own bytes and the pipeline runs once. The resolver then only reports\n // an asset that is missing or has another hash.\n wasm.assetClear();\n for (const [id, bytes] of toPut) wasm.assetPut(id, bytes);\n const result = await render(image, log, {\n output,\n registry,\n wasm,\n upTo,\n assets,\n ...(input.embedEditLog ? { embedEditLog: true } : {}),\n ...(input.signal ? { signal: input.signal } : {}),\n });\n return { result, decodeMs };\n });\n const { bytes } = result;\n const { render: renderMs = 0, encode: encodeMs = 0 } = result.timings;\n return {\n bytes,\n stream: () =>\n new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(bytes);\n controller.close();\n },\n }),\n hash: result.hash,\n width: result.width,\n height: result.height,\n mimeType: result.mimeType,\n timings: {\n check: checkMs,\n decode: decodeMs,\n render: renderMs,\n encode: encodeMs,\n total: now() - started,\n },\n };\n },\n };\n}\n\n/**\n * Every renderer in a process shares one core instance and its asset table.\n * The decode and the render run one after another, so no render clears or\n * puts assets while another one uses them, and only one decoded image exists\n * at a time. The core is single-threaded, so this costs no throughput.\n */\nlet queue: Promise<unknown> = Promise.resolve();\nfunction exclusive<T>(fn: () => Promise<T>): Promise<T> {\n const run = queue.then(fn);\n queue = run.catch(() => undefined);\n return run;\n}\n\nfunction tryCore<T>(fn: () => T): T {\n try {\n return fn();\n } catch (error) {\n throw SealpixelError.from(error);\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw new SealpixelError('ABORTED', 'render aborted');\n}\n\nfunction now(): number {\n return typeof performance === 'undefined' ? Date.now() : performance.now();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sealpixel/render",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.15",
|
|
4
4
|
"description": "Render a Sealpixel edit log on the original with the same WASM core as the browser: original bytes and edit log in, rendered file out. For Node, Deno, Bun and AWS Lambda.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"repository": {
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"./package.json": "./package.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@sealpixel/core": "1.0.0-rc.
|
|
31
|
-
"@sealpixel/wasm": "1.0.0-rc.
|
|
30
|
+
"@sealpixel/core": "1.0.0-rc.15",
|
|
31
|
+
"@sealpixel/wasm": "1.0.0-rc.15"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@sealpixel/config": "0.0.0",
|
|
35
|
-
"@sealpixel/plugin-annotate": "1.0.0-rc.
|
|
36
|
-
"@sealpixel/plugins": "1.0.0-rc.
|
|
35
|
+
"@sealpixel/plugin-annotate": "1.0.0-rc.15",
|
|
36
|
+
"@sealpixel/plugins": "1.0.0-rc.15",
|
|
37
37
|
"@types/node": "^24.0.0",
|
|
38
38
|
"typescript": "^6.0.0",
|
|
39
39
|
"vitest": "^5.0.0"
|
package/dist/assets.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,OAAO,EAGb,MAAM,iBAAiB,CAAC;AAEzB,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,uCAAuC;AACvC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GACvC,SAAS,EAAE,CAWb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,YAAY,EAAE,SAAS,SAAS,EAAE,EAClC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,GACpC,aAAa,CA2Bf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,YAAY,EAAE,SAAS,SAAS,EAAE,EAClC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,GACpC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAMnC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC"}
|
package/dist/renderer.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAMd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAKtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,WAAW,EAAyC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,8FAA8F;IAC9F,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0GAA0G;IAC1G,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,QAAQ,EAAE,UAAU,CAAC;IACrB,8FAA8F;IAC9F,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,mGAAmG;IACnG,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnD;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAkLjE"}
|