context-compress 1.0.0 → 2026.3.13
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 +41 -5
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +22 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +97 -4
- package/dist/config.js.map +1 -1
- package/dist/executor.d.ts +12 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +129 -14
- package/dist/executor.js.map +1 -1
- package/dist/hooks/pretooluse.js +12 -6
- package/dist/hooks/pretooluse.js.map +1 -1
- package/dist/network.d.ts +5 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +42 -0
- package/dist/network.js.map +1 -0
- package/dist/runtime/languages/go.js +3 -3
- package/dist/runtime/languages/go.js.map +1 -1
- package/dist/runtime/languages/javascript.js +1 -1
- package/dist/runtime/languages/javascript.js.map +1 -1
- package/dist/runtime/languages/r.js +1 -1
- package/dist/runtime/languages/rust.js +2 -2
- package/dist/runtime/languages/rust.js.map +1 -1
- package/dist/runtime/languages/typescript.js +1 -1
- package/dist/runtime/languages/typescript.js.map +1 -1
- package/dist/server.bundle.mjs +531 -152
- package/dist/server.bundle.mjs.map +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +160 -25
- package/dist/server.js.map +1 -1
- package/dist/snippet.d.ts.map +1 -1
- package/dist/snippet.js +1 -8
- package/dist/snippet.js.map +1 -1
- package/dist/stats.d.ts.map +1 -1
- package/dist/stats.js +28 -11
- package/dist/stats.js.map +1 -1
- package/dist/store.d.ts +14 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +44 -22
- package/dist/store.js.map +1 -1
- package/docs/token-reduction-report.md +459 -0
- package/hooks/pretooluse.mjs +10 -5
- package/package.json +7 -4
package/dist/hooks/pretooluse.js
CHANGED
|
@@ -16,16 +16,22 @@ let raw = "";
|
|
|
16
16
|
process.stdin.setEncoding("utf-8");
|
|
17
17
|
for await (const chunk of process.stdin)
|
|
18
18
|
raw += chunk;
|
|
19
|
-
|
|
19
|
+
let input;
|
|
20
|
+
try {
|
|
21
|
+
input = JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
20
26
|
const tool = input.tool_name ?? "";
|
|
21
|
-
const toolInput = input.tool_input ?? {};
|
|
27
|
+
const toolInput = (input.tool_input ?? {});
|
|
22
28
|
function respond(output) {
|
|
23
29
|
console.log(JSON.stringify({ hookSpecificOutput: { hookEventName: "PreToolUse", ...output } }));
|
|
24
30
|
process.exit(0);
|
|
25
31
|
}
|
|
26
32
|
// ─── Bash: redirect data-fetching commands ───
|
|
27
33
|
if (tool === "Bash") {
|
|
28
|
-
const command = toolInput.command ?? "";
|
|
34
|
+
const command = String(toolInput.command ?? "");
|
|
29
35
|
// curl/wget → block and redirect
|
|
30
36
|
if (blockCurl && /(^|\s|&&|\||\;)(curl|wget)\s/i.test(command)) {
|
|
31
37
|
respond({
|
|
@@ -62,7 +68,7 @@ if (tool === "Grep" && nudgeOnGrep) {
|
|
|
62
68
|
}
|
|
63
69
|
// ─── WebFetch: deny + redirect to sandbox ───
|
|
64
70
|
if (tool === "WebFetch" && blockWebFetch) {
|
|
65
|
-
const url = toolInput.url ?? "";
|
|
71
|
+
const url = String(toolInput.url ?? "");
|
|
66
72
|
respond({
|
|
67
73
|
permissionDecision: "deny",
|
|
68
74
|
reason: `${TOOL_PREFIX}: WebFetch blocked. Use mcp__${TOOL_PREFIX}__fetch_and_index(url: "${url}", source: "...") to fetch this URL in sandbox. Then use mcp__${TOOL_PREFIX}__search(queries: [...]) to query results.`,
|
|
@@ -70,8 +76,8 @@ if (tool === "WebFetch" && blockWebFetch) {
|
|
|
70
76
|
}
|
|
71
77
|
// ─── Task/Agent: inject context-compress routing into subagent prompts ───
|
|
72
78
|
if (tool === "Task" || tool === "Agent") {
|
|
73
|
-
const subagentType = toolInput.subagent_type ?? "";
|
|
74
|
-
const prompt = toolInput.prompt ?? "";
|
|
79
|
+
const subagentType = String(toolInput.subagent_type ?? "");
|
|
80
|
+
const prompt = String(toolInput.prompt ?? "");
|
|
75
81
|
const ROUTING_BLOCK = `
|
|
76
82
|
|
|
77
83
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pretooluse.js","sourceRoot":"","sources":["../../src/hooks/pretooluse.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,uBAAuB;AACvB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AAClE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,CAAC;AAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AACpE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AAEpE,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;IAAE,GAAG,IAAI,KAAK,CAAC;AAEtD,
|
|
1
|
+
{"version":3,"file":"pretooluse.js","sourceRoot":"","sources":["../../src/hooks/pretooluse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoCvD"}
|
package/dist/network.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSRF protection: detect private/internal hostnames.
|
|
3
|
+
*/
|
|
4
|
+
export function isPrivateHost(hostname) {
|
|
5
|
+
// Strip brackets from IPv6 literals like [::1]
|
|
6
|
+
const h = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
7
|
+
const lower = h.toLowerCase();
|
|
8
|
+
// Localhost variants
|
|
9
|
+
if (lower === "localhost" || lower === "0.0.0.0")
|
|
10
|
+
return true;
|
|
11
|
+
// IPv4 loopback: 127.0.0.0/8
|
|
12
|
+
if (/^127\./.test(h))
|
|
13
|
+
return true;
|
|
14
|
+
// IPv4 private ranges
|
|
15
|
+
if (/^10\./.test(h))
|
|
16
|
+
return true;
|
|
17
|
+
if (/^172\.(1[6-9]|2\d|3[01])\./.test(h))
|
|
18
|
+
return true;
|
|
19
|
+
if (/^192\.168\./.test(h))
|
|
20
|
+
return true;
|
|
21
|
+
// IPv4 link-local: 169.254.0.0/16
|
|
22
|
+
if (/^169\.254\./.test(h))
|
|
23
|
+
return true;
|
|
24
|
+
// Carrier-grade NAT: 100.64.0.0/10 (100.64-127.*)
|
|
25
|
+
if (/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(h))
|
|
26
|
+
return true;
|
|
27
|
+
// IPv6 loopback
|
|
28
|
+
if (lower === "::1")
|
|
29
|
+
return true;
|
|
30
|
+
// IPv6 mapped IPv4: ::ffff:127.0.0.1, ::ffff:10.*, etc.
|
|
31
|
+
const mappedMatch = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
|
|
32
|
+
if (mappedMatch)
|
|
33
|
+
return isPrivateHost(mappedMatch[1]);
|
|
34
|
+
// IPv6 link-local: fe80::/10
|
|
35
|
+
if (/^fe[89ab]/i.test(h))
|
|
36
|
+
return true;
|
|
37
|
+
// IPv6 ULA: fc00::/7 (fc* and fd*)
|
|
38
|
+
if (/^f[cd]/i.test(h))
|
|
39
|
+
return true;
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC7C,+CAA+C;IAC/C,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChG,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9B,qBAAqB;IACrB,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE9D,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,sBAAsB;IACtB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,kCAAkC;IAClC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,kDAAkD;IAClD,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,gBAAgB;IAChB,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjC,wDAAwD;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACjE,IAAI,WAAW;QAAE,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,mCAAmC;IACnC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -7,8 +7,8 @@ export const goPlugin = {
|
|
|
7
7
|
},
|
|
8
8
|
preprocessCode(code) {
|
|
9
9
|
// Wrap in package main if not already present
|
|
10
|
-
if (
|
|
11
|
-
const hasImport =
|
|
10
|
+
if (!/^package\s/m.test(code)) {
|
|
11
|
+
const hasImport = /^import\s/m.test(code);
|
|
12
12
|
if (hasImport) {
|
|
13
13
|
return `package main\n\n${code}`;
|
|
14
14
|
}
|
|
@@ -18,7 +18,7 @@ export const goPlugin = {
|
|
|
18
18
|
},
|
|
19
19
|
wrapWithFileContent(code, filePath) {
|
|
20
20
|
const escaped = JSON.stringify(filePath);
|
|
21
|
-
const hasPackage =
|
|
21
|
+
const hasPackage = /^package\s/m.test(code);
|
|
22
22
|
if (hasPackage) {
|
|
23
23
|
// Insert after package declaration
|
|
24
24
|
return code.replace(/(package\s+\w+\n)/, `$1\nimport "os"\n\nvar FILE_CONTENT_PATH = ${escaped}\nvar _ = func() string { b, _ := os.ReadFile(FILE_CONTENT_PATH); return string(b) }()\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/runtime/languages/go.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACvC,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,8CAA8C;QAC9C,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/runtime/languages/go.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACvC,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,8CAA8C;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACf,OAAO,mBAAmB,IAAI,EAAE,CAAC;YAClC,CAAC;YACD,OAAO,kDAAkD,IAAI,0BAA0B,CAAC;QACzF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,UAAU,EAAE,CAAC;YAChB,mCAAmC;YACnC,OAAO,IAAI,CAAC,OAAO,CAClB,mBAAmB,EACnB,8CAA8C,OAAO,0FAA0F,CAC/I,CAAC;QACH,CAAC;QACD,OAAO,yFAAyF,OAAO,gJAAgJ,IAAI,KAAK,CAAC;IAClQ,CAAC;CACD,CAAC"}
|
|
@@ -7,7 +7,7 @@ export const javascriptPlugin = {
|
|
|
7
7
|
},
|
|
8
8
|
wrapWithFileContent(code, filePath) {
|
|
9
9
|
const escaped = JSON.stringify(filePath);
|
|
10
|
-
return `const FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT =
|
|
10
|
+
return `const {readFileSync: __cm_readFileSync} = await import("node:fs");\nconst FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = __cm_readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=javascript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/runtime/languages/javascript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/runtime/languages/javascript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,iGAAiG,OAAO,2EAA2E,IAAI,EAAE,CAAC;IAClM,CAAC;CACD,CAAC"}
|
|
@@ -11,7 +11,7 @@ export const rustPlugin = {
|
|
|
11
11
|
return [runtime, srcPath, "-o", binPath];
|
|
12
12
|
},
|
|
13
13
|
preprocessCode(code) {
|
|
14
|
-
if (
|
|
14
|
+
if (!/^fn\s+main\s*\(/m.test(code)) {
|
|
15
15
|
return `fn main() {\n${code}\n}`;
|
|
16
16
|
}
|
|
17
17
|
return undefined;
|
|
@@ -19,7 +19,7 @@ export const rustPlugin = {
|
|
|
19
19
|
wrapWithFileContent(code, filePath) {
|
|
20
20
|
const escaped = JSON.stringify(filePath);
|
|
21
21
|
const preamble = `use std::fs;\nlet file_content_path = ${escaped};\nlet file_content = fs::read_to_string(file_content_path).unwrap();\n`;
|
|
22
|
-
if (
|
|
22
|
+
if (/^fn\s+main\s*\(/m.test(code)) {
|
|
23
23
|
return code.replace(/fn main\s*\(\s*\)\s*\{/, `fn main() {\n${preamble}`);
|
|
24
24
|
}
|
|
25
25
|
return `fn main() {\n${preamble}${code}\n}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/runtime/languages/rust.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACzC,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,CAAC,OAAO,CAAC;IAC5B,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,QAAQ,EAAE,QAAQ;QAC9B,sDAAsD;QACtD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;QACpC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/runtime/languages/rust.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACzC,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,CAAC,OAAO,CAAC;IAC5B,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,QAAQ,EAAE,QAAQ;QAC9B,sDAAsD;QACtD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;QACpC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,gBAAgB,IAAI,KAAK,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,yCAAyC,OAAO,yEAAyE,CAAC;QAC3I,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,gBAAgB,QAAQ,GAAG,IAAI,KAAK,CAAC;IAC7C,CAAC;CACD,CAAC"}
|
|
@@ -7,7 +7,7 @@ export const typescriptPlugin = {
|
|
|
7
7
|
},
|
|
8
8
|
wrapWithFileContent(code, filePath) {
|
|
9
9
|
const escaped = JSON.stringify(filePath);
|
|
10
|
-
return `const FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT =
|
|
10
|
+
return `const {readFileSync: __cm_readFileSync} = await import("node:fs");\nconst FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = __cm_readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
|
|
11
11
|
},
|
|
12
12
|
// tsx and ts-node may be .cmd shims on Windows
|
|
13
13
|
needsShell: process.platform === "win32",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/runtime/languages/typescript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5C,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/runtime/languages/typescript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5C,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,iGAAiG,OAAO,2EAA2E,IAAI,EAAE,CAAC;IAClM,CAAC;IAED,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;CACxC,CAAC"}
|