circuit-json-to-gltf 0.0.34 → 0.0.35
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.
|
@@ -4,7 +4,13 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var
|
|
7
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
+
}) : x)(function(x) {
|
|
10
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
+
});
|
|
13
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
8
14
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
15
|
};
|
|
10
16
|
var __copyProps = (to, from, except, desc) => {
|
|
@@ -25,6 +31,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
31
|
));
|
|
26
32
|
|
|
27
33
|
export {
|
|
34
|
+
__require,
|
|
28
35
|
__commonJS,
|
|
29
36
|
__toESM
|
|
30
37
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// lib/assets/tscircuit-font.ts
|
|
2
|
+
var tscircuit_font_default = "T1RUTwAJAIAAAwAQQ0ZGIKuvW2wAAAcQAABAFU9TLzJpz2aeAAABAAAAAGBjbWFwE8sVhwAABEwAAAKkaGVhZCwnHEgAAACcAAAANmhoZWEC+gLtAAAA1AAAACRobXR4G8AAAAAARygAAAFAbWF4cABQUAAAAAD4AAAABm5hbWUZQ94BAAABYAAAAutwb3N0AAMAAAAABvAAAAAgAAEAAAABAADLVwAFXw889QADA+gAAAAA5SnsOAAAAADlKew4/8H/vAL7AzwAAAADAAIAAAAAAAAAAQAAAvj/EAAAA4wAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFAAAFAAAFAAAAADA40B9AAFAAACigK7AAAAjAKKArsAAAHfADEBAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABYWFhYAEAAIgB6Avj/EAAAAzwARAAAAAEAAAAAAmkDPAAAAAAAAAAAACIBngABAAAAAAAAAAEAWQABAAAAAAABABEAAAABAAAAAAACAAcAMwABAAAAAAADABsA/AABAAAAAAAEABkASAABAAAAAAAFAAsA2wABAAAAAAAGABgAkwABAAAAAAAHAAEAWQABAAAAAAAIAAEAWQABAAAAAAAJAAEAWQABAAAAAAAKAAEAWQABAAAAAAALAAEAWQABAAAAAAAMAAEAWQABAAAAAAANAAEAWQABAAAAAAAOAAEAWQABAAAAAAAQABEAAAABAAAAAAARAAcAMwADAAEECQAAAAIAgwADAAEECQABACIAEQADAAEECQACAA4AOgADAAEECQADADYBFwADAAEECQAEADIAYQADAAEECQAFABYA5gADAAEECQAGADAAqwADAAEECQAHAAIAgwADAAEECQAIAAIAgwADAAEECQAJAAIAgwADAAEECQAKAAIAgwADAAEECQALAAIAgwADAAEECQAMAAIAgwADAAEECQANAAIAgwADAAEECQAOAAIAgwADAAEECQAQACIAEQADAAEECQARAA4AOlRzY2lyY3VpdEFscGhhYmV0AFQAcwBjAGkAcgBjAHUAaQB0AEEAbABwAGgAYQBiAGUAdFJlZ3VsYXIAUgBlAGcAdQBsAGEAclRzY2lyY3VpdEFscGhhYmV0IFJlZ3VsYXIAVABzAGMAaQByAGMAdQBpAHQAQQBsAHAAaABhAGIAZQB0ACAA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kHEFhnEFfnUFdnwFc4YF/MSLBYSMBYOMBYeNBYaMBYWQBYSOBYePBYeOBYeSBYaRBYmQBYmPBYmTBYmTBYuQBYqQBYyTBYyUBY2PBYyQBY+SBY6TBY+OBY2QBZKPBZCRBfgD94QF++KLBXOQBXaaBX6hBYalBZClBZiiBaCZBaORBfjEiwWSiQWTiwWPiAWQigWRhwWShwWPhwWPiQWPhAWQhQWNhgWNhgWNgwWNgwWLhgWMhgWKgwWKgwWJhgWKhgWHhAWIhAWHhwWJhwWEhgWGhgUOAAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAADjAAAA4wAAAOMAAA=";
|
|
3
|
+
|
|
4
|
+
export {
|
|
5
|
+
tscircuit_font_default
|
|
6
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
__commonJS,
|
|
3
3
|
__toESM
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QGM4M3NI.js";
|
|
5
5
|
|
|
6
6
|
// node_modules/@jscad/modeling/src/utils/flatten.js
|
|
7
7
|
var require_flatten = __commonJS({
|
|
@@ -14552,10 +14552,14 @@ async function renderBoardLayer(circuitJson, options) {
|
|
|
14552
14552
|
}
|
|
14553
14553
|
async function convertSvgToPng(svgString, resolution, backgroundColor) {
|
|
14554
14554
|
if (typeof window !== "undefined" && typeof document !== "undefined") {
|
|
14555
|
-
|
|
14555
|
+
const { svgToPngDataUrl } = await import("./svg-to-png-browser-VH734VGT.js");
|
|
14556
|
+
return await svgToPngDataUrl(svgString, {
|
|
14557
|
+
width: resolution,
|
|
14558
|
+
background: backgroundColor
|
|
14559
|
+
});
|
|
14556
14560
|
} else {
|
|
14557
14561
|
try {
|
|
14558
|
-
const { svgToPngDataUrl } = await import("./svg-to-png-
|
|
14562
|
+
const { svgToPngDataUrl } = await import("./svg-to-png-XFKMCXOE.js");
|
|
14559
14563
|
return await svgToPngDataUrl(svgString, {
|
|
14560
14564
|
width: resolution,
|
|
14561
14565
|
background: backgroundColor
|
|
@@ -15744,6 +15748,38 @@ function transformMesh(mesh, translation, rotation, scale) {
|
|
|
15744
15748
|
}
|
|
15745
15749
|
return result;
|
|
15746
15750
|
}
|
|
15751
|
+
function convertMeshToGLTFOrientation(mesh) {
|
|
15752
|
+
const result = {
|
|
15753
|
+
positions: [...mesh.positions],
|
|
15754
|
+
normals: [...mesh.normals],
|
|
15755
|
+
texcoords: [...mesh.texcoords],
|
|
15756
|
+
indices: [...mesh.indices]
|
|
15757
|
+
};
|
|
15758
|
+
if (mesh.colors) {
|
|
15759
|
+
result.colors = [...mesh.colors];
|
|
15760
|
+
}
|
|
15761
|
+
for (let i = 0; i < result.positions.length; i += 3) {
|
|
15762
|
+
const x = result.positions[i];
|
|
15763
|
+
if (typeof x === "number") {
|
|
15764
|
+
result.positions[i] = -x;
|
|
15765
|
+
}
|
|
15766
|
+
}
|
|
15767
|
+
for (let i = 0; i < result.normals.length; i += 3) {
|
|
15768
|
+
const nx = result.normals[i];
|
|
15769
|
+
if (typeof nx === "number") {
|
|
15770
|
+
result.normals[i] = -nx;
|
|
15771
|
+
}
|
|
15772
|
+
}
|
|
15773
|
+
for (let i = 0; i < result.indices.length; i += 3) {
|
|
15774
|
+
const i1 = result.indices[i + 1];
|
|
15775
|
+
const i2 = result.indices[i + 2];
|
|
15776
|
+
if (typeof i1 === "number" && typeof i2 === "number") {
|
|
15777
|
+
result.indices[i + 1] = i2;
|
|
15778
|
+
result.indices[i + 2] = i1;
|
|
15779
|
+
}
|
|
15780
|
+
}
|
|
15781
|
+
return result;
|
|
15782
|
+
}
|
|
15747
15783
|
function getBounds(positions) {
|
|
15748
15784
|
if (positions.length === 0) {
|
|
15749
15785
|
return {
|
|
@@ -15831,6 +15867,7 @@ var GLTFBuilder = class {
|
|
|
15831
15867
|
meshData = createBoxMesh(box.size);
|
|
15832
15868
|
}
|
|
15833
15869
|
meshData = transformMesh(meshData, box.center, box.rotation);
|
|
15870
|
+
meshData = convertMeshToGLTFOrientation(meshData);
|
|
15834
15871
|
let materialIndex = defaultMaterialIndex;
|
|
15835
15872
|
if (box.color) {
|
|
15836
15873
|
materialIndex = this.addMaterialFromColor(box.color, !box.mesh);
|
|
@@ -15884,10 +15921,8 @@ var GLTFBuilder = class {
|
|
|
15884
15921
|
}
|
|
15885
15922
|
const primitives = [];
|
|
15886
15923
|
for (const { meshData, materialIndex } of meshDataArray) {
|
|
15887
|
-
const transformedMeshData =
|
|
15888
|
-
meshData,
|
|
15889
|
-
box.center,
|
|
15890
|
-
box.rotation
|
|
15924
|
+
const transformedMeshData = convertMeshToGLTFOrientation(
|
|
15925
|
+
transformMesh(meshData, box.center, box.rotation)
|
|
15891
15926
|
);
|
|
15892
15927
|
const positionAccessorIndex = this.addAccessor(
|
|
15893
15928
|
transformedMeshData.positions,
|
|
@@ -16055,10 +16090,8 @@ var GLTFBuilder = class {
|
|
|
16055
16090
|
vertexIndex += 3;
|
|
16056
16091
|
}
|
|
16057
16092
|
const meshData = { positions, normals, texcoords, indices };
|
|
16058
|
-
const transformedMeshData =
|
|
16059
|
-
meshData,
|
|
16060
|
-
box.center,
|
|
16061
|
-
box.rotation
|
|
16093
|
+
const transformedMeshData = convertMeshToGLTFOrientation(
|
|
16094
|
+
transformMesh(meshData, box.center, box.rotation)
|
|
16062
16095
|
);
|
|
16063
16096
|
const positionAccessorIndex = this.addAccessor(
|
|
16064
16097
|
transformedMeshData.positions,
|
|
@@ -16177,10 +16210,8 @@ var GLTFBuilder = class {
|
|
|
16177
16210
|
const meshIndex = this.meshes.length;
|
|
16178
16211
|
const primitives = [];
|
|
16179
16212
|
for (const [faceName, faceData] of Object.entries(faceMeshes)) {
|
|
16180
|
-
const transformedFaceData =
|
|
16181
|
-
faceData,
|
|
16182
|
-
box.center,
|
|
16183
|
-
box.rotation
|
|
16213
|
+
const transformedFaceData = convertMeshToGLTFOrientation(
|
|
16214
|
+
transformMesh(faceData, box.center, box.rotation)
|
|
16184
16215
|
);
|
|
16185
16216
|
const positionAccessorIndex = this.addAccessor(
|
|
16186
16217
|
transformedFaceData.positions,
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
tscircuit_font_default
|
|
3
|
+
} from "./chunk-W5ZY3YD5.js";
|
|
4
|
+
import "./chunk-QGM4M3NI.js";
|
|
5
|
+
|
|
6
|
+
// lib/utils/svg-to-png.ts
|
|
7
|
+
import { Resvg } from "@resvg/resvg-js";
|
|
8
|
+
var isNode = typeof process !== "undefined" && process.versions && process.versions.node;
|
|
9
|
+
async function svgToPng(svgString, options = {}) {
|
|
10
|
+
const fontBuffer = Buffer.from(tscircuit_font_default, "base64");
|
|
11
|
+
let tempFontPath;
|
|
12
|
+
let cleanupFn;
|
|
13
|
+
if (isNode) {
|
|
14
|
+
try {
|
|
15
|
+
const [fs, os, path] = await Promise.all([
|
|
16
|
+
import("fs"),
|
|
17
|
+
import("os"),
|
|
18
|
+
import("path")
|
|
19
|
+
]);
|
|
20
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "resvg-font-"));
|
|
21
|
+
tempFontPath = path.join(tempDir, "tscircuit-font.ttf");
|
|
22
|
+
fs.writeFileSync(tempFontPath, fontBuffer);
|
|
23
|
+
cleanupFn = () => {
|
|
24
|
+
try {
|
|
25
|
+
fs.unlinkSync(tempFontPath);
|
|
26
|
+
} catch {
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
} catch (err) {
|
|
30
|
+
console.warn(
|
|
31
|
+
"Failed to create temporary font file, falling back to browser mode:",
|
|
32
|
+
err
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const opts = {
|
|
38
|
+
background: options.background,
|
|
39
|
+
fitTo: options.width ? {
|
|
40
|
+
mode: "width",
|
|
41
|
+
value: options.width
|
|
42
|
+
} : options.height ? {
|
|
43
|
+
mode: "height",
|
|
44
|
+
value: options.height
|
|
45
|
+
} : void 0,
|
|
46
|
+
font: {
|
|
47
|
+
fontFiles: tempFontPath ? [tempFontPath, ...options.fonts || []] : options.fonts || [],
|
|
48
|
+
loadSystemFonts: false,
|
|
49
|
+
defaultFontFamily: "TscircuitAlphabet",
|
|
50
|
+
monospaceFamily: "TscircuitAlphabet",
|
|
51
|
+
sansSerifFamily: "TscircuitAlphabet"
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const resvg = new Resvg(svgString, opts);
|
|
55
|
+
const pngData = resvg.render();
|
|
56
|
+
const pngBuffer = pngData.asPng();
|
|
57
|
+
return Buffer.from(pngBuffer);
|
|
58
|
+
} finally {
|
|
59
|
+
if (cleanupFn) {
|
|
60
|
+
cleanupFn();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function svgToPngDataUrl(svgString, options = {}) {
|
|
65
|
+
const pngBuffer = await svgToPng(svgString, options);
|
|
66
|
+
return `data:image/png;base64,${pngBuffer.toString("base64")}`;
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
svgToPng,
|
|
70
|
+
svgToPngDataUrl
|
|
71
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import {
|
|
2
|
+
tscircuit_font_default
|
|
3
|
+
} from "./chunk-W5ZY3YD5.js";
|
|
4
|
+
import {
|
|
5
|
+
__require
|
|
6
|
+
} from "./chunk-QGM4M3NI.js";
|
|
7
|
+
|
|
8
|
+
// lib/utils/svg-to-png-browser.ts
|
|
9
|
+
import { Resvg, initWasm } from "@resvg/resvg-wasm";
|
|
10
|
+
var wasmInitialized = false;
|
|
11
|
+
async function ensureWasmInitialized() {
|
|
12
|
+
if (!wasmInitialized) {
|
|
13
|
+
try {
|
|
14
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
15
|
+
const { readFileSync } = await import("fs");
|
|
16
|
+
const { dirname, join } = await import("path");
|
|
17
|
+
try {
|
|
18
|
+
const packagePath = __require.resolve("@resvg/resvg-wasm/package.json");
|
|
19
|
+
const wasmPath = join(dirname(packagePath), "index_bg.wasm");
|
|
20
|
+
const wasmBuffer = readFileSync(wasmPath);
|
|
21
|
+
await initWasm(wasmBuffer);
|
|
22
|
+
} catch (pathError) {
|
|
23
|
+
try {
|
|
24
|
+
const modulePath = __require.resolve("@resvg/resvg-wasm");
|
|
25
|
+
const wasmPath = join(dirname(modulePath), "index_bg.wasm");
|
|
26
|
+
const wasmBuffer = readFileSync(wasmPath);
|
|
27
|
+
await initWasm(wasmBuffer);
|
|
28
|
+
} catch (fallbackError) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Failed to locate WASM file: ${pathError.message}, ${fallbackError.message}`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
try {
|
|
36
|
+
const wasmUrl = await import("@resvg/resvg-wasm/index_bg.wasm?url");
|
|
37
|
+
await initWasm(fetch(wasmUrl.default));
|
|
38
|
+
} catch {
|
|
39
|
+
await initWasm(
|
|
40
|
+
fetch("https://unpkg.com/@resvg/resvg-wasm@2.6.2/index_bg.wasm")
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
wasmInitialized = true;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error("Failed to initialize WASM:", error);
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function svgToPng(svgString, options = {}) {
|
|
52
|
+
await ensureWasmInitialized();
|
|
53
|
+
const base64ToUint8Array = (base64) => {
|
|
54
|
+
const binaryString = atob(base64);
|
|
55
|
+
const len = binaryString.length;
|
|
56
|
+
const bytes = new Uint8Array(len);
|
|
57
|
+
for (let i = 0; i < len; i++) {
|
|
58
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
59
|
+
}
|
|
60
|
+
return bytes;
|
|
61
|
+
};
|
|
62
|
+
const fontBuffer = base64ToUint8Array(tscircuit_font_default);
|
|
63
|
+
const opts = {
|
|
64
|
+
background: options.background,
|
|
65
|
+
font: {
|
|
66
|
+
loadSystemFonts: false,
|
|
67
|
+
fontBuffers: [fontBuffer],
|
|
68
|
+
defaultFontFamily: "TscircuitAlphabet",
|
|
69
|
+
monospaceFamily: "TscircuitAlphabet",
|
|
70
|
+
sansSerifFamily: "TscircuitAlphabet"
|
|
71
|
+
},
|
|
72
|
+
fitTo: options.width ? {
|
|
73
|
+
mode: "width",
|
|
74
|
+
value: options.width
|
|
75
|
+
} : options.height ? {
|
|
76
|
+
mode: "height",
|
|
77
|
+
value: options.height
|
|
78
|
+
} : void 0
|
|
79
|
+
};
|
|
80
|
+
const resvg = new Resvg(svgString, opts);
|
|
81
|
+
const pngData = resvg.render();
|
|
82
|
+
const pngBuffer = pngData.asPng();
|
|
83
|
+
return pngBuffer;
|
|
84
|
+
}
|
|
85
|
+
async function svgToPngDataUrl(svgString, options = {}) {
|
|
86
|
+
const pngBuffer = await svgToPng(svgString, options);
|
|
87
|
+
let binary = "";
|
|
88
|
+
const bytes = new Uint8Array(pngBuffer);
|
|
89
|
+
const len = bytes.byteLength;
|
|
90
|
+
for (let i = 0; i < len; i++) {
|
|
91
|
+
binary += String.fromCharCode(bytes[i]);
|
|
92
|
+
}
|
|
93
|
+
const base64 = btoa(binary);
|
|
94
|
+
return `data:image/png;base64,${base64}`;
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
svgToPng,
|
|
98
|
+
svgToPngDataUrl
|
|
99
|
+
};
|
package/package.json
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"name": "circuit-json-to-gltf",
|
|
3
3
|
"main": "dist/index.js",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.35",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "bun test tests/",
|
|
8
8
|
"format": "biome format --write .",
|
|
9
9
|
"format:check": "biome format .",
|
|
10
10
|
"build:site": "cosmos-export",
|
|
11
|
+
"build:font": "bun scripts/encode-font.ts",
|
|
11
12
|
"start": "cosmos",
|
|
12
13
|
"build": "tsup-node"
|
|
13
14
|
},
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"@google/model-viewer": "^4.1.0",
|
|
25
26
|
"@resvg/resvg-js": "^2.6.2",
|
|
26
27
|
"@resvg/resvg-wasm": "^2.6.2",
|
|
28
|
+
"@tscircuit/alphabet": "^0.0.8",
|
|
27
29
|
"@tscircuit/circuit-json-util": "^0.0.72",
|
|
28
30
|
"@types/bun": "latest",
|
|
29
31
|
"@types/react": "^19.1.9",
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import "./chunk-JSBRDJBE.js";
|
|
2
|
-
|
|
3
|
-
// lib/utils/svg-to-png.ts
|
|
4
|
-
import { Resvg } from "@resvg/resvg-js";
|
|
5
|
-
async function svgToPng(svgString, options = {}) {
|
|
6
|
-
const opts = {
|
|
7
|
-
background: options.background,
|
|
8
|
-
fitTo: options.width ? {
|
|
9
|
-
mode: "width",
|
|
10
|
-
value: options.width
|
|
11
|
-
} : options.height ? {
|
|
12
|
-
mode: "height",
|
|
13
|
-
value: options.height
|
|
14
|
-
} : void 0,
|
|
15
|
-
font: {
|
|
16
|
-
fontFiles: options.fonts || []
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const resvg = new Resvg(svgString, opts);
|
|
20
|
-
const pngData = resvg.render();
|
|
21
|
-
const pngBuffer = pngData.asPng();
|
|
22
|
-
return Buffer.from(pngBuffer);
|
|
23
|
-
}
|
|
24
|
-
async function svgToPngDataUrl(svgString, options = {}) {
|
|
25
|
-
const pngBuffer = await svgToPng(svgString, options);
|
|
26
|
-
return `data:image/png;base64,${pngBuffer.toString("base64")}`;
|
|
27
|
-
}
|
|
28
|
-
export {
|
|
29
|
-
svgToPng,
|
|
30
|
-
svgToPngDataUrl
|
|
31
|
-
};
|