context-compress 2026.3.3 → 2026.3.20
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 +14 -4
- 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 +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +148 -4
- package/dist/config.js.map +1 -1
- package/dist/executor.d.ts +11 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +104 -3
- package/dist/executor.js.map +1 -1
- package/dist/hooks/pretooluse.js +12 -6
- package/dist/hooks/pretooluse.js.map +1 -1
- package/dist/logger.d.ts +0 -2
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +0 -6
- package/dist/logger.js.map +1 -1
- package/dist/network.d.ts +14 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +103 -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 +757 -243
- package/dist/server.bundle.mjs.map +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +262 -74
- package/dist/server.js.map +1 -1
- package/dist/stats.d.ts.map +1 -1
- package/dist/stats.js +43 -7
- package/dist/stats.js.map +1 -1
- package/dist/store.d.ts +20 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +78 -76
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +0 -19
- package/dist/types.d.ts.map +1 -1
- package/hooks/pretooluse.mjs +10 -5
- package/package.json +6 -4
package/dist/logger.js
CHANGED
|
@@ -4,10 +4,4 @@ export function debug(...args) {
|
|
|
4
4
|
process.stderr.write(`[context-compress] ${args.map(String).join(" ")}\n`);
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
-
export function warn(...args) {
|
|
8
|
-
process.stderr.write(`[context-compress WARN] ${args.map(String).join(" ")}\n`);
|
|
9
|
-
}
|
|
10
|
-
export function error(...args) {
|
|
11
|
-
process.stderr.write(`[context-compress ERROR] ${args.map(String).join(" ")}\n`);
|
|
12
|
-
}
|
|
13
7
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,KAAK,CAAC,GAAG,IAAe;IACvC,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;AACF,CAAC
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,KAAK,CAAC,GAAG,IAAe;IACvC,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSRF protection: detect private/internal hostnames.
|
|
3
|
+
*/
|
|
4
|
+
export declare function isPrivateHost(hostname: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* DNS rebinding protection: resolve hostname to IP and validate it is not private.
|
|
7
|
+
* This prevents attackers from using DNS to resolve a public hostname to a private IP.
|
|
8
|
+
* Throws an error if the resolved IP is private.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveAndValidate(url: string): Promise<{
|
|
11
|
+
url: string;
|
|
12
|
+
resolvedIp: string | null;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0CvD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAiDrD"}
|
package/dist/network.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import dns from "node:dns";
|
|
2
|
+
/**
|
|
3
|
+
* SSRF protection: detect private/internal hostnames.
|
|
4
|
+
*/
|
|
5
|
+
export function isPrivateHost(hostname) {
|
|
6
|
+
// Strip brackets from IPv6 literals like [::1]
|
|
7
|
+
const h = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
8
|
+
const lower = h.toLowerCase();
|
|
9
|
+
// Localhost variants
|
|
10
|
+
if (lower === "localhost" || lower === "0.0.0.0")
|
|
11
|
+
return true;
|
|
12
|
+
// IPv4 "this network" range: 0.0.0.0/8
|
|
13
|
+
if (/^0\./.test(h))
|
|
14
|
+
return true;
|
|
15
|
+
// IPv4 loopback: 127.0.0.0/8
|
|
16
|
+
if (/^127\./.test(h))
|
|
17
|
+
return true;
|
|
18
|
+
// IPv4 private ranges
|
|
19
|
+
if (/^10\./.test(h))
|
|
20
|
+
return true;
|
|
21
|
+
if (/^172\.(1[6-9]|2\d|3[01])\./.test(h))
|
|
22
|
+
return true;
|
|
23
|
+
if (/^192\.168\./.test(h))
|
|
24
|
+
return true;
|
|
25
|
+
// IPv4 link-local: 169.254.0.0/16
|
|
26
|
+
if (/^169\.254\./.test(h))
|
|
27
|
+
return true;
|
|
28
|
+
// Carrier-grade NAT: 100.64.0.0/10 (100.64-127.*)
|
|
29
|
+
if (/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(h))
|
|
30
|
+
return true;
|
|
31
|
+
// IPv6 loopback
|
|
32
|
+
if (lower === "::1")
|
|
33
|
+
return true;
|
|
34
|
+
// IPv6 unspecified address
|
|
35
|
+
if (lower === "::" || lower === "0:0:0:0:0:0:0:0")
|
|
36
|
+
return true;
|
|
37
|
+
// IPv6 mapped IPv4: ::ffff:127.0.0.1, ::ffff:10.*, etc.
|
|
38
|
+
const mappedMatch = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
|
|
39
|
+
if (mappedMatch)
|
|
40
|
+
return isPrivateHost(mappedMatch[1]);
|
|
41
|
+
// IPv6 link-local: fe80::/10
|
|
42
|
+
if (/^fe[89ab]/i.test(h))
|
|
43
|
+
return true;
|
|
44
|
+
// IPv6 ULA: fc00::/7 (fc* and fd*)
|
|
45
|
+
if (/^f[cd]/i.test(h))
|
|
46
|
+
return true;
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* DNS rebinding protection: resolve hostname to IP and validate it is not private.
|
|
51
|
+
* This prevents attackers from using DNS to resolve a public hostname to a private IP.
|
|
52
|
+
* Throws an error if the resolved IP is private.
|
|
53
|
+
*/
|
|
54
|
+
export async function resolveAndValidate(url) {
|
|
55
|
+
const parsed = new URL(url);
|
|
56
|
+
const hostname = parsed.hostname;
|
|
57
|
+
// Skip DNS resolution for raw IP addresses — isPrivateHost already handles them
|
|
58
|
+
if (/^\d+\.\d+\.\d+\.\d+$/.test(hostname) || hostname.includes(":")) {
|
|
59
|
+
if (isPrivateHost(hostname)) {
|
|
60
|
+
throw new Error(`Blocked: resolved IP ${hostname} is a private/internal address`);
|
|
61
|
+
}
|
|
62
|
+
return { url, resolvedIp: null };
|
|
63
|
+
}
|
|
64
|
+
let resolvedIp = null;
|
|
65
|
+
let v4Error = false;
|
|
66
|
+
let v6Error = false;
|
|
67
|
+
// Resolve IPv4
|
|
68
|
+
try {
|
|
69
|
+
const { address } = await dns.promises.lookup(hostname, { family: 4 });
|
|
70
|
+
if (isPrivateHost(address)) {
|
|
71
|
+
throw new Error(`Blocked: ${hostname} resolved to private IP ${address}`);
|
|
72
|
+
}
|
|
73
|
+
resolvedIp = address;
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// If it's our own block error, re-throw
|
|
77
|
+
if (err instanceof Error && err.message.startsWith("Blocked:"))
|
|
78
|
+
throw err;
|
|
79
|
+
// IPv4 resolution failed — track it
|
|
80
|
+
v4Error = true;
|
|
81
|
+
}
|
|
82
|
+
// Resolve IPv6
|
|
83
|
+
try {
|
|
84
|
+
const { address } = await dns.promises.lookup(hostname, { family: 6 });
|
|
85
|
+
if (isPrivateHost(address)) {
|
|
86
|
+
throw new Error(`Blocked: ${hostname} resolved to private IPv6 ${address}`);
|
|
87
|
+
}
|
|
88
|
+
if (!resolvedIp)
|
|
89
|
+
resolvedIp = address;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof Error && err.message.startsWith("Blocked:"))
|
|
93
|
+
throw err;
|
|
94
|
+
// IPv6 resolution failed — track it
|
|
95
|
+
v6Error = true;
|
|
96
|
+
}
|
|
97
|
+
// If BOTH resolutions failed (not blocked, just DNS errors), fail closed
|
|
98
|
+
if (v4Error && v6Error) {
|
|
99
|
+
throw new Error(`DNS resolution failed for ${hostname}: unable to verify host safety`);
|
|
100
|
+
}
|
|
101
|
+
return { url, resolvedIp };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|