@fluffylabs/anan-as 1.1.4 → 1.1.6-38dddc8
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.
- package/README.md +107 -12
- package/dist/bin/build-inline.js +70 -0
- package/dist/bin/index.js +293 -0
- package/dist/bin/src/fuzz.js +155 -0
- package/dist/bin/src/log-host-call.js +41 -0
- package/dist/bin/src/test-json.js +135 -0
- package/dist/bin/src/trace-parse.js +315 -0
- package/dist/bin/src/trace-replay.js +130 -0
- package/dist/bin/src/tracer.js +64 -0
- package/dist/bin/src/utils.js +25 -0
- package/dist/bin/test.js +1 -0
- package/dist/build/compiler-inline.d.ts +11 -0
- package/dist/build/compiler-inline.js +22 -0
- package/dist/build/compiler.d.ts +26 -0
- package/dist/build/compiler.js +76 -0
- package/dist/build/compiler.wasm +0 -0
- package/{build → dist/build}/debug-inline.d.ts +1 -1
- package/dist/build/debug-inline.js +22 -0
- package/{build → dist/build}/debug-raw-inline.d.ts +1 -1
- package/dist/build/debug-raw-inline.js +22 -0
- package/{build → dist/build}/debug-raw.d.ts +155 -37
- package/{build → dist/build}/debug-raw.js +128 -41
- package/dist/build/debug-raw.wasm +0 -0
- package/{build → dist/build}/debug.d.ts +155 -37
- package/{build → dist/build}/debug.js +141 -43
- package/dist/build/debug.wasm +0 -0
- package/{build → dist/build}/release-inline.d.ts +1 -1
- package/dist/build/release-inline.js +22 -0
- package/{build → dist/build}/release-mini-inline.d.ts +1 -1
- package/dist/build/release-mini-inline.js +22 -0
- package/{build → dist/build}/release-mini.d.ts +155 -37
- package/{build → dist/build}/release-mini.js +141 -43
- package/dist/build/release-mini.wasm +0 -0
- package/{build → dist/build}/release-stub-inline.d.ts +1 -1
- package/dist/build/release-stub-inline.js +22 -0
- package/{build → dist/build}/release-stub.d.ts +155 -37
- package/{build → dist/build}/release-stub.js +141 -43
- package/dist/build/release-stub.wasm +0 -0
- package/{build → dist/build}/release.d.ts +155 -37
- package/{build → dist/build}/release.js +141 -43
- package/dist/build/release.wasm +0 -0
- package/{build → dist/build}/test-inline.d.ts +1 -1
- package/dist/build/test-inline.js +22 -0
- package/dist/build/test.wasm +0 -0
- package/dist/test/test-as.js +3 -0
- package/dist/test/test-gas-cost.js +57 -0
- package/dist/test/test-trace-replay.js +19 -0
- package/dist/test/test-w3f.js +121 -0
- package/dist/web/bump-version.js +7 -0
- package/package.json +48 -37
- package/build/debug-inline.js +0 -22
- package/build/debug-raw-inline.js +0 -22
- package/build/debug-raw.wasm +0 -0
- package/build/debug.wasm +0 -0
- package/build/release-inline.js +0 -22
- package/build/release-mini-inline.js +0 -22
- package/build/release-mini.wasm +0 -0
- package/build/release-stub-inline.js +0 -22
- package/build/release-stub.wasm +0 -0
- package/build/release.wasm +0 -0
- package/build/test-inline.js +0 -22
- package/build/test.wasm +0 -0
- /package/{build → dist/build}/test.d.ts +0 -0
- /package/{build → dist/build}/test.js +0 -0
|
Binary file
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "json-bigint-patch";
|
|
3
|
+
import * as assert from "node:assert";
|
|
4
|
+
import { ERR, OK, read, run } from "../bin/src/test-json.js";
|
|
5
|
+
import { disassemble, getGasCosts, HasMetadata, InputKind } from "../build/release.js";
|
|
6
|
+
// Run the CLI application
|
|
7
|
+
main();
|
|
8
|
+
// Main function
|
|
9
|
+
function main() {
|
|
10
|
+
const options = {
|
|
11
|
+
isDebug: false,
|
|
12
|
+
isSilent: false,
|
|
13
|
+
useSbrkGas: false,
|
|
14
|
+
};
|
|
15
|
+
run(processGasCost, options);
|
|
16
|
+
}
|
|
17
|
+
function processGasCost(data, options, filePath) {
|
|
18
|
+
if (options.isDebug) {
|
|
19
|
+
console.info(`🤖 reading ${filePath}`);
|
|
20
|
+
}
|
|
21
|
+
// input
|
|
22
|
+
const input = {
|
|
23
|
+
program: read(data, "program"),
|
|
24
|
+
blockGasCosts: read(data, "block_gas_costs"),
|
|
25
|
+
};
|
|
26
|
+
if (options.isDebug) {
|
|
27
|
+
const assembly = disassemble(input.program, InputKind.Generic, HasMetadata.No);
|
|
28
|
+
console.info("===========");
|
|
29
|
+
console.info(assembly);
|
|
30
|
+
console.info("\n^^^^^^^^^^^\n");
|
|
31
|
+
}
|
|
32
|
+
const result = asMap(getGasCosts(input.program, InputKind.Generic, HasMetadata.No));
|
|
33
|
+
// silent mode - just put our vals into expected (comparison done externally)
|
|
34
|
+
if (options.isSilent) {
|
|
35
|
+
data.block_gas_costs = result;
|
|
36
|
+
if (filePath !== "-") {
|
|
37
|
+
console.log(JSON.stringify(data, null, 2));
|
|
38
|
+
}
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
assert.deepStrictEqual(result, input.blockGasCosts);
|
|
43
|
+
console.log(`${OK} ${filePath}`);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
console.log(`${ERR} ${filePath}`);
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
function asMap(costs) {
|
|
52
|
+
const obj = {};
|
|
53
|
+
for (const { pc, gas } of costs) {
|
|
54
|
+
obj[pc] = Number(gas);
|
|
55
|
+
}
|
|
56
|
+
return obj;
|
|
57
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as assert from "node:assert";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { replayTraceFile } from "../bin/src/trace-replay.js";
|
|
6
|
+
import { HasMetadata } from "../build/release.js";
|
|
7
|
+
const fixture = fileURLToPath(new URL("./fixtures/io-trace-output.log", import.meta.url));
|
|
8
|
+
if (!existsSync(fixture)) {
|
|
9
|
+
throw new Error(`fixture not found: ${fixture}`);
|
|
10
|
+
}
|
|
11
|
+
const summary = replayTraceFile(fixture, {
|
|
12
|
+
logs: false,
|
|
13
|
+
hasMetadata: HasMetadata.Yes,
|
|
14
|
+
verify: true,
|
|
15
|
+
});
|
|
16
|
+
console.log(summary);
|
|
17
|
+
assert.ok(summary.ecalliCount > 0, "Expected at least one ecalli entry");
|
|
18
|
+
assert.strictEqual(summary.termination.type, "HALT");
|
|
19
|
+
assert.ok(summary.success, "Expected successful re-execution");
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "json-bigint-patch";
|
|
3
|
+
import * as assert from "node:assert";
|
|
4
|
+
import { ERR, OK, read, run } from "../bin/src/test-json.js";
|
|
5
|
+
import { disassemble, HasMetadata, InputKind, prepareProgram, runProgram } from "../build/release.js";
|
|
6
|
+
const ignored = [
|
|
7
|
+
"inst_load_u8_nok",
|
|
8
|
+
"inst_store_imm_indirect_u16_with_offset_nok",
|
|
9
|
+
"inst_store_imm_indirect_u32_with_offset_nok",
|
|
10
|
+
"inst_store_imm_indirect_u64_with_offset_nok",
|
|
11
|
+
"inst_store_imm_indirect_u8_with_offset_nok",
|
|
12
|
+
"inst_store_imm_u8_trap_inaccessible",
|
|
13
|
+
"inst_store_imm_u8_trap_read_only",
|
|
14
|
+
"inst_store_indirect_u16_with_offset_nok",
|
|
15
|
+
"inst_store_indirect_u32_with_offset_nok",
|
|
16
|
+
"inst_store_indirect_u64_with_offset_nok",
|
|
17
|
+
"inst_store_indirect_u8_with_offset_nok",
|
|
18
|
+
"inst_store_u8_trap_inaccessible",
|
|
19
|
+
"inst_store_u8_trap_read_only",
|
|
20
|
+
];
|
|
21
|
+
// Run the CLI application
|
|
22
|
+
main();
|
|
23
|
+
// Main function
|
|
24
|
+
function main() {
|
|
25
|
+
const options = {
|
|
26
|
+
isDebug: false,
|
|
27
|
+
isSilent: false,
|
|
28
|
+
useSbrkGas: false,
|
|
29
|
+
};
|
|
30
|
+
run(processW3f, options);
|
|
31
|
+
}
|
|
32
|
+
function processW3f(data, options) {
|
|
33
|
+
if (options.isDebug) {
|
|
34
|
+
console.debug(`🤖 Running ${data.name}`);
|
|
35
|
+
}
|
|
36
|
+
if (ignored.includes(data.name)) {
|
|
37
|
+
if (options.isDebug) {
|
|
38
|
+
console.info(`⏭️ Skipping ${data.name}`);
|
|
39
|
+
}
|
|
40
|
+
return data;
|
|
41
|
+
}
|
|
42
|
+
// input
|
|
43
|
+
const input = {
|
|
44
|
+
registers: read(data, "initial-regs").map((x) => BigInt(x)),
|
|
45
|
+
pc: read(data, "initial-pc"),
|
|
46
|
+
pageMap: asPageMap(read(data, "initial-page-map")),
|
|
47
|
+
memory: asChunks(read(data, "initial-memory")),
|
|
48
|
+
gas: BigInt(read(data, "initial-gas")),
|
|
49
|
+
program: read(data, "program"),
|
|
50
|
+
};
|
|
51
|
+
if (options.isDebug) {
|
|
52
|
+
const assembly = disassemble(input.program, InputKind.Generic, HasMetadata.No);
|
|
53
|
+
console.info("===========");
|
|
54
|
+
console.info(assembly);
|
|
55
|
+
console.info("\n^^^^^^^^^^^\n");
|
|
56
|
+
}
|
|
57
|
+
const exe = prepareProgram(InputKind.Generic, HasMetadata.No, input.program, input.registers, input.pageMap, input.memory, [], 16);
|
|
58
|
+
const result = runProgram(exe, input.gas, input.pc, options.isDebug, options.useSbrkGas);
|
|
59
|
+
const status = statusAsString(result.status);
|
|
60
|
+
// silent mode - just put our vals into expected (comparison done externally)
|
|
61
|
+
if (options.isSilent) {
|
|
62
|
+
data["expected-pc"] = result.pc;
|
|
63
|
+
data["expected-gas"] = result.gas;
|
|
64
|
+
data["expected-status"] = status;
|
|
65
|
+
data["expected-regs"] = result.registers;
|
|
66
|
+
data["expected-page-fault-address"] = result.exitCode;
|
|
67
|
+
return data;
|
|
68
|
+
}
|
|
69
|
+
// compare with expected values
|
|
70
|
+
const expected = {
|
|
71
|
+
// just copy JAM-output result field
|
|
72
|
+
result: result.result,
|
|
73
|
+
status: read(data, "expected-status"),
|
|
74
|
+
registers: read(data, "expected-regs").map((x) => BigInt(x)),
|
|
75
|
+
pc: read(data, "expected-pc"),
|
|
76
|
+
memory: asChunks(read(data, "expected-memory")),
|
|
77
|
+
gas: BigInt(read(data, "expected-gas")),
|
|
78
|
+
exitCode: read(data, "expected-page-fault-address", 0),
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
assert.deepStrictEqual({
|
|
82
|
+
...result,
|
|
83
|
+
status,
|
|
84
|
+
}, expected);
|
|
85
|
+
console.log(`${OK} ${data.name}`);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
console.log(`${ERR} ${data.name}`);
|
|
89
|
+
throw e;
|
|
90
|
+
}
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
93
|
+
function asChunks(chunks) {
|
|
94
|
+
return chunks.map((chunk) => {
|
|
95
|
+
chunk.data = read(chunk, "contents");
|
|
96
|
+
delete chunk.contents;
|
|
97
|
+
return chunk;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
var Access;
|
|
101
|
+
(function (Access) {
|
|
102
|
+
Access[Access["Read"] = 1] = "Read";
|
|
103
|
+
Access[Access["Write"] = 2] = "Write";
|
|
104
|
+
})(Access || (Access = {}));
|
|
105
|
+
function asPageMap(pages) {
|
|
106
|
+
return pages.map((page) => {
|
|
107
|
+
page.access = read(page, "is-writable") ? Access.Write : Access.Read;
|
|
108
|
+
return page;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function statusAsString(status) {
|
|
112
|
+
const map = {
|
|
113
|
+
255: "ok",
|
|
114
|
+
0: "halt",
|
|
115
|
+
1: "panic",
|
|
116
|
+
2: "page-fault",
|
|
117
|
+
3: "host",
|
|
118
|
+
4: "oog",
|
|
119
|
+
};
|
|
120
|
+
return map[status] || `unknown(${status})`;
|
|
121
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
const META_FILE = './web/pvm-metadata.json';
|
|
3
|
+
const metadata = JSON.parse(fs.readFileSync(META_FILE, 'utf-8'));
|
|
4
|
+
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8'));
|
|
5
|
+
const hash = process.argv[2] || 'xxxxxx';
|
|
6
|
+
metadata.version = `${packageJson.version}-${hash.substring(0, 6)}`;
|
|
7
|
+
fs.writeFileSync(META_FILE, JSON.stringify(metadata, null, 2));
|
package/package.json
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluffylabs/anan-as",
|
|
3
3
|
"description": "AssemblyScript PVM interpreter.",
|
|
4
|
-
"version": "1.1.
|
|
5
|
-
"main": "./bin/index.
|
|
4
|
+
"version": "1.1.6-38dddc8",
|
|
5
|
+
"main": "./dist/bin/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"anan-as": "./dist/bin/index.js"
|
|
8
|
+
},
|
|
6
9
|
"repository": {
|
|
7
10
|
"url": "https://github.com/tomusdrw/anan-as"
|
|
8
11
|
},
|
|
9
12
|
"scripts": {
|
|
10
13
|
"asbuild": "npm run asbuild:debug && npm run asbuild:release",
|
|
11
|
-
"asbuild:all": "npm run asbuild:debug && npm run asbuild:release && npm run asbuild:raw && npm run asbuild:release-mini && npm run asbuild:release-stub",
|
|
14
|
+
"asbuild:all": "npm run asbuild:debug && npm run asbuild:release && npm run asbuild:raw && npm run asbuild:release-mini && npm run asbuild:release-stub && npm run asbuild:compiler",
|
|
12
15
|
"asbuild:debug": "asc assembly/index.ts --target debug",
|
|
13
16
|
"asbuild:release": "asc assembly/index.ts --uncheckedBehavior=always --target release",
|
|
14
17
|
"asbuild:release-mini": "asc assembly/index.ts --uncheckedBehavior=always --target release-mini",
|
|
15
18
|
"asbuild:release-stub": "asc assembly/index.ts --uncheckedBehavior=always --target release-stub",
|
|
16
19
|
"asbuild:raw": "asc assembly/index.ts --target raw",
|
|
20
|
+
"asbuild:compiler": "asc assembly/index-compiler.ts --uncheckedBehavior=always --target compiler",
|
|
17
21
|
"asbuild:test": "asc assembly/test-run.ts --target test",
|
|
18
22
|
"build": "npm run asbuild:all && npm run asbuild:test && npm run tsbuild && npm run build:inline && npm run cp-build",
|
|
19
23
|
"build:inline": "tsx ./bin/build-inline.ts",
|
|
20
|
-
"cp-build": "rm -rf ./web/build; cp -r ./build ./web/",
|
|
24
|
+
"cp-build": "rm -rf ./web/build; cp -r ./dist/build ./web/",
|
|
21
25
|
"format": "biome format --write",
|
|
22
|
-
"fuzz": "tsx ./bin/fuzz.ts",
|
|
26
|
+
"fuzz": "tsx ./bin/src/fuzz.ts",
|
|
23
27
|
"lint": "biome lint --write; biome check --write",
|
|
24
28
|
"prestart": "npm run build",
|
|
25
29
|
"pretest:w3f": "npm run build",
|
|
@@ -28,10 +32,10 @@
|
|
|
28
32
|
"qa": "biome ci",
|
|
29
33
|
"qa-fix": "npm run format; npm run lint",
|
|
30
34
|
"start": "tsx ./bin/index.ts",
|
|
31
|
-
"test": "npm run asbuild:test && tsx ./
|
|
35
|
+
"test": "npm run asbuild:test && tsx ./test/test-as.ts && tsx ./test/test-trace-replay.ts",
|
|
32
36
|
"tsbuild": "tsc",
|
|
33
|
-
"test:w3f": "tsx ./
|
|
34
|
-
"test:gas-cost": "tsx ./
|
|
37
|
+
"test:w3f": "tsx ./test/test-w3f.ts",
|
|
38
|
+
"test:gas-cost": "tsx ./test/test-gas-cost.ts",
|
|
35
39
|
"update-version": "tsx ./web/bump-version.ts $GITHUB_SHA",
|
|
36
40
|
"web": "npx live-server ./web"
|
|
37
41
|
},
|
|
@@ -40,65 +44,72 @@
|
|
|
40
44
|
"author": "Fluffy Labs",
|
|
41
45
|
"license": "MPL-2.0",
|
|
42
46
|
"devDependencies": {
|
|
43
|
-
"
|
|
44
|
-
"@biomejs/biome": "^2.3.8",
|
|
47
|
+
"@biomejs/biome": "^2.3.11",
|
|
45
48
|
"@typeberry/lib": "^0.5.1",
|
|
49
|
+
"@types/minimist": "^1.2.5",
|
|
46
50
|
"@types/node": "^25.0.0",
|
|
47
51
|
"assemblyscript": "^0.28.8",
|
|
52
|
+
"json-bigint-patch": "^0.0.8",
|
|
53
|
+
"minimist": "^1.2.8",
|
|
48
54
|
"tsx": "^4.20.6",
|
|
49
55
|
"typescript": "^5.9.3"
|
|
50
56
|
},
|
|
51
57
|
"files": [
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
58
|
+
"dist/**/*.wasm",
|
|
59
|
+
"dist/**/*.js",
|
|
60
|
+
"dist/**/*.d.ts",
|
|
55
61
|
"README.md",
|
|
56
62
|
"LICENSE"
|
|
57
63
|
],
|
|
58
64
|
"exports": {
|
|
59
65
|
".": {
|
|
60
|
-
"import": "./build/release.js",
|
|
61
|
-
"types": "./build/release.d.ts"
|
|
66
|
+
"import": "./dist/build/release.js",
|
|
67
|
+
"types": "./dist/build/release.d.ts"
|
|
62
68
|
},
|
|
63
69
|
"./debug": {
|
|
64
|
-
"import": "./build/debug.js",
|
|
65
|
-
"types": "./build/debug.d.ts"
|
|
70
|
+
"import": "./dist/build/debug.js",
|
|
71
|
+
"types": "./dist/build/debug.d.ts"
|
|
66
72
|
},
|
|
67
73
|
"./release": {
|
|
68
|
-
"import": "./build/release.js",
|
|
69
|
-
"types": "./build/release.d.ts"
|
|
74
|
+
"import": "./dist/build/release.js",
|
|
75
|
+
"types": "./dist/build/release.d.ts"
|
|
70
76
|
},
|
|
71
77
|
"./release-mini": {
|
|
72
|
-
"import": "./build/release-mini.js",
|
|
73
|
-
"types": "./build/release-mini.d.ts"
|
|
78
|
+
"import": "./dist/build/release-mini.js",
|
|
79
|
+
"types": "./dist/build/release-mini.d.ts"
|
|
74
80
|
},
|
|
75
81
|
"./release-stub": {
|
|
76
|
-
"import": "./build/release-stub.js",
|
|
77
|
-
"types": "./build/release-stub.d.ts"
|
|
82
|
+
"import": "./dist/build/release-stub.js",
|
|
83
|
+
"types": "./dist/build/release-stub.d.ts"
|
|
78
84
|
},
|
|
79
85
|
"./raw": {
|
|
80
|
-
"import": "./build/debug-raw.js",
|
|
81
|
-
"types": "./build/debug-raw.d.ts"
|
|
86
|
+
"import": "./dist/build/debug-raw.js",
|
|
87
|
+
"types": "./dist/build/debug-raw.d.ts"
|
|
82
88
|
},
|
|
83
89
|
"./debug-inline": {
|
|
84
|
-
"import": "./build/debug-inline.js",
|
|
85
|
-
"types": "./build/debug-inline.d.ts"
|
|
90
|
+
"import": "./dist/build/debug-inline.js",
|
|
91
|
+
"types": "./dist/build/debug-inline.d.ts"
|
|
86
92
|
},
|
|
87
93
|
"./release-inline": {
|
|
88
|
-
"import": "./build/release-inline.js",
|
|
89
|
-
"types": "./build/release-inline.d.ts"
|
|
94
|
+
"import": "./dist/build/release-inline.js",
|
|
95
|
+
"types": "./dist/build/release-inline.d.ts"
|
|
90
96
|
},
|
|
91
97
|
"./release-mini-inline": {
|
|
92
|
-
"import": "./build/release-mini-inline.js",
|
|
93
|
-
"types": "./build/release-mini-inline.d.ts"
|
|
98
|
+
"import": "./dist/build/release-mini-inline.js",
|
|
99
|
+
"types": "./dist/build/release-mini-inline.d.ts"
|
|
94
100
|
},
|
|
95
101
|
"./release-stub-inline": {
|
|
96
|
-
"import": "./build/release-stub-inline.js",
|
|
97
|
-
"types": "./build/release-stub-inline.d.ts"
|
|
102
|
+
"import": "./dist/build/release-stub-inline.js",
|
|
103
|
+
"types": "./dist/build/release-stub-inline.d.ts"
|
|
104
|
+
},
|
|
105
|
+
"./compiler": {
|
|
106
|
+
"import": "./dist/build/compiler.js",
|
|
107
|
+
"types": "./dist/build/compiler.d.ts"
|
|
98
108
|
},
|
|
99
|
-
"./debug.wasm": "./build/debug.wasm",
|
|
100
|
-
"./release.wasm": "./build/release.wasm",
|
|
101
|
-
"./release-mini.wasm": "./build/release-mini.wasm",
|
|
102
|
-
"./release-stub.wasm": "./build/release-stub.wasm"
|
|
109
|
+
"./debug.wasm": "./dist/build/debug.wasm",
|
|
110
|
+
"./release.wasm": "./dist/build/release.wasm",
|
|
111
|
+
"./release-mini.wasm": "./dist/build/release-mini.wasm",
|
|
112
|
+
"./release-stub.wasm": "./dist/build/release-stub.wasm",
|
|
113
|
+
"./compiler.wasm": "./dist/build/compiler.wasm"
|
|
103
114
|
}
|
|
104
115
|
}
|