mirror of
https://github.com/denoland/deno.git
synced 2024-12-26 17:19:06 -05:00
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||
|
|
||
|
import { encode as base64Encode } from "../../encoding/base64.ts";
|
||
|
|
||
|
// 1. build wasm
|
||
|
async function buildWasm(path: string): Promise<void> {
|
||
|
const cmd = [
|
||
|
"wasm-pack",
|
||
|
"build",
|
||
|
"--target",
|
||
|
"web",
|
||
|
"--release",
|
||
|
"-d",
|
||
|
path,
|
||
|
];
|
||
|
const builder = Deno.run({ cmd });
|
||
|
const status = await builder.status();
|
||
|
|
||
|
if (!status.success) {
|
||
|
console.error(`Failed to build wasm: ${status.code}`);
|
||
|
Deno.exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 2. encode wasm
|
||
|
async function encodeWasm(wasmPath: string): Promise<string> {
|
||
|
const wasm = await Deno.readFile(`${wasmPath}/deno_hash_bg.wasm`);
|
||
|
return base64Encode(wasm);
|
||
|
}
|
||
|
|
||
|
// 3. generate script
|
||
|
async function generate(wasm: string, output: string): Promise<void> {
|
||
|
const initScript = await Deno.readTextFile(`${output}/deno_hash.js`);
|
||
|
const denoHashScript =
|
||
|
"/* eslint-disable */\n" +
|
||
|
"//deno-fmt-ignore-file\n" +
|
||
|
`import * as base64 from "../../encoding/base64.ts";` +
|
||
|
`export const source = base64.decode("${wasm}");` +
|
||
|
initScript;
|
||
|
|
||
|
await Deno.writeFile("wasm.js", new TextEncoder().encode(denoHashScript));
|
||
|
}
|
||
|
|
||
|
const OUTPUT_DIR = "./out";
|
||
|
|
||
|
await buildWasm(OUTPUT_DIR);
|
||
|
const wasm = await encodeWasm(OUTPUT_DIR);
|
||
|
await generate(wasm, OUTPUT_DIR);
|