You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.3 KiB
75 lines
2.3 KiB
/** |
|
* This script is used to convert the wasm modules into js modules, with the binary converted into base64 encoded strings. |
|
*/ |
|
const fs = require("fs"); |
|
const path = require("path"); |
|
|
|
const wasmModules = [ |
|
{ |
|
pkg: `../node_modules/fonteditor-core`, |
|
src: `./wasm/woff2.wasm`, |
|
dest: `../packages/excalidraw/fonts/wasm/woff2-wasm.ts`, |
|
}, |
|
{ |
|
pkg: `../node_modules/harfbuzzjs`, |
|
src: `./wasm/hb-subset.wasm`, |
|
dest: `../packages/excalidraw/fonts/wasm/hb-subset-wasm.ts`, |
|
}, |
|
]; |
|
|
|
for (const { pkg, src, dest } of wasmModules) { |
|
const packagePath = path.resolve(__dirname, pkg, "package.json"); |
|
const licensePath = path.resolve(__dirname, pkg, "LICENSE"); |
|
const sourcePath = path.resolve(__dirname, src); |
|
const destPath = path.resolve(__dirname, dest); |
|
|
|
const { |
|
name, |
|
version, |
|
author, |
|
license, |
|
authors, |
|
licenses, |
|
} = require(packagePath); |
|
|
|
const licenseContent = fs.readFileSync(licensePath, "utf-8") || ""; |
|
const base64 = fs.readFileSync(sourcePath, "base64"); |
|
const content = `// GENERATED CODE -- DO NOT EDIT! |
|
/* eslint-disable */ |
|
// @ts-nocheck |
|
|
|
/** |
|
* The following wasm module is generated with \`scripts/buildWasm.js\` and encoded as base64. |
|
* |
|
* The source of this content is taken from the package "${name}", which contains the following metadata: |
|
* |
|
* @author ${author || JSON.stringify(authors)} |
|
* @license ${license || JSON.stringify(licenses)} |
|
* @version ${version} |
|
|
|
${licenseContent} |
|
*/ |
|
|
|
// faster atob alternative - https://github.com/evanw/esbuild/issues/1534#issuecomment-902738399 |
|
const __toBinary = /* @__PURE__ */ (() => { |
|
const table = new Uint8Array(128); |
|
for (let i = 0; i < 64; i++) |
|
{table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;} |
|
return (base64) => { |
|
const n = base64.length; const bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); |
|
for (let i2 = 0, j = 0; i2 < n; ) { |
|
const c0 = table[base64.charCodeAt(i2++)]; const c1 = table[base64.charCodeAt(i2++)]; |
|
const c2 = table[base64.charCodeAt(i2++)]; const c3 = table[base64.charCodeAt(i2++)]; |
|
bytes[j++] = c0 << 2 | c1 >> 4; |
|
bytes[j++] = c1 << 4 | c2 >> 2; |
|
bytes[j++] = c2 << 6 | c3; |
|
} |
|
return bytes; |
|
}; |
|
})(); |
|
|
|
export default __toBinary(\`${base64}\`); |
|
`; |
|
|
|
fs.writeFileSync(destPath, content); |
|
}
|
|
|