warpo 2.3.0 → 2.5.0-alpha-1
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/asconfig.schema.json +25 -3
- package/create/index.ts +4 -1
- package/dist/debug_server/dapServer.d.ts +1 -0
- package/dist/debug_server/dapServer.js +27 -0
- package/dist/debug_server/dapServer.js.map +1 -0
- package/dist/debug_server/debugSession.d.ts +19 -0
- package/dist/debug_server/debugSession.js +71 -0
- package/dist/debug_server/debugSession.js.map +1 -0
- package/dist/debug_server/tests/debugSession.test.d.ts +1 -0
- package/dist/debug_server/tests/debugSession.test.js +61 -0
- package/dist/debug_server/tests/debugSession.test.js.map +1 -0
- package/dist/debug_server/tests/launcher.d.ts +10 -0
- package/dist/debug_server/tests/launcher.js +21 -0
- package/dist/debug_server/tests/launcher.js.map +1 -0
- package/dist/scripts/lib.d.ts +7 -0
- package/dist/{lib.js → scripts/lib.js} +20 -6
- package/dist/scripts/lib.js.map +1 -0
- package/dist/test_runner/cli.d.ts +2 -0
- package/dist/test_runner/cli.js +85 -0
- package/dist/test_runner/cli.js.map +1 -0
- package/dist/test_runner/core/analyze.d.ts +13 -0
- package/dist/test_runner/core/analyze.js +58 -0
- package/dist/test_runner/core/analyze.js.map +1 -0
- package/dist/test_runner/core/compile.d.ts +4 -0
- package/dist/test_runner/core/compile.js +23 -0
- package/dist/test_runner/core/compile.js.map +1 -0
- package/dist/test_runner/core/compiler.d.ts +11 -0
- package/dist/test_runner/core/compiler.js +47 -0
- package/dist/test_runner/core/compiler.js.map +1 -0
- package/dist/test_runner/core/covRecorder.d.ts +5 -0
- package/dist/test_runner/core/covRecorder.js +26 -0
- package/dist/test_runner/core/covRecorder.js.map +1 -0
- package/dist/test_runner/core/execute.d.ts +4 -0
- package/dist/test_runner/core/execute.js +76 -0
- package/dist/test_runner/core/execute.js.map +1 -0
- package/dist/test_runner/core/executionRecorder.d.ts +52 -0
- package/dist/test_runner/core/executionRecorder.js +164 -0
- package/dist/test_runner/core/executionRecorder.js.map +1 -0
- package/dist/test_runner/core/mockStatusRecorder.d.ts +10 -0
- package/dist/test_runner/core/mockStatusRecorder.js +62 -0
- package/dist/test_runner/core/mockStatusRecorder.js.map +1 -0
- package/dist/test_runner/executionResult.d.ts +11 -0
- package/dist/test_runner/executionResult.js +112 -0
- package/dist/test_runner/executionResult.js.map +1 -0
- package/dist/test_runner/generator/html-generator/genCode.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/genCode.js +124 -0
- package/dist/test_runner/generator/html-generator/genCode.js.map +1 -0
- package/dist/test_runner/generator/html-generator/genFolder.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/genFolder.js +155 -0
- package/dist/test_runner/generator/html-generator/genFolder.js.map +1 -0
- package/dist/test_runner/generator/html-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/index.js +33 -0
- package/dist/test_runner/generator/html-generator/index.js.map +1 -0
- package/dist/test_runner/generator/index.d.ts +9 -0
- package/dist/test_runner/generator/index.js +30 -0
- package/dist/test_runner/generator/index.js.map +1 -0
- package/dist/test_runner/generator/json-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/json-generator/index.js +45 -0
- package/dist/test_runner/generator/json-generator/index.js.map +1 -0
- package/dist/test_runner/generator/table-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/table-generator/index.js +85 -0
- package/dist/test_runner/generator/table-generator/index.js.map +1 -0
- package/dist/test_runner/index.d.ts +3 -0
- package/dist/test_runner/index.js +70 -0
- package/dist/test_runner/index.js.map +1 -0
- package/dist/test_runner/interface.d.ts +36 -0
- package/dist/test_runner/interface.js +12 -0
- package/dist/test_runner/interface.js.map +1 -0
- package/dist/test_runner/parser/index.d.ts +35 -0
- package/dist/test_runner/parser/index.js +146 -0
- package/dist/test_runner/parser/index.js.map +1 -0
- package/dist/test_runner/parser/singleFileAnalysis.d.ts +8 -0
- package/dist/test_runner/parser/singleFileAnalysis.js +51 -0
- package/dist/test_runner/parser/singleFileAnalysis.js.map +1 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.d.ts +16 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.js +97 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.js.map +1 -0
- package/dist/test_runner/testOption.d.ts +16 -0
- package/dist/test_runner/testOption.js +2 -0
- package/dist/test_runner/testOption.js.map +1 -0
- package/dist/test_runner/utils/errorTraceHandler.d.ts +12 -0
- package/dist/test_runner/utils/errorTraceHandler.js +87 -0
- package/dist/test_runner/utils/errorTraceHandler.js.map +1 -0
- package/dist/test_runner/utils/escape.d.ts +1 -0
- package/dist/test_runner/utils/escape.js +14 -0
- package/dist/test_runner/utils/escape.js.map +1 -0
- package/dist/test_runner/utils/index.d.ts +14 -0
- package/dist/test_runner/utils/index.js +88 -0
- package/dist/test_runner/utils/index.js.map +1 -0
- package/dist/test_runner/utils/interface.d.ts +100 -0
- package/dist/test_runner/utils/interface.js +86 -0
- package/dist/test_runner/utils/interface.js.map +1 -0
- package/dist/test_runner/utils/name.d.ts +2 -0
- package/dist/test_runner/utils/name.js +3 -0
- package/dist/test_runner/utils/name.js.map +1 -0
- package/dist/test_runner/utils/pathResolver.d.ts +6 -0
- package/dist/test_runner/utils/pathResolver.js +98 -0
- package/dist/test_runner/utils/pathResolver.js.map +1 -0
- package/dist/test_runner/utils/projectRoot.d.ts +1 -0
- package/dist/test_runner/utils/projectRoot.js +4 -0
- package/dist/test_runner/utils/projectRoot.js.map +1 -0
- package/dist/test_runner/utils/wasm.d.ts +12 -0
- package/dist/test_runner/utils/wasm.js +45 -0
- package/dist/test_runner/utils/wasm.js.map +1 -0
- package/dist/warpo.d.ts +7 -1
- package/dist/warpo.js +83 -3
- package/dist/warpo.js.map +1 -0
- package/package.json +36 -8
- package/tsconfig-warpo.json +2 -3
- package/{assemblyscript/std/assembly → types/std}/index.d.ts +26 -340
- package/types/std/package.json +3 -0
- package/types/std/tsconfig.json +4 -0
- package/types/tsconfig-base.json +15 -0
- package/types/tsconfig-std.json +13 -0
- package/types/warpo/index.d.ts +95 -1
- package/types/wasi_snapshot_preview1/index.d.ts +52 -0
- package/types/wasi_snapshot_preview1/package.json +3 -0
- package/types/wasi_snapshot_preview1/tsconfig.json +4 -0
- package/dist/lib.d.ts +0 -5
package/asconfig.schema.json
CHANGED
|
@@ -58,6 +58,11 @@
|
|
|
58
58
|
"description": "Type of runtime to use, either 'incremental' or 'radical'.",
|
|
59
59
|
"enum": ["incremental", "radical"]
|
|
60
60
|
},
|
|
61
|
+
"host": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"description": "Host API selection for imports.",
|
|
64
|
+
"enum": ["none", "wasi_snapshot_preview1"]
|
|
65
|
+
},
|
|
61
66
|
"stats": {
|
|
62
67
|
"type": "boolean",
|
|
63
68
|
"description": "Whether to output compilation statistics."
|
|
@@ -96,15 +101,32 @@
|
|
|
96
101
|
"maximum": 2
|
|
97
102
|
},
|
|
98
103
|
"use": {
|
|
104
|
+
"$ref": "#/$defs/UseSchema"
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"additionalProperties": false
|
|
108
|
+
},
|
|
109
|
+
"UseSchema": {
|
|
110
|
+
"description": "AssemblyScript --use options. Either an object map (name -> value) or an array of strings in A=B form.",
|
|
111
|
+
"oneOf": [
|
|
112
|
+
{
|
|
99
113
|
"type": "object",
|
|
100
|
-
"description": "
|
|
114
|
+
"description": "Map form: { \"NAME\": \"VALUE\" }",
|
|
101
115
|
"additionalProperties": {
|
|
102
116
|
"type": "string",
|
|
103
117
|
"description": "Value for the use option."
|
|
104
118
|
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"type": "array",
|
|
122
|
+
"description": "Array form: [\"NAME=VALUE\", ...] (same format as CLI --use)",
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"description": "A single use entry in NAME=VALUE form.",
|
|
126
|
+
"pattern": "^\\s*[^=\\s]+\\s*=.*$"
|
|
127
|
+
}
|
|
105
128
|
}
|
|
106
|
-
|
|
107
|
-
"additionalProperties": false
|
|
129
|
+
]
|
|
108
130
|
}
|
|
109
131
|
}
|
|
110
132
|
}
|
package/create/index.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Copyright (C) 2025 wasm-ecosystem
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { createServer } from "node:net";
|
|
4
|
+
import { WarpoDebugSession } from "./debugSession.js";
|
|
5
|
+
const port = Number(process.argv[2]) || 0;
|
|
6
|
+
const server = createServer((socket) => {
|
|
7
|
+
const session = new WarpoDebugSession();
|
|
8
|
+
session.setRunAsServer(true);
|
|
9
|
+
session.start(socket, socket);
|
|
10
|
+
let closed = false;
|
|
11
|
+
const closeSession = () => {
|
|
12
|
+
if (!closed) {
|
|
13
|
+
closed = true;
|
|
14
|
+
session.dispose();
|
|
15
|
+
server.close();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
socket.on("close", closeSession);
|
|
19
|
+
socket.on("error", closeSession);
|
|
20
|
+
});
|
|
21
|
+
server.listen(port, "127.0.0.1", () => {
|
|
22
|
+
const addr = server.address();
|
|
23
|
+
if (addr && typeof addr !== "string") {
|
|
24
|
+
process.stderr.write(`DAP server listening on port ${addr.port}\n`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=dapServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dapServer.js","sourceRoot":"","sources":["../../tools/debug_server/dapServer.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;IACrC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IACtE,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LoggingDebugSession } from "@vscode/debugadapter";
|
|
2
|
+
import type { DebugProtocol } from "@vscode/debugprotocol";
|
|
3
|
+
interface WarpoLaunchRequestArguments extends DebugProtocol.LaunchRequestArguments {
|
|
4
|
+
program: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class WarpoDebugSession extends LoggingDebugSession {
|
|
7
|
+
private static threadId;
|
|
8
|
+
private breakpointId;
|
|
9
|
+
private breakpoints;
|
|
10
|
+
private log;
|
|
11
|
+
protected initializeRequest(response: DebugProtocol.InitializeResponse, _args: DebugProtocol.InitializeRequestArguments): void;
|
|
12
|
+
protected setBreakPointsRequest(response: DebugProtocol.SetBreakpointsResponse, args: DebugProtocol.SetBreakpointsArguments): void;
|
|
13
|
+
protected configurationDoneRequest(response: DebugProtocol.ConfigurationDoneResponse, _args: DebugProtocol.ConfigurationDoneArguments): void;
|
|
14
|
+
protected launchRequest(response: DebugProtocol.LaunchResponse, args: WarpoLaunchRequestArguments): void;
|
|
15
|
+
protected threadsRequest(response: DebugProtocol.ThreadsResponse): void;
|
|
16
|
+
protected disconnectRequest(response: DebugProtocol.DisconnectResponse, _args: DebugProtocol.DisconnectArguments): void;
|
|
17
|
+
private logAllBreakpoints;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Copyright (C) 2025 wasm-ecosystem
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { LoggingDebugSession, InitializedEvent, Thread, Breakpoint, logger } from "@vscode/debugadapter";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
export class WarpoDebugSession extends LoggingDebugSession {
|
|
6
|
+
static threadId = 1;
|
|
7
|
+
breakpointId = 0;
|
|
8
|
+
breakpoints = new Map();
|
|
9
|
+
log(msg) {
|
|
10
|
+
logger.log(msg);
|
|
11
|
+
}
|
|
12
|
+
initializeRequest(response, _args) {
|
|
13
|
+
response.body = response.body || {};
|
|
14
|
+
response.body.supportsConfigurationDoneRequest = true;
|
|
15
|
+
response.body.supportsSetVariable = false;
|
|
16
|
+
response.body.supportsBreakpointLocationsRequest = false;
|
|
17
|
+
this.sendResponse(response);
|
|
18
|
+
this.sendEvent(new InitializedEvent());
|
|
19
|
+
}
|
|
20
|
+
setBreakPointsRequest(response, args) {
|
|
21
|
+
const sourcePath = args.source.path || "";
|
|
22
|
+
const clientLines = args.breakpoints || [];
|
|
23
|
+
const bps = clientLines.map((bp) => {
|
|
24
|
+
const id = ++this.breakpointId;
|
|
25
|
+
const info = {
|
|
26
|
+
id,
|
|
27
|
+
line: bp.line,
|
|
28
|
+
verified: true,
|
|
29
|
+
source: sourcePath,
|
|
30
|
+
};
|
|
31
|
+
this.log(`Breakpoint set: ${path.basename(sourcePath)}:${bp.line}`);
|
|
32
|
+
return info;
|
|
33
|
+
});
|
|
34
|
+
this.breakpoints.set(sourcePath, bps);
|
|
35
|
+
const breakpoints = bps.map((bp) => {
|
|
36
|
+
const dbp = new Breakpoint(bp.verified, bp.line);
|
|
37
|
+
dbp.id = bp.id;
|
|
38
|
+
return dbp;
|
|
39
|
+
});
|
|
40
|
+
response.body = { breakpoints };
|
|
41
|
+
this.sendResponse(response);
|
|
42
|
+
}
|
|
43
|
+
configurationDoneRequest(response, _args) {
|
|
44
|
+
super.configurationDoneRequest(response, _args);
|
|
45
|
+
this.logAllBreakpoints();
|
|
46
|
+
}
|
|
47
|
+
launchRequest(response, args) {
|
|
48
|
+
this.log(`Launch requested for: ${args.program}`);
|
|
49
|
+
this.sendResponse(response);
|
|
50
|
+
}
|
|
51
|
+
threadsRequest(response) {
|
|
52
|
+
response.body = {
|
|
53
|
+
threads: [new Thread(WarpoDebugSession.threadId, "main")],
|
|
54
|
+
};
|
|
55
|
+
this.sendResponse(response);
|
|
56
|
+
}
|
|
57
|
+
disconnectRequest(response, _args) {
|
|
58
|
+
this.log("Debug session ended.");
|
|
59
|
+
this.sendResponse(response);
|
|
60
|
+
}
|
|
61
|
+
logAllBreakpoints() {
|
|
62
|
+
this.log("=== Registered Breakpoints ===");
|
|
63
|
+
for (const [source, bps] of this.breakpoints) {
|
|
64
|
+
for (const bp of bps) {
|
|
65
|
+
this.log(` ${path.basename(source)}:${bp.line} (id=${bp.id}, verified=${bp.verified})`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.log("==============================");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=debugSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugSession.js","sourceRoot":"","sources":["../../tools/debug_server/debugSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright (C) 2025 wasm-ecosystem
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { DebugClient } from "@vscode/debugadapter-testsupport";
|
|
4
|
+
import * as assert from "node:assert/strict";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { launchDapServer } from "./launcher.js";
|
|
9
|
+
const DIRNAME = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const DAP_SERVER = path.resolve(DIRNAME, "..", "..", "..", "dist", "debug_server", "dapServer.js");
|
|
11
|
+
const waitForExit = (child, timeoutMs) => new Promise((resolve) => {
|
|
12
|
+
if (child.exitCode !== null) {
|
|
13
|
+
resolve(true);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const timer = setTimeout(() => {
|
|
17
|
+
child.removeListener("exit", onExit);
|
|
18
|
+
resolve(false);
|
|
19
|
+
}, timeoutMs);
|
|
20
|
+
const onExit = () => {
|
|
21
|
+
clearTimeout(timer);
|
|
22
|
+
resolve(true);
|
|
23
|
+
};
|
|
24
|
+
child.once("exit", onExit);
|
|
25
|
+
});
|
|
26
|
+
void describe("WarpoDebugSession", () => {
|
|
27
|
+
let dc;
|
|
28
|
+
let serverChild;
|
|
29
|
+
beforeEach(async () => {
|
|
30
|
+
const { port, child } = await launchDapServer(DAP_SERVER);
|
|
31
|
+
serverChild = child;
|
|
32
|
+
dc = new DebugClient("", "", "warpo");
|
|
33
|
+
await dc.start(port);
|
|
34
|
+
});
|
|
35
|
+
afterEach(async () => {
|
|
36
|
+
try {
|
|
37
|
+
await dc.stop();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Ignore shutdown errors from the client.
|
|
41
|
+
}
|
|
42
|
+
const exited = await waitForExit(serverChild, 1000);
|
|
43
|
+
if (!exited) {
|
|
44
|
+
serverChild.kill();
|
|
45
|
+
await waitForExit(serverChild, 1000);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
void it("should accept breakpoints and return them verified", async () => {
|
|
49
|
+
await dc.initializeRequest();
|
|
50
|
+
const response = await dc.setBreakpointsRequest({
|
|
51
|
+
source: { path: "test.ts" },
|
|
52
|
+
breakpoints: [{ line: 5 }, { line: 10 }],
|
|
53
|
+
});
|
|
54
|
+
assert.equal(response.body.breakpoints.length, 2);
|
|
55
|
+
assert.equal(response.body.breakpoints[0].verified, true);
|
|
56
|
+
assert.equal(response.body.breakpoints[0].line, 5);
|
|
57
|
+
assert.equal(response.body.breakpoints[1].verified, true);
|
|
58
|
+
assert.equal(response.body.breakpoints[1].line, 10);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=debugSession.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugSession.test.js","sourceRoot":"","sources":["../../../tools/debug_server/tests/debugSession.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChildProcess } from "node:child_process";
|
|
2
|
+
export interface DapServerHandle {
|
|
3
|
+
port: number;
|
|
4
|
+
child: ChildProcess;
|
|
5
|
+
}
|
|
6
|
+
export declare function launchDapServer(script: string): Promise<DapServerHandle>;
|
|
7
|
+
declare const launcher: {
|
|
8
|
+
launchDapServer: typeof launchDapServer;
|
|
9
|
+
};
|
|
10
|
+
export default launcher;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (C) 2025 wasm-ecosystem
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
export function launchDapServer(script) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const child = spawn(process.execPath, [script, "0"], { stdio: ["pipe", "pipe", "pipe"] });
|
|
7
|
+
child.on("error", (err) => reject(err));
|
|
8
|
+
child.on("exit", (code) => reject(new Error(`DAP server exited with code ${code}`)));
|
|
9
|
+
let buffer = "";
|
|
10
|
+
child.stderr.on("data", (chunk) => {
|
|
11
|
+
buffer += chunk.toString();
|
|
12
|
+
const match = /DAP server listening on port (\d+)/.exec(buffer);
|
|
13
|
+
if (match) {
|
|
14
|
+
resolve({ port: Number(match[1]), child });
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const launcher = { launchDapServer };
|
|
20
|
+
export default launcher;
|
|
21
|
+
//# sourceMappingURL=launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../../tools/debug_server/tests/launcher.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,EAAgB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOzD,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE1F,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAErF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,EAAE,eAAe,EAAE,CAAC;AACrC,eAAe,QAAQ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { execSync, spawn } from "node:child_process";
|
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
const dirname = import.meta.dirname;
|
|
6
|
+
const warpoRoot = join(dirname, "..", "..");
|
|
6
7
|
function download_url(version) {
|
|
7
8
|
const arch = os.arch();
|
|
8
9
|
const platform = os.platform();
|
|
@@ -20,16 +21,28 @@ function get_binary() {
|
|
|
20
21
|
if (process.env["WARPO_FORCE_DOWNLOAD"] !== "1" && existsSync(join(dirname, "warpo"))) {
|
|
21
22
|
return join(dirname, "warpo", "warpo_asc");
|
|
22
23
|
}
|
|
23
|
-
const version = process.env["WARPO_DOWNLOAD_VERSION"] ||
|
|
24
|
-
|
|
24
|
+
const version = process.env["WARPO_DOWNLOAD_VERSION"] || JSON.parse(readFileSync(join(warpoRoot, "package.json"), "utf8")).version;
|
|
25
|
+
if (version === "0.0.0") {
|
|
26
|
+
// for development purpose, use local build
|
|
27
|
+
return join(warpoRoot, "build", "warpo", "warpo_asc");
|
|
28
|
+
}
|
|
25
29
|
const url = download_url(version);
|
|
26
30
|
console.log(`downloading warpo from ${url}`);
|
|
27
31
|
execSync(`curl -L ${url} | tar xz -C ${dirname}`, { stdio: "inherit" });
|
|
28
32
|
return join(dirname, "warpo", "warpo_asc");
|
|
29
33
|
}
|
|
30
|
-
export async function
|
|
34
|
+
export async function build(options) {
|
|
31
35
|
const binary = get_binary();
|
|
32
|
-
const ps = spawn(binary, options.argv, {
|
|
36
|
+
const ps = spawn(binary, options.argv, {
|
|
37
|
+
stdio: options.onStdout === undefined ? "inherit" : ["inherit", "pipe", "inherit"],
|
|
38
|
+
env: options.env,
|
|
39
|
+
cwd: options.cwd,
|
|
40
|
+
});
|
|
41
|
+
if (options.onStdout !== undefined) {
|
|
42
|
+
ps.stdout.on("data", (chunk) => {
|
|
43
|
+
options.onStdout(chunk.toString("utf8"));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
33
46
|
return new Promise((resolve, reject) => {
|
|
34
47
|
function shutdown() {
|
|
35
48
|
ps.kill("SIGTERM");
|
|
@@ -37,10 +50,11 @@ export async function main(options) {
|
|
|
37
50
|
}
|
|
38
51
|
process.on("SIGINT", shutdown);
|
|
39
52
|
process.on("SIGTERM", shutdown);
|
|
40
|
-
ps.on("close", (
|
|
53
|
+
ps.on("close", (code) => {
|
|
41
54
|
process.removeListener("SIGINT", shutdown);
|
|
42
55
|
process.removeListener("SIGTERM", shutdown);
|
|
43
|
-
resolve(
|
|
56
|
+
resolve(code ?? 0);
|
|
44
57
|
});
|
|
45
58
|
});
|
|
46
59
|
}
|
|
60
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../tools/scripts/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --experimental-wasi-unstable-preview1
|
|
2
|
+
// Copyright (C) 2025 wasm-ecosystem
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import fs from "fs-extra";
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
import { pathToFileURL } from "node:url";
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
import { validateArgument, start } from "./index.js";
|
|
10
|
+
import { Repository } from "./utils/name.js";
|
|
11
|
+
function createProgram() {
|
|
12
|
+
const program = new Command();
|
|
13
|
+
program
|
|
14
|
+
.option("--config <config file>", "path of config file", "as-test.config.js")
|
|
15
|
+
.option("--output <path>", "coverage report output folder")
|
|
16
|
+
.option("--mode <output mode>", "coverage report output format")
|
|
17
|
+
.option("--coverageLimit [error warning...]", "set warn(yellow) and error(red) upper limit in coverage report")
|
|
18
|
+
.option("--collectCoverage <boolean>", "whether to collect coverage information and report")
|
|
19
|
+
.option("--testFiles <testFiles...>", "run only specified test files")
|
|
20
|
+
.option("--testNamePattern <test name pattern>", "run only tests with a name that matches the regex pattern")
|
|
21
|
+
.option("--onlyFailures", "Run tests that failed in the previous")
|
|
22
|
+
.addHelpText("beforeAll", `submit feature requests or issues: ${Repository}/issues`);
|
|
23
|
+
return program;
|
|
24
|
+
}
|
|
25
|
+
export async function runFromCliArgs(args) {
|
|
26
|
+
const program = createProgram();
|
|
27
|
+
program.parse(args, { from: "user" });
|
|
28
|
+
const options = program.opts();
|
|
29
|
+
const configPath = resolve(".", options["config"]);
|
|
30
|
+
if (!fs.pathExistsSync(configPath)) {
|
|
31
|
+
console.error(chalk.redBright("Miss config file") + "\n");
|
|
32
|
+
console.error(program.helpInformation());
|
|
33
|
+
return 3;
|
|
34
|
+
}
|
|
35
|
+
const config = (await import(pathToFileURL(configPath).href)).default;
|
|
36
|
+
const includes = config.include;
|
|
37
|
+
if (includes === undefined) {
|
|
38
|
+
console.error(chalk.redBright("Miss include in config file") + "\n");
|
|
39
|
+
return 3;
|
|
40
|
+
}
|
|
41
|
+
const excludes = config.exclude || [];
|
|
42
|
+
validateArgument(includes, excludes);
|
|
43
|
+
const testFiles = options["testFiles"] ?? null;
|
|
44
|
+
const onlyFailures = options["onlyFailures"] || false;
|
|
45
|
+
const testNamePattern = options["testNamePattern"] ?? null;
|
|
46
|
+
if (onlyFailures && testNamePattern !== null) {
|
|
47
|
+
console.error(chalk.redBright("Cannot use --onlyFailures and --testNamePattern together") + "\n");
|
|
48
|
+
return 3;
|
|
49
|
+
}
|
|
50
|
+
// if enabled testcase or testNamePattern or onlyFailures, disable collectCoverage by default
|
|
51
|
+
const collectCoverage = (options["collectCoverage"] === "false" ? false : options["collectCoverage"] === "true" ? true : null) ??
|
|
52
|
+
config.collectCoverage ??
|
|
53
|
+
(testFiles === null && options["testNamePattern"] === undefined && !onlyFailures);
|
|
54
|
+
const entryFiles = config.entryFiles ?? null;
|
|
55
|
+
const warnLimitValue = options["coverageLimit"]?.at(1);
|
|
56
|
+
const errorLimitValue = options["coverageLimit"]?.at(0);
|
|
57
|
+
const testOption = {
|
|
58
|
+
includes,
|
|
59
|
+
excludes,
|
|
60
|
+
testFiles,
|
|
61
|
+
entryFiles,
|
|
62
|
+
testNamePattern,
|
|
63
|
+
collectCoverage,
|
|
64
|
+
onlyFailures,
|
|
65
|
+
flags: config.flags || "",
|
|
66
|
+
imports: config.imports || undefined,
|
|
67
|
+
outputFolder: options["output"] || config.output || "coverage",
|
|
68
|
+
mode: options["mode"] || config.mode || "table",
|
|
69
|
+
};
|
|
70
|
+
if (warnLimitValue !== undefined) {
|
|
71
|
+
testOption.warnLimit = Number(warnLimitValue);
|
|
72
|
+
}
|
|
73
|
+
if (errorLimitValue !== undefined) {
|
|
74
|
+
testOption.errorLimit = Number(errorLimitValue);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return await start(testOption);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
console.error(chalk.redBright("framework crash, error message: ") + chalk.yellowBright(`${e?.stack}`) + "\n");
|
|
81
|
+
console.error(`please submit an issue at ${Repository}/issues`);
|
|
82
|
+
return 255;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../tools/test_runner/cli.ts"],"names":[],"mappings":";AAEA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;SAE5E,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;SAC1D,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,CAAC;SAE/D,MAAM,CAAC,oCAAoC,EAAE,gEAAgE,CAAC;SAC9G,MAAM,CAAC,6BAA6B,EAAE,oDAAoD,CAAC;SAE3F,MAAM,CAAC,4BAA4B,EAAE,+BAA+B,CAAC;SACrE,MAAM,CAAC,uCAAuC,EAAE,2DAA2D,CAAC;SAC5G,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;SACjE,WAAW,CAAC,WAAW,EAAE,sCAAsC,UAAU,SAAS,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;IAE3D,IAAI,YAAY,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,0DAA0D,CAAC,GAAG,IAAI,CAAC,CAAC;QAClG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,6FAA6F;IAC7F,MAAM,eAAe,GACnB,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtG,MAAM,CAAC,eAAe;QACtB,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,CAAC;IAEpF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;IAE7C,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,UAAU,GAAe;QAC7B,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,UAAU;QAEV,eAAe;QACf,eAAe;QACf,YAAY;QAEZ,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;QAEpC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU;QAC9D,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO;KAChD,CAAC;IAEF,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,kCAAkC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9G,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,SAAS,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Will transform all source file to get all relative functions
|
|
3
|
+
*/
|
|
4
|
+
import { TestOption } from "../testOption.js";
|
|
5
|
+
type AnalyzeOption = Pick<TestOption, "includes" | "excludes" | "testFiles" | "testNamePattern" | "entryFiles">;
|
|
6
|
+
interface UnittestPackage {
|
|
7
|
+
readonly testCodePaths: string[];
|
|
8
|
+
readonly sourceCodePaths: string[];
|
|
9
|
+
readonly entryFiles: string[];
|
|
10
|
+
readonly filterByName: (fullTestName: string) => boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function analyze({ includes, excludes, testNamePattern, testFiles, entryFiles }: AnalyzeOption, failedTestNames: string[]): UnittestPackage;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Will transform all source file to get all relative functions
|
|
3
|
+
*/
|
|
4
|
+
import ignore from "ignore";
|
|
5
|
+
import { join, relative, resolve } from "node:path";
|
|
6
|
+
import { getIncludeFiles } from "../utils/pathResolver.js";
|
|
7
|
+
import assert from "node:assert";
|
|
8
|
+
export function analyze({ includes, excludes, testNamePattern, testFiles, entryFiles }, failedTestNames) {
|
|
9
|
+
const testCodePaths = testFiles ?? getRelatedFiles(includes, excludes, (path) => path.endsWith(".test.ts"));
|
|
10
|
+
const sourceCodePaths = getRelatedFiles(includes, excludes, (path) => path.endsWith(".ts") && !path.endsWith(".test.ts"));
|
|
11
|
+
return {
|
|
12
|
+
// if specify testFiles, use testFiles for unittest
|
|
13
|
+
// otherwise, get testFiles(*.test.ts) in includes directory
|
|
14
|
+
testCodePaths: testCodePaths,
|
|
15
|
+
// get all source files in includes directory
|
|
16
|
+
sourceCodePaths: sourceCodePaths,
|
|
17
|
+
entryFiles: entryFiles ?? getEntryFiles(includes, sourceCodePaths),
|
|
18
|
+
filterByName: getFilterByName(testNamePattern, failedTestNames),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function getEntryFiles(includes, sourceCodePaths) {
|
|
22
|
+
// entry files must be in source code paths
|
|
23
|
+
return includes
|
|
24
|
+
.map((include) => (include.endsWith(".ts") ? include : join(include, "index.ts")))
|
|
25
|
+
.filter((include) => include.endsWith(".ts") && sourceCodePaths.includes(include));
|
|
26
|
+
}
|
|
27
|
+
function getFilterByName(testNamePattern, failedTestNames) {
|
|
28
|
+
assert(!(testNamePattern !== null && failedTestNames.length > 0), "Cannot use testNamePattern and failedTestNames together");
|
|
29
|
+
if (testNamePattern !== null) {
|
|
30
|
+
const regexPattern = new RegExp(testNamePattern);
|
|
31
|
+
return (fullTestName) => regexPattern.test(fullTestName);
|
|
32
|
+
}
|
|
33
|
+
if (failedTestNames.length > 0) {
|
|
34
|
+
return (fullTestName) => failedTestNames.includes(fullTestName);
|
|
35
|
+
}
|
|
36
|
+
return () => true;
|
|
37
|
+
}
|
|
38
|
+
// a. include in config
|
|
39
|
+
// b. exclude in config
|
|
40
|
+
function getRelatedFiles(includes, excludes, filter) {
|
|
41
|
+
const result = [];
|
|
42
|
+
const includeFiles = getIncludeFiles(includes, (path) => path.endsWith(".ts")); // a
|
|
43
|
+
const exc = ignore().add(excludes);
|
|
44
|
+
for (const path of includeFiles) {
|
|
45
|
+
const relativePath = relative(".", path);
|
|
46
|
+
if (relativePath.startsWith("..")) {
|
|
47
|
+
throw new Error(`file ${path} out of scope (${resolve(".")})`);
|
|
48
|
+
}
|
|
49
|
+
if (exc.ignores(relativePath)) {
|
|
50
|
+
continue; // ab
|
|
51
|
+
}
|
|
52
|
+
if (filter(path)) {
|
|
53
|
+
result.push(path.replaceAll(/\\/g, "/"));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../tools/test_runner/core/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TestOption } from "../testOption.js";
|
|
2
|
+
import { WebAssemblyModule } from "../utils/wasm.js";
|
|
3
|
+
export type CompileOption = Pick<TestOption, "outputFolder" | "flags" | "collectCoverage">;
|
|
4
|
+
export declare function compile(testCodePaths: string[], entryFiles: string[], option: CompileOption): Promise<WebAssemblyModule>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { join, relative } from "node:path";
|
|
2
|
+
import { compileImpl } from "./compiler.js";
|
|
3
|
+
import { WebAssemblyModule } from "../utils/wasm.js";
|
|
4
|
+
export async function compile(testCodePaths, entryFiles, option) {
|
|
5
|
+
const { outputFolder, flags, collectCoverage } = option;
|
|
6
|
+
const ret = new WebAssemblyModule(join(outputFolder, "test").replaceAll(/\\/g, "/"));
|
|
7
|
+
await compileImpl({
|
|
8
|
+
sources: combineWithEntryFiles({ testCodePaths, entryFiles }),
|
|
9
|
+
output: ret,
|
|
10
|
+
userDefinedFlags: flags,
|
|
11
|
+
collectCoverage,
|
|
12
|
+
});
|
|
13
|
+
return ret;
|
|
14
|
+
}
|
|
15
|
+
function getNewPath(newFolder, oldFolder, srcPath) {
|
|
16
|
+
return join(newFolder, relative(oldFolder, srcPath)).replaceAll(/\\/g, "/");
|
|
17
|
+
}
|
|
18
|
+
function combineWithEntryFiles({ testCodePaths, entryFiles, }) {
|
|
19
|
+
// Because AS has recursive import resolution issue.
|
|
20
|
+
// put entryFiles firstly will force ASC compile entry file firstly, which can avoid compilation failed due to test files import ordering
|
|
21
|
+
return entryFiles.concat(testCodePaths);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../tools/test_runner/core/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,aAAuB,EACvB,UAAoB,EACpB,MAAqB;IAErB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,WAAW,CAAC;QAChB,OAAO,EAAE,qBAAqB,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG;QACX,gBAAgB,EAAE,KAAK;QACvB,eAAe;KAChB,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe;IACvE,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,EAC7B,aAAa,EACb,UAAU,GAIX;IACC,oDAAoD;IACpD,yIAAyI;IACzI,OAAO,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WebAssemblyModule } from "../utils/wasm.js";
|
|
2
|
+
export declare class CompilationError extends Error {
|
|
3
|
+
constructor(errorMessage: string | undefined);
|
|
4
|
+
}
|
|
5
|
+
export interface CompilationOption {
|
|
6
|
+
sources: string[];
|
|
7
|
+
output: WebAssemblyModule;
|
|
8
|
+
userDefinedFlags: string;
|
|
9
|
+
collectCoverage: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function compileImpl(option: CompilationOption): Promise<void>;
|