reeval 0.0.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/LICENSE +202 -0
- package/THIRD_PARTY_NOTICES.md +2160 -0
- package/assets/package.json +9 -0
- package/assets/pnpm-lock.yaml +1336 -0
- package/dist/agent-DVHkx8aT.js +532 -0
- package/dist/agent-DVHkx8aT.js.map +1 -0
- package/dist/analysis-CxSCt1YY.js +16 -0
- package/dist/analysis-CxSCt1YY.js.map +1 -0
- package/dist/assemble-B-nmz8oH.js +695 -0
- package/dist/assemble-B-nmz8oH.js.map +1 -0
- package/dist/assemble-CmRVDZ2Q.js +2 -0
- package/dist/attempt-BdRQ9jKX.js +176 -0
- package/dist/attempt-BdRQ9jKX.js.map +1 -0
- package/dist/bridge/index.mjs +1911 -0
- package/dist/bridge/package.json +13 -0
- package/dist/bridge/pnpm-lock.yaml +1041 -0
- package/dist/bridge/pnpm-workspace.yaml +2 -0
- package/dist/budget-DBUrH4jX.js +8 -0
- package/dist/budget-DBUrH4jX.js.map +1 -0
- package/dist/cli--CQ3Iy9q.js +1865 -0
- package/dist/cli--CQ3Iy9q.js.map +1 -0
- package/dist/cli-spec-DKAu09Gi.js +478 -0
- package/dist/cli-spec-DKAu09Gi.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors-QV9dFVhN.js +34 -0
- package/dist/colors-QV9dFVhN.js.map +1 -0
- package/dist/command-BSJzHMtP.js +280 -0
- package/dist/command-BSJzHMtP.js.map +1 -0
- package/dist/command-CEm8PZ1N.js +1043 -0
- package/dist/command-CEm8PZ1N.js.map +1 -0
- package/dist/command-D-jnQWVG.js +673 -0
- package/dist/command-D-jnQWVG.js.map +1 -0
- package/dist/command-DQAvbG7d.js +432 -0
- package/dist/command-DQAvbG7d.js.map +1 -0
- package/dist/commands-A4udfyKZ.js +2 -0
- package/dist/commands-CF8mOfiu.js +207 -0
- package/dist/commands-CF8mOfiu.js.map +1 -0
- package/dist/config-Cuj0kVYj.js +415 -0
- package/dist/config-Cuj0kVYj.js.map +1 -0
- package/dist/context-loi9OCZv.js +106 -0
- package/dist/context-loi9OCZv.js.map +1 -0
- package/dist/core-tLN-z1Be.js +96 -0
- package/dist/core-tLN-z1Be.js.map +1 -0
- package/dist/db-Cjj2ZsfQ.js +2 -0
- package/dist/db-DxDzMhtB.js +827 -0
- package/dist/db-DxDzMhtB.js.map +1 -0
- package/dist/debug-D24NOQH1.js +89 -0
- package/dist/debug-D24NOQH1.js.map +1 -0
- package/dist/debug-SEmW4w8f.js +2 -0
- package/dist/dist-BZXYHN2X.js +1673 -0
- package/dist/dist-BZXYHN2X.js.map +1 -0
- package/dist/docker-DQDZWXF9.js +20 -0
- package/dist/docker-DQDZWXF9.js.map +1 -0
- package/dist/docker-DnWAVdEm.js +2 -0
- package/dist/docker-oSbCExHL.js +153 -0
- package/dist/docker-oSbCExHL.js.map +1 -0
- package/dist/doctor-CxlH1pDM.js +525 -0
- package/dist/doctor-CxlH1pDM.js.map +1 -0
- package/dist/egress-73SQfKdx.js +619 -0
- package/dist/egress-73SQfKdx.js.map +1 -0
- package/dist/env-BQqj93gu.js +21 -0
- package/dist/env-BQqj93gu.js.map +1 -0
- package/dist/environment-Mz7wvrtD.js +552 -0
- package/dist/environment-Mz7wvrtD.js.map +1 -0
- package/dist/errors-C9w_ud7g.js +160 -0
- package/dist/errors-C9w_ud7g.js.map +1 -0
- package/dist/errors-CSxfJ4qu.js +11 -0
- package/dist/errors-CSxfJ4qu.js.map +1 -0
- package/dist/files--6CEUXm7.js +2 -0
- package/dist/files-BLlrhU4-.js +62 -0
- package/dist/files-BLlrhU4-.js.map +1 -0
- package/dist/files-Bd25OAQH.js +2 -0
- package/dist/files-BvHCFWgD.js +2 -0
- package/dist/files-D2-qn_Dl.js +275 -0
- package/dist/files-D2-qn_Dl.js.map +1 -0
- package/dist/files-bF2fPuT9.js +99 -0
- package/dist/files-bF2fPuT9.js.map +1 -0
- package/dist/git-D6hMeieS.js +44 -0
- package/dist/git-D6hMeieS.js.map +1 -0
- package/dist/harness-ls5aX1UO.js +131 -0
- package/dist/harness-ls5aX1UO.js.map +1 -0
- package/dist/harness.d.ts +74 -0
- package/dist/harness.js +2 -0
- package/dist/header-DzFDoMCI.js +78 -0
- package/dist/header-DzFDoMCI.js.map +1 -0
- package/dist/ids-Bp6ut7ZD.js +49 -0
- package/dist/ids-Bp6ut7ZD.js.map +1 -0
- package/dist/images-Cc1-coFc.js +286 -0
- package/dist/images-Cc1-coFc.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +1959 -0
- package/dist/index.js.map +1 -0
- package/dist/init-CFljS8BJ.js +344 -0
- package/dist/init-CFljS8BJ.js.map +1 -0
- package/dist/init-z2ZPn9Tj.js +2 -0
- package/dist/invocations-rXktgSAn.js +157 -0
- package/dist/invocations-rXktgSAn.js.map +1 -0
- package/dist/jiti-BOLXpKyG.js +46 -0
- package/dist/jiti-BOLXpKyG.js.map +1 -0
- package/dist/judge-D8Uf4dA9.js +146 -0
- package/dist/judge-D8Uf4dA9.js.map +1 -0
- package/dist/judge.d.ts +21 -0
- package/dist/judge.js +19 -0
- package/dist/judge.js.map +1 -0
- package/dist/live-Bs3LReMV.js +98 -0
- package/dist/live-Bs3LReMV.js.map +1 -0
- package/dist/matchers-DyLvm7EG.js +374 -0
- package/dist/matchers-DyLvm7EG.js.map +1 -0
- package/dist/model-BdO79gWz.js +44 -0
- package/dist/model-BdO79gWz.js.map +1 -0
- package/dist/model-CDL98xue.js +725 -0
- package/dist/model-CDL98xue.js.map +1 -0
- package/dist/model-v-0_Ik7S.js +2 -0
- package/dist/node-kG64XxdE.js +506 -0
- package/dist/node-kG64XxdE.js.map +1 -0
- package/dist/opencode-providers-DZuD_oYt.js +3149 -0
- package/dist/opencode-providers-DZuD_oYt.js.map +1 -0
- package/dist/options-CAQhu--C.js +452 -0
- package/dist/options-CAQhu--C.js.map +1 -0
- package/dist/patch-BkKje4cp.js +69 -0
- package/dist/patch-BkKje4cp.js.map +1 -0
- package/dist/paths-CBvm6pap.js +72 -0
- package/dist/paths-CBvm6pap.js.map +1 -0
- package/dist/plan-gwk6dJ8c.js +237 -0
- package/dist/plan-gwk6dJ8c.js.map +1 -0
- package/dist/preflight-BtubXKQ8.js +2 -0
- package/dist/preflight-BypZMNBG.js +185 -0
- package/dist/preflight-BypZMNBG.js.map +1 -0
- package/dist/prepare-Cwv0bHs_.js +3 -0
- package/dist/prepare-D6Uzcubb.js +213 -0
- package/dist/prepare-D6Uzcubb.js.map +1 -0
- package/dist/provenance-Dfb8YY5Y.js +129 -0
- package/dist/provenance-Dfb8YY5Y.js.map +1 -0
- package/dist/provider-BDbNOQhQ.js +2 -0
- package/dist/provider-CmAYTQQs.js +14 -0
- package/dist/provider-CmAYTQQs.js.map +1 -0
- package/dist/providers-2p3ylMHI.js +107 -0
- package/dist/providers-2p3ylMHI.js.map +1 -0
- package/dist/providers-BUOxitcT.js +2 -0
- package/dist/query-CFATHZmV.js +91 -0
- package/dist/query-CFATHZmV.js.map +1 -0
- package/dist/query-DR4m6CXf.js +2 -0
- package/dist/record-DQ8wzyco.js +99 -0
- package/dist/record-DQ8wzyco.js.map +1 -0
- package/dist/redact-C4fL_bZP.js +167 -0
- package/dist/redact-C4fL_bZP.js.map +1 -0
- package/dist/results-CeXb8Wde.js +37 -0
- package/dist/results-CeXb8Wde.js.map +1 -0
- package/dist/root-CFDjpWuc.js +110 -0
- package/dist/root-CFDjpWuc.js.map +1 -0
- package/dist/sandbox-By2gkdkC.js +133 -0
- package/dist/sandbox-By2gkdkC.js.map +1 -0
- package/dist/sandbox.d.ts +41 -0
- package/dist/sandbox.js +2 -0
- package/dist/server-Bi61uiY0.js +350 -0
- package/dist/server-Bi61uiY0.js.map +1 -0
- package/dist/server-CsSBL8NC.js +2 -0
- package/dist/source-BXzrmof5.js +2 -0
- package/dist/source-Bsfa3LZH.js +40 -0
- package/dist/source-Bsfa3LZH.js.map +1 -0
- package/dist/src-55j1zNHH.js +3 -0
- package/dist/src-AEwxd1UP.js +602 -0
- package/dist/src-AEwxd1UP.js.map +1 -0
- package/dist/src-BDwSuyIo.js +3 -0
- package/dist/src-BQyMiWri.js +490 -0
- package/dist/src-BQyMiWri.js.map +1 -0
- package/dist/src-C-LHyTSV.js +3 -0
- package/dist/src-Cmp-7YrD.js +1136 -0
- package/dist/src-Cmp-7YrD.js.map +1 -0
- package/dist/src-D0RdqpNb.js +252 -0
- package/dist/src-D0RdqpNb.js.map +1 -0
- package/dist/src-D8KYzxBX.js +793 -0
- package/dist/src-D8KYzxBX.js.map +1 -0
- package/dist/src-DEgff9Z7.js +4 -0
- package/dist/src-DXx_29pq.js +567 -0
- package/dist/src-DXx_29pq.js.map +1 -0
- package/dist/src-DwwiVLqv.js +2937 -0
- package/dist/src-DwwiVLqv.js.map +1 -0
- package/dist/src-N7E_mfcZ.js +2 -0
- package/dist/src-W9g-y5X5.js +3 -0
- package/dist/src-daS0wKH2.js +3 -0
- package/dist/state-Cyw3QTsN.js +2 -0
- package/dist/state-DZ7eqb1F.js +167 -0
- package/dist/state-DZ7eqb1F.js.map +1 -0
- package/dist/stats-BNAHlNMD.js +114 -0
- package/dist/stats-BNAHlNMD.js.map +1 -0
- package/dist/studio-app/assets/index-D6XyfFSH.js +58 -0
- package/dist/studio-app/assets/index-xwzWdcE_.css +2 -0
- package/dist/studio-app/favicon.svg +1 -0
- package/dist/studio-app/index.html +15 -0
- package/dist/summary-D7Ttky0z.js +166 -0
- package/dist/summary-D7Ttky0z.js.map +1 -0
- package/dist/text-gEcKjAyp.js +29 -0
- package/dist/text-gEcKjAyp.js.map +1 -0
- package/dist/types-C5vI3g1C.js +9 -0
- package/dist/types-C5vI3g1C.js.map +1 -0
- package/dist/types-DLec-6Cx.d.ts +1535 -0
- package/dist/usage-DsYUqIUM.js +24 -0
- package/dist/usage-DsYUqIUM.js.map +1 -0
- package/dist/view/index.d.ts +645 -0
- package/dist/view/index.js +8 -0
- package/dist/views-BrHOv6wg.js +220 -0
- package/dist/views-BrHOv6wg.js.map +1 -0
- package/dist/views-CwCWLWqo.js +3 -0
- package/dist/worker-entry-DnYkANPG.js +506 -0
- package/dist/worker-entry-DnYkANPG.js.map +1 -0
- package/dist/workspace-C2S0Z6gl.js +327 -0
- package/dist/workspace-C2S0Z6gl.js.map +1 -0
- package/dist/workspace-CyoXG6CY.js +2 -0
- package/docker/Dockerfile +19 -0
- package/package.json +79 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import { t as UsageError } from "./errors-CSxfJ4qu.js";
|
|
2
|
+
import { c as relativeFile } from "./ids-Bp6ut7ZD.js";
|
|
3
|
+
import { t as esJiti } from "./jiti-BOLXpKyG.js";
|
|
4
|
+
import { d as attemptExpectError, f as createExpect, g as withAttemptExpect, h as unawaitedError, i as useSchedulerChannel, m as extendExpect, n as matchers, r as acquire, u as useEngine } from "./matchers-DyLvm7EG.js";
|
|
5
|
+
import { t as budgetMarker } from "./budget-DBUrH4jX.js";
|
|
6
|
+
import { t as codeFrame } from "./errors-C9w_ud7g.js";
|
|
7
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
8
|
+
import { dirname } from "node:path";
|
|
9
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
10
|
+
import { format, stripVTControlCharacters } from "node:util";
|
|
11
|
+
import { DecodedMap, getOriginalPosition } from "@vitest/utils/source-map";
|
|
12
|
+
import { getTsconfig } from "get-tsconfig";
|
|
13
|
+
import { processError } from "@vitest/utils/error";
|
|
14
|
+
//#region src/engine/collector.ts
|
|
15
|
+
let collecting;
|
|
16
|
+
const collectingFile = () => collecting?.file;
|
|
17
|
+
function registerGroup(name, mode, factory) {
|
|
18
|
+
current().tasks.push({
|
|
19
|
+
type: "suite",
|
|
20
|
+
name,
|
|
21
|
+
mode,
|
|
22
|
+
factory,
|
|
23
|
+
tasks: [],
|
|
24
|
+
containsOnly: false
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function registerTest(name, options, body) {
|
|
28
|
+
current().tasks.push({
|
|
29
|
+
type: "test",
|
|
30
|
+
index: -1,
|
|
31
|
+
name,
|
|
32
|
+
groups: [],
|
|
33
|
+
mode: options.mode,
|
|
34
|
+
options,
|
|
35
|
+
body
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function current() {
|
|
39
|
+
if (!collecting) throw new UsageError("evaluate() and group() declare evals while reeval loads the file; they can't be called inside an eval.");
|
|
40
|
+
return collecting.current;
|
|
41
|
+
}
|
|
42
|
+
/** Loads the file with `load` and returns its tests in declaration order, with their modes. */
|
|
43
|
+
async function collect(file, load) {
|
|
44
|
+
const root = {
|
|
45
|
+
type: "suite",
|
|
46
|
+
name: "",
|
|
47
|
+
mode: "run",
|
|
48
|
+
tasks: [],
|
|
49
|
+
containsOnly: false
|
|
50
|
+
};
|
|
51
|
+
collecting = {
|
|
52
|
+
file,
|
|
53
|
+
current: root
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
await load();
|
|
57
|
+
await collectSuite(root);
|
|
58
|
+
} finally {
|
|
59
|
+
collecting = void 0;
|
|
60
|
+
}
|
|
61
|
+
interpretModes(root, root.containsOnly, false);
|
|
62
|
+
const tests = [];
|
|
63
|
+
const walk = (suite, groups) => {
|
|
64
|
+
for (const task of suite.tasks) if (task.type === "suite") walk(task, [...groups, task.name]);
|
|
65
|
+
else tests.push(Object.assign(task, {
|
|
66
|
+
index: tests.length,
|
|
67
|
+
groups
|
|
68
|
+
}));
|
|
69
|
+
};
|
|
70
|
+
walk(root, []);
|
|
71
|
+
return tests;
|
|
72
|
+
}
|
|
73
|
+
async function collectSuite(suite) {
|
|
74
|
+
const state = collecting;
|
|
75
|
+
if (suite.factory) {
|
|
76
|
+
const outer = state.current;
|
|
77
|
+
state.current = suite;
|
|
78
|
+
try {
|
|
79
|
+
await suite.factory();
|
|
80
|
+
} finally {
|
|
81
|
+
state.current = outer;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const task of suite.tasks) if (task.type === "suite") await collectSuite(task);
|
|
85
|
+
suite.containsOnly = suite.tasks.some((t) => t.mode === "only" || t.type === "suite" && t.containsOnly);
|
|
86
|
+
}
|
|
87
|
+
/** Vitest's `interpretTaskModes`, without the filters reeval applies itself. */
|
|
88
|
+
function interpretModes(suite, onlyMode, parentIsOnly) {
|
|
89
|
+
const suiteIsOnly = parentIsOnly || suite.mode === "only";
|
|
90
|
+
const someOnly = onlyMode && suite.containsOnly;
|
|
91
|
+
for (const t of suite.tasks) {
|
|
92
|
+
const include = someOnly ? t.mode === "only" || t.type === "suite" && t.containsOnly : suiteIsOnly || t.mode === "only";
|
|
93
|
+
if (onlyMode) {
|
|
94
|
+
if (t.type === "suite" && (include || t.containsOnly)) {
|
|
95
|
+
if (t.mode === "only") t.mode = "run";
|
|
96
|
+
} else if (t.mode === "run" && !include) t.mode = "skip";
|
|
97
|
+
else if (t.mode === "only") t.mode = "run";
|
|
98
|
+
}
|
|
99
|
+
if (t.type === "suite") {
|
|
100
|
+
if (t.mode === "skip" || t.mode === "todo") markAll(t, t.mode);
|
|
101
|
+
else interpretModes(t, onlyMode, include);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function markAll(suite, mode) {
|
|
106
|
+
for (const t of suite.tasks) {
|
|
107
|
+
if (t.mode !== "run") continue;
|
|
108
|
+
t.mode = mode;
|
|
109
|
+
if (t.type === "suite") markAll(t, mode);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/engine/loader.ts
|
|
114
|
+
var TsconfigError = class extends Error {
|
|
115
|
+
name = "TsconfigError";
|
|
116
|
+
};
|
|
117
|
+
/** Each file jiti transformed: its source map, and how far jiti's wrapper shifts line 1. */
|
|
118
|
+
const transformed = /* @__PURE__ */ new Map();
|
|
119
|
+
const INLINE_MAP = /\/\/# sourceMappingURL=data:application\/json;(?:charset=utf-8;)?base64,([A-Za-z0-9+/=]+)\s*$/;
|
|
120
|
+
/** Imports `file` and whatever it imports. */
|
|
121
|
+
async function loadEvalFile(file, root) {
|
|
122
|
+
checkTsconfig(dirname(file), root);
|
|
123
|
+
const options = {
|
|
124
|
+
moduleCache: true,
|
|
125
|
+
fsCache: false,
|
|
126
|
+
sourceMaps: true
|
|
127
|
+
};
|
|
128
|
+
const base = await esJiti(file, options);
|
|
129
|
+
const jiti = await esJiti(file, {
|
|
130
|
+
...options,
|
|
131
|
+
transform: (opts) => {
|
|
132
|
+
const code = base.transform(opts);
|
|
133
|
+
const inline = INLINE_MAP.exec(code);
|
|
134
|
+
if (opts.filename && inline?.[1]) {
|
|
135
|
+
const map = JSON.parse(Buffer.from(inline[1], "base64").toString("utf8"));
|
|
136
|
+
const shift = `(${opts.async ? "async " : ""}function (exports, require, module, __filename, __dirname, jitiImport, jitiESMResolve) { `.length;
|
|
137
|
+
transformed.set(opts.filename, {
|
|
138
|
+
map: new DecodedMap(map, opts.filename),
|
|
139
|
+
shift
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return { code };
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
try {
|
|
146
|
+
return await jiti.import(file);
|
|
147
|
+
} catch (error) {
|
|
148
|
+
throw syntaxError(error, root) ?? missingModule(error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** jiti's `Cannot find module 'x'` plus a require stack, as `… imported from <file>`. */
|
|
152
|
+
function missingModule(error) {
|
|
153
|
+
const e = error;
|
|
154
|
+
if (e?.code !== "MODULE_NOT_FOUND") return error;
|
|
155
|
+
const parts = /^(Cannot find module '[^']+')\nRequire stack:\n- (.+)/.exec(e.message);
|
|
156
|
+
if (parts) e.message = `${parts[1]} imported from ${parts[2]}`;
|
|
157
|
+
return error;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* jiti reports a parse error as a plain Error, `ParseError: <reason>` then ` <file>:<line>:<col>`
|
|
161
|
+
* (col 0-based): a SyntaxError again, naming the file and position, with a code frame.
|
|
162
|
+
*/
|
|
163
|
+
function syntaxError(error, root) {
|
|
164
|
+
const parsed = /^ParseError: (.*?)\s*\n\s*(.+):(\d+):(\d+)$/.exec(error?.message ?? "");
|
|
165
|
+
if (!parsed) return void 0;
|
|
166
|
+
const [, said, file, line, column] = parsed;
|
|
167
|
+
const reason = said.replace(/^(?:[A-Za-z]:)?[\\/]\S*?: /, "");
|
|
168
|
+
const at = {
|
|
169
|
+
line: Number(line),
|
|
170
|
+
column: Number(column) + 1
|
|
171
|
+
};
|
|
172
|
+
let frame = "";
|
|
173
|
+
try {
|
|
174
|
+
frame = stripVTControlCharacters(codeFrame(readFileSync(file, "utf8"), 0, at, 200));
|
|
175
|
+
} catch {}
|
|
176
|
+
return /* @__PURE__ */ new SyntaxError(`${reason} (${relativeFile(root, file)}:${at.line}:${at.column})${frame ? `\n${frame}` : ""}`);
|
|
177
|
+
}
|
|
178
|
+
/** `stack` with positions in transformed files mapped back to their sources. */
|
|
179
|
+
function originalStack(stack) {
|
|
180
|
+
return stack.replace(/^(\s+at (?:.*\()?)(.+?):(\d+):(\d+)(\)?)$/gm, (whole, before, file, line, column, after) => {
|
|
181
|
+
const loaded = transformed.get(file);
|
|
182
|
+
const at0 = Number(column) - 1 - (line === "1" ? loaded?.shift ?? 0 : 0);
|
|
183
|
+
if (!loaded || at0 < 0) return whole;
|
|
184
|
+
const at = getOriginalPosition(loaded.map, {
|
|
185
|
+
line: Number(line),
|
|
186
|
+
column: at0
|
|
187
|
+
});
|
|
188
|
+
if (!at) return whole;
|
|
189
|
+
const original = at.line;
|
|
190
|
+
return `${before}${file}:${original}:${callee(file, original, at.column) + 1}${after}`;
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Where V8 would put a call's position without the transform: jiti calls an imported function as
|
|
195
|
+
* `(0, _module.fn)()`, which V8 reports at the `(`, where a plain `fn()` reports at `fn`.
|
|
196
|
+
*/
|
|
197
|
+
function callee(file, line, column) {
|
|
198
|
+
const text = readFileSync(file, "utf8").split(/\r?\n/)[line - 1] ?? "";
|
|
199
|
+
if (text[column] !== "(") return column;
|
|
200
|
+
let start = column;
|
|
201
|
+
while (start > 0 && /[\w$]/.test(text[start - 1])) start--;
|
|
202
|
+
return start;
|
|
203
|
+
}
|
|
204
|
+
/** Fails when the nearest tsconfig.json isn't valid JSON with comments, or extends a missing file. */
|
|
205
|
+
function checkTsconfig(dir, root) {
|
|
206
|
+
let found;
|
|
207
|
+
try {
|
|
208
|
+
found = getTsconfig(dir);
|
|
209
|
+
} catch (error) {
|
|
210
|
+
const message = error.message;
|
|
211
|
+
const missing = /^File '(.+)' not found\.$/.exec(message);
|
|
212
|
+
throw new TsconfigError(missing ? `Failed to load tsconfig '${missing[1]}': Tsconfig not found` : `Failed to load tsconfig: ${message}`);
|
|
213
|
+
}
|
|
214
|
+
if (!found) return;
|
|
215
|
+
try {
|
|
216
|
+
JSON.parse(stripJsonComments(readFileSync(found.path, "utf8")));
|
|
217
|
+
} catch (error) {
|
|
218
|
+
throw new TsconfigError(`Failed to load tsconfig '${relativeFile(root, found.path)}': ${error.message}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/** JSON with comments and trailing commas (tsconfig's dialect) as plain JSON. */
|
|
222
|
+
function stripJsonComments(text) {
|
|
223
|
+
return scan(scan(text, (rest) => {
|
|
224
|
+
if (rest.startsWith("//")) {
|
|
225
|
+
const end = rest.indexOf("\n");
|
|
226
|
+
return [end < 0 ? rest.length : end, ""];
|
|
227
|
+
}
|
|
228
|
+
if (rest.startsWith("/*")) {
|
|
229
|
+
const end = rest.indexOf("*/", 2);
|
|
230
|
+
return [end < 0 ? rest.length : end + 2, " "];
|
|
231
|
+
}
|
|
232
|
+
}), (rest) => /^,\s*[}\]]/.test(rest) ? [1, " "] : void 0);
|
|
233
|
+
}
|
|
234
|
+
/** Rewrites `text` outside its strings: `at` says how much to replace here, and with what. */
|
|
235
|
+
function scan(text, at) {
|
|
236
|
+
let out = "";
|
|
237
|
+
for (let i = 0; i < text.length;) {
|
|
238
|
+
if (text[i] === "\"") {
|
|
239
|
+
let end = i + 1;
|
|
240
|
+
while (end < text.length && text[end] !== "\"") end += text[end] === "\\" ? 2 : 1;
|
|
241
|
+
out += text.slice(i, end + 1);
|
|
242
|
+
i = end + 1;
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const hit = at(text.slice(i));
|
|
246
|
+
if (hit) {
|
|
247
|
+
out += hit[1];
|
|
248
|
+
i += hit[0];
|
|
249
|
+
} else out += text[i++];
|
|
250
|
+
}
|
|
251
|
+
return out;
|
|
252
|
+
}
|
|
253
|
+
//#endregion
|
|
254
|
+
//#region src/engine/run.ts
|
|
255
|
+
/** An error as it crosses to the main process: its diff computed, then plain data. */
|
|
256
|
+
function serializeError(error) {
|
|
257
|
+
if (error instanceof Error && typeof error.stack === "string") try {
|
|
258
|
+
error.stack = originalStack(error.stack);
|
|
259
|
+
} catch {}
|
|
260
|
+
return processError(error);
|
|
261
|
+
}
|
|
262
|
+
const CONSOLE = {
|
|
263
|
+
log: "stdout",
|
|
264
|
+
info: "stdout",
|
|
265
|
+
debug: "stdout",
|
|
266
|
+
warn: "stderr",
|
|
267
|
+
error: "stderr"
|
|
268
|
+
};
|
|
269
|
+
const currentAttempt = new AsyncLocalStorage();
|
|
270
|
+
/** Sends console output to the attempt that wrote it, or to the file when no attempt did. */
|
|
271
|
+
function routeConsole(reporter) {
|
|
272
|
+
const target = globalThis.console;
|
|
273
|
+
for (const [method, stream] of Object.entries(CONSOLE)) target[method] = (...args) => reporter.log(currentAttempt.getStore(), Date.now(), stream, `${format(...args)}\n`);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Runs the tests in `select` whose mode is `run`, and reports the others as skipped. Resolves
|
|
277
|
+
* when every attempt has finished, its cleanup included (a timed-out attempt reports its result
|
|
278
|
+
* at the timeout, then keeps its lease until its sandbox is gone).
|
|
279
|
+
*/
|
|
280
|
+
async function runTests(tests, select, options) {
|
|
281
|
+
const settled = [];
|
|
282
|
+
const bodies = /* @__PURE__ */ new Set();
|
|
283
|
+
for (const test of tests) {
|
|
284
|
+
if (!select.has(test.index) || test.mode !== "run") {
|
|
285
|
+
options.reporter.result(test.index, {
|
|
286
|
+
state: "skipped",
|
|
287
|
+
errors: [],
|
|
288
|
+
durationMs: 0
|
|
289
|
+
});
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
settled.push(runTest(test, options, bodies));
|
|
293
|
+
}
|
|
294
|
+
options.onReady();
|
|
295
|
+
await Promise.all(settled);
|
|
296
|
+
await Promise.allSettled(bodies);
|
|
297
|
+
}
|
|
298
|
+
async function runTest(test, { file, stagingDir, signal, reporter }, bodies) {
|
|
299
|
+
const { index, options } = test;
|
|
300
|
+
const calledAt = Date.now();
|
|
301
|
+
const skip = () => reporter.result(index, {
|
|
302
|
+
state: "skipped",
|
|
303
|
+
errors: [],
|
|
304
|
+
durationMs: Date.now() - calledAt
|
|
305
|
+
});
|
|
306
|
+
if (signal.aborted) return skip();
|
|
307
|
+
let lease;
|
|
308
|
+
if (options.gate) {
|
|
309
|
+
const { limits, rank } = options.gate;
|
|
310
|
+
try {
|
|
311
|
+
lease = await acquire(limits, {
|
|
312
|
+
rank,
|
|
313
|
+
signal
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
if (signal.aborted) return skip();
|
|
317
|
+
return fail(error);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (existsSync(budgetMarker(stagingDir))) {
|
|
321
|
+
lease?.release();
|
|
322
|
+
return skip();
|
|
323
|
+
}
|
|
324
|
+
const startedAt = Date.now();
|
|
325
|
+
reporter.start(index, startedAt);
|
|
326
|
+
const task = {
|
|
327
|
+
type: "test",
|
|
328
|
+
name: test.name,
|
|
329
|
+
fullTestName: [...test.groups, test.name].join(" > ")
|
|
330
|
+
};
|
|
331
|
+
const own = createExpect(task);
|
|
332
|
+
const pending = [];
|
|
333
|
+
const timeout = new AbortController();
|
|
334
|
+
let reported = false;
|
|
335
|
+
let meta;
|
|
336
|
+
const body = currentAttempt.run(index, () => withAttemptExpect(own, pending, () => test.body({
|
|
337
|
+
file,
|
|
338
|
+
signal: AbortSignal.any([signal, timeout.signal]),
|
|
339
|
+
setMeta: (next) => {
|
|
340
|
+
meta = next;
|
|
341
|
+
if (reported) reporter.meta(index, next);
|
|
342
|
+
},
|
|
343
|
+
progress: (progress) => reporter.progress(index, progress),
|
|
344
|
+
debug: (line) => reporter.debug(index, line),
|
|
345
|
+
unawaited: async () => await unawaitedError(pending) ?? attemptExpectError(own, task)
|
|
346
|
+
})));
|
|
347
|
+
bodies.add(body);
|
|
348
|
+
const release = () => lease?.release();
|
|
349
|
+
body.then(release, release);
|
|
350
|
+
try {
|
|
351
|
+
await (options.timeout ? withTimeout(body, options.timeout, timeout) : body);
|
|
352
|
+
finish({
|
|
353
|
+
state: "passed",
|
|
354
|
+
errors: []
|
|
355
|
+
});
|
|
356
|
+
} catch (error) {
|
|
357
|
+
finish({
|
|
358
|
+
state: "failed",
|
|
359
|
+
errors: [serializeError(error)]
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
function finish(result) {
|
|
363
|
+
reported = true;
|
|
364
|
+
reporter.result(index, {
|
|
365
|
+
...result,
|
|
366
|
+
durationMs: Date.now() - startedAt,
|
|
367
|
+
...meta ? { meta } : {}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
function fail(error) {
|
|
371
|
+
reporter.result(index, {
|
|
372
|
+
state: "failed",
|
|
373
|
+
errors: [serializeError(error)],
|
|
374
|
+
durationMs: Date.now() - calledAt
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/** Fails after `ms`, aborting the body; the body keeps its lease until it has cleaned up. */
|
|
379
|
+
function withTimeout(running, ms, abort) {
|
|
380
|
+
let timer;
|
|
381
|
+
const timedOut = new Promise((_, reject) => {
|
|
382
|
+
timer = setTimeout(() => {
|
|
383
|
+
const error = /* @__PURE__ */ new Error(`Eval timed out after ${ms / 1e3}s`);
|
|
384
|
+
abort.abort(error);
|
|
385
|
+
reject(error);
|
|
386
|
+
}, ms);
|
|
387
|
+
});
|
|
388
|
+
return Promise.race([running, timedOut]).finally(() => clearTimeout(timer));
|
|
389
|
+
}
|
|
390
|
+
//#endregion
|
|
391
|
+
//#region src/engine/worker.ts
|
|
392
|
+
function startWorker(channel) {
|
|
393
|
+
const cancel = new AbortController();
|
|
394
|
+
let grant;
|
|
395
|
+
let working = Promise.resolve();
|
|
396
|
+
const stop = () => cancel.abort(/* @__PURE__ */ new Error("The run was cancelled"));
|
|
397
|
+
channel.onMessage((message) => {
|
|
398
|
+
if (message.t === "init") working = init(message.run, message.file, message.select);
|
|
399
|
+
else if (message.t === "grant") grant?.(message.id);
|
|
400
|
+
else stop();
|
|
401
|
+
});
|
|
402
|
+
channel.onDisconnect(() => {
|
|
403
|
+
stop();
|
|
404
|
+
working.finally(() => channel.exit(0));
|
|
405
|
+
});
|
|
406
|
+
const reporter = {
|
|
407
|
+
start: (index, at) => channel.send({
|
|
408
|
+
t: "start",
|
|
409
|
+
index,
|
|
410
|
+
at
|
|
411
|
+
}),
|
|
412
|
+
progress: (index, progress) => channel.send({
|
|
413
|
+
t: "progress",
|
|
414
|
+
index,
|
|
415
|
+
progress
|
|
416
|
+
}),
|
|
417
|
+
debug: (index, line) => channel.send({
|
|
418
|
+
t: "debug",
|
|
419
|
+
index,
|
|
420
|
+
line
|
|
421
|
+
}),
|
|
422
|
+
log: (index, at, stream, text) => channel.send({
|
|
423
|
+
t: "log",
|
|
424
|
+
...index === void 0 ? {} : { index },
|
|
425
|
+
at,
|
|
426
|
+
stream,
|
|
427
|
+
text
|
|
428
|
+
}),
|
|
429
|
+
result: (index, result) => channel.send({
|
|
430
|
+
t: "result",
|
|
431
|
+
index,
|
|
432
|
+
result
|
|
433
|
+
}),
|
|
434
|
+
meta: (index, meta) => channel.send({
|
|
435
|
+
t: "meta",
|
|
436
|
+
index,
|
|
437
|
+
meta
|
|
438
|
+
})
|
|
439
|
+
};
|
|
440
|
+
async function init(run, file, select) {
|
|
441
|
+
useEngine({
|
|
442
|
+
registerTest,
|
|
443
|
+
registerGroup,
|
|
444
|
+
getRunContext: () => run,
|
|
445
|
+
collectingFile
|
|
446
|
+
});
|
|
447
|
+
extendExpect(matchers);
|
|
448
|
+
routeConsole(reporter);
|
|
449
|
+
try {
|
|
450
|
+
const tests = await collect(file, () => loadEvalFile(file, run.config.root));
|
|
451
|
+
channel.send({
|
|
452
|
+
t: "collected",
|
|
453
|
+
tests: tests.map(({ index, name, groups, mode, options }) => ({
|
|
454
|
+
index,
|
|
455
|
+
name,
|
|
456
|
+
groups,
|
|
457
|
+
mode,
|
|
458
|
+
...options.attempt ? { attempt: options.attempt } : {}
|
|
459
|
+
}))
|
|
460
|
+
});
|
|
461
|
+
if (select) {
|
|
462
|
+
grant = useSchedulerChannel((message) => channel.send(message));
|
|
463
|
+
await runTests(tests, new Set(select), {
|
|
464
|
+
file,
|
|
465
|
+
stagingDir: run.stagingDir,
|
|
466
|
+
signal: cancel.signal,
|
|
467
|
+
reporter,
|
|
468
|
+
onReady: () => channel.send({ t: "ready" })
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
} catch (error) {
|
|
472
|
+
channel.send({
|
|
473
|
+
t: "load-error",
|
|
474
|
+
error: serializeError(error)
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
channel.send({ t: "done" }, () => channel.exit(0));
|
|
478
|
+
}
|
|
479
|
+
channel.send({
|
|
480
|
+
t: "hello",
|
|
481
|
+
protocol: 2
|
|
482
|
+
});
|
|
483
|
+
return { unhandled: (error) => channel.send({
|
|
484
|
+
t: "unhandled",
|
|
485
|
+
error: serializeError(error)
|
|
486
|
+
}) };
|
|
487
|
+
}
|
|
488
|
+
//#endregion
|
|
489
|
+
//#region src/engine/worker-entry.ts
|
|
490
|
+
if (!process.send) {
|
|
491
|
+
console.error("reeval __worker is the process reeval starts for each eval file; it isn't a command.");
|
|
492
|
+
process.exit(2);
|
|
493
|
+
}
|
|
494
|
+
process.on("SIGINT", () => {});
|
|
495
|
+
const worker = startWorker({
|
|
496
|
+
send: (message, sent) => process.send?.(message, void 0, {}, () => sent?.()),
|
|
497
|
+
onMessage: (listener) => process.on("message", listener),
|
|
498
|
+
onDisconnect: (listener) => process.on("disconnect", listener),
|
|
499
|
+
exit: (code) => process.exit(code)
|
|
500
|
+
});
|
|
501
|
+
process.on("unhandledRejection", (error) => worker.unhandled(error));
|
|
502
|
+
process.on("uncaughtException", (error) => worker.unhandled(error));
|
|
503
|
+
//#endregion
|
|
504
|
+
export {};
|
|
505
|
+
|
|
506
|
+
//# sourceMappingURL=worker-entry-DnYkANPG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-entry-DnYkANPG.js","names":[],"sources":["../src/engine/collector.ts","../src/engine/loader.ts","../src/engine/run.ts","../src/engine/worker.ts","../src/engine/worker-entry.ts"],"mappings":"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"}
|