UNPKG

svg2png-wasm

Version:

A svg to png converter made with wasm.

388 lines (384 loc) 13 kB
/** * @file This library uses [resvg](https://github.com/RazrFalcon/resvg), which is licensed unser MPL-2.0. The source code for resvg can be found [here](https://github.com/RazrFalcon/resvg). */ "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // lib/index.ts var lib_exports = {}; __export(lib_exports, { createSvg2png: () => createSvg2png, initialize: () => initialize, svg2png: () => svg2png }); module.exports = __toCommonJS(lib_exports); // dist-wasm/svg2png_wasm.js var wasm; var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error("TextDecoder not available"); } }; if (typeof TextDecoder !== "undefined") { cachedTextDecoder.decode(); } var cachedUint8Memory0 = null; function getUint8Memory0() { if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); } return cachedUint8Memory0; } function getStringFromWasm0(ptr, len) { ptr = ptr >>> 0; return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); } var heap = new Array(128).fill(void 0); heap.push(void 0, null, true, false); var heap_next = heap.length; function addHeapObject(obj) { if (heap_next === heap.length) heap.push(heap.length + 1); const idx = heap_next; heap_next = heap[idx]; heap[idx] = obj; return idx; } function getObject(idx) { return heap[idx]; } function dropObject(idx) { if (idx < 132) return; heap[idx] = heap_next; heap_next = idx; } function takeObject(idx) { const ret = getObject(idx); dropObject(idx); return ret; } var WASM_VECTOR_LEN = 0; function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8Memory0().set(arg, ptr / 1); WASM_VECTOR_LEN = arg.length; return ptr; } var cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => { throw Error("TextEncoder not available"); } }; var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { return cachedTextEncoder.encodeInto(arg, view); } : function(arg, view) { const buf = cachedTextEncoder.encode(arg); view.set(buf); return { read: arg.length, written: buf.length }; }; function passStringToWasm0(arg, malloc, realloc) { if (realloc === void 0) { const buf = cachedTextEncoder.encode(arg); const ptr2 = malloc(buf.length, 1) >>> 0; getUint8Memory0().subarray(ptr2, ptr2 + buf.length).set(buf); WASM_VECTOR_LEN = buf.length; return ptr2; } let len = arg.length; let ptr = malloc(len, 1) >>> 0; const mem = getUint8Memory0(); let offset = 0; for (; offset < len; offset++) { const code = arg.charCodeAt(offset); if (code > 127) break; mem[ptr + offset] = code; } if (offset !== len) { if (offset !== 0) { arg = arg.slice(offset); } ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; const view = getUint8Memory0().subarray(ptr + offset, ptr + len); const ret = encodeString(arg, view); offset += ret.written; } WASM_VECTOR_LEN = offset; return ptr; } function isLikeNone(x) { return x === void 0 || x === null; } var cachedInt32Memory0 = null; function getInt32Memory0() { if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); } return cachedInt32Memory0; } function getArrayU8FromWasm0(ptr, len) { ptr = ptr >>> 0; return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); } var cachedUint32Memory0 = null; function getUint32Memory0() { if (cachedUint32Memory0 === null || cachedUint32Memory0.byteLength === 0) { cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer); } return cachedUint32Memory0; } function getArrayJsValueFromWasm0(ptr, len) { ptr = ptr >>> 0; const mem = getUint32Memory0(); const slice = mem.subarray(ptr / 4, ptr / 4 + len); const result = []; for (let i = 0; i < slice.length; i++) { result.push(takeObject(slice[i])); } return result; } function createConverter(default_serif_family, default_sans_serif_family, default_cursive_family, default_fantasy_family, default_monospace_family) { var ptr0 = isLikeNone(default_serif_family) ? 0 : passStringToWasm0(default_serif_family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len0 = WASM_VECTOR_LEN; var ptr1 = isLikeNone(default_sans_serif_family) ? 0 : passStringToWasm0(default_sans_serif_family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len1 = WASM_VECTOR_LEN; var ptr2 = isLikeNone(default_cursive_family) ? 0 : passStringToWasm0(default_cursive_family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len2 = WASM_VECTOR_LEN; var ptr3 = isLikeNone(default_fantasy_family) ? 0 : passStringToWasm0(default_fantasy_family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len3 = WASM_VECTOR_LEN; var ptr4 = isLikeNone(default_monospace_family) ? 0 : passStringToWasm0(default_monospace_family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len4 = WASM_VECTOR_LEN; const ret = wasm.createConverter(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4); return Converter.__wrap(ret); } var Converter = class { static __wrap(ptr) { ptr = ptr >>> 0; const obj = Object.create(Converter.prototype); obj.__wbg_ptr = ptr; return obj; } __destroy_into_raw() { const ptr = this.__wbg_ptr; this.__wbg_ptr = 0; return ptr; } free() { const ptr = this.__destroy_into_raw(); wasm.__wbg_converter_free(ptr); } /** * @param {Uint8Array} font */ registerFont(font) { const ptr0 = passArray8ToWasm0(font, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; wasm.converter_registerFont(this.__wbg_ptr, ptr0, len0); } /** * @param {string} svg * @param {number | undefined} scale * @param {number | undefined} width * @param {number | undefined} height * @param {string | undefined} background * @returns {Uint8Array} */ convert(svg, scale, width, height, background) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; var ptr1 = isLikeNone(background) ? 0 : passStringToWasm0(background, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len1 = WASM_VECTOR_LEN; wasm.converter_convert(retptr, this.__wbg_ptr, ptr0, len0, !isLikeNone(scale), isLikeNone(scale) ? 0 : scale, !isLikeNone(width), isLikeNone(width) ? 0 : width, !isLikeNone(height), isLikeNone(height) ? 0 : height, ptr1, len1); var r0 = getInt32Memory0()[retptr / 4 + 0]; var r1 = getInt32Memory0()[retptr / 4 + 1]; var r2 = getInt32Memory0()[retptr / 4 + 2]; var r3 = getInt32Memory0()[retptr / 4 + 3]; if (r3) { throw takeObject(r2); } var v3 = getArrayU8FromWasm0(r0, r1).slice(); wasm.__wbindgen_free(r0, r1 * 1); return v3; } finally { wasm.__wbindgen_add_to_stack_pointer(16); } } /** * @returns {any[]} */ list_fonts() { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); wasm.converter_list_fonts(retptr, this.__wbg_ptr); var r0 = getInt32Memory0()[retptr / 4 + 0]; var r1 = getInt32Memory0()[retptr / 4 + 1]; var v1 = getArrayJsValueFromWasm0(r0, r1).slice(); wasm.__wbindgen_free(r0, r1 * 4); return v1; } finally { wasm.__wbindgen_add_to_stack_pointer(16); } } }; async function __wbg_load(module2, imports) { if (typeof Response === "function" && module2 instanceof Response) { if (typeof WebAssembly.instantiateStreaming === "function") { try { return await WebAssembly.instantiateStreaming(module2, imports); } catch (e) { if (module2.headers.get("Content-Type") != "application/wasm") { console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); } else { throw e; } } } const bytes = await module2.arrayBuffer(); return await WebAssembly.instantiate(bytes, imports); } else { const instance = await WebAssembly.instantiate(module2, imports); if (instance instanceof WebAssembly.Instance) { return { instance, module: module2 }; } else { return instance; } } } function __wbg_get_imports() { const imports = {}; imports.wbg = {}; imports.wbg.__wbindgen_string_new = function(arg0, arg1) { const ret = getStringFromWasm0(arg0, arg1); return addHeapObject(ret); }; imports.wbg.__wbg_new_abda76e883ba8a5f = function() { const ret = new Error(); return addHeapObject(ret); }; imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) { const ret = getObject(arg1).stack; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len1; getInt32Memory0()[arg0 / 4 + 0] = ptr1; }; imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) { let deferred0_0; let deferred0_1; try { deferred0_0 = arg0; deferred0_1 = arg1; console.error(getStringFromWasm0(arg0, arg1)); } finally { wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); } }; imports.wbg.__wbindgen_object_drop_ref = function(arg0) { takeObject(arg0); }; imports.wbg.__wbindgen_throw = function(arg0, arg1) { throw new Error(getStringFromWasm0(arg0, arg1)); }; return imports; } function __wbg_init_memory(imports, maybe_memory) { } function __wbg_finalize_init(instance, module2) { wasm = instance.exports; __wbg_init.__wbindgen_wasm_module = module2; cachedInt32Memory0 = null; cachedUint32Memory0 = null; cachedUint8Memory0 = null; wasm.__wbindgen_start(); return wasm; } async function __wbg_init(input) { if (wasm !== void 0) return wasm; if (typeof input === "undefined") { input = new URL("svg2png_wasm_bg.wasm", void 0); } const imports = __wbg_get_imports(); if (typeof input === "string" || typeof Request === "function" && input instanceof Request || typeof URL === "function" && input instanceof URL) { input = fetch(input); } __wbg_init_memory(imports); const { instance, module: module2 } = await __wbg_load(await input, imports); return __wbg_finalize_init(instance, module2); } var svg2png_wasm_default = __wbg_init; // lib/index.ts var initialized = false; var initialize = async (mod) => { if (initialized) { throw new Error( "Already initialized. The `initialize` function can be used only once." ); } await svg2png_wasm_default(await mod); initialized = true; }; var createSvg2png = (opts) => { if (!initialized) throw new Error( "WASM has not been initialized. Call `initialize` function." ); let converter; converter = createConverter( opts?.defaultFontFamily?.serifFamily, opts?.defaultFontFamily?.sansSerifFamily, opts?.defaultFontFamily?.cursiveFamily, opts?.defaultFontFamily?.fantasyFamily, opts?.defaultFontFamily?.monospaceFamily ); for (const font of opts?.fonts ?? []) { converter.registerFont(font); } const svg2png2 = (svg, options) => new Promise((resolve, reject) => { try { const result = converter?.convert( svg, options?.scale, options?.width, options?.height, options?.backgroundColor ); if (result) resolve(result); else throw new Error("Converter already disposed."); } catch (e) { if (e instanceof Error) reject(e); else reject(new Error(`${e}`)); } }); svg2png2.dispose = () => { converter?.free(); converter = void 0; }; svg2png2.getLoadedFontFamilies = () => converter?.list_fonts() ?? []; return svg2png2; }; var svg2png = (svg, opts) => { const convert = createSvg2png(opts); return convert(svg, opts).finally(() => convert.dispose()); };