mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-10-31 02:44:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * 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);
 | |
| }
 | 
