@securecode-ai/mcp 0.5.3 → 0.5.5
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/dist/attack/verifyLoop.js +15 -1
- package/dist/attack/verifyLoop.js.map +1 -1
- package/dist/utils/localTestRunner.js +19 -1
- package/dist/utils/localTestRunner.js.map +1 -1
- package/dist/utils/runtimeDetect.d.ts +12 -2
- package/dist/utils/runtimeDetect.js +247 -10
- package/dist/utils/runtimeDetect.js.map +1 -1
- package/package.json +1 -1
|
@@ -43,11 +43,20 @@ async function runVerifyLoop(opts) {
|
|
|
43
43
|
const previousErrors = [];
|
|
44
44
|
let lastTestScript = '';
|
|
45
45
|
let lastTestOutput = '';
|
|
46
|
-
const runtimeInfo = (0, runtimeDetect_1.detectRuntime)(workspaceRoot);
|
|
46
|
+
const runtimeInfo = (0, runtimeDetect_1.detectRuntime)(workspaceRoot, filePath || undefined);
|
|
47
47
|
const testFileDir = path.join(workspaceRoot, '.securecode');
|
|
48
48
|
const relativeImportPath = filePath
|
|
49
49
|
? (0, runtimeDetect_1.computeRelativeImportPath)(testFileDir, path.isAbsolute(filePath) ? filePath : path.join(workspaceRoot, filePath))
|
|
50
50
|
: '';
|
|
51
|
+
if (!runtimeInfo.canRunLocally) {
|
|
52
|
+
return {
|
|
53
|
+
verdict: 'INCONCLUSIVE',
|
|
54
|
+
reason: runtimeInfo.skipReason || 'Detected framework cannot run a local exploit test.',
|
|
55
|
+
roundsUsed: 0,
|
|
56
|
+
testScript: '',
|
|
57
|
+
testOutput: '',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
51
60
|
for (let round = 1; round <= MAX_ROUNDS; round++) {
|
|
52
61
|
onProgress?.(round, MAX_ROUNDS, `Round ${round}: generating test...`);
|
|
53
62
|
const genResp = await client.postJson('/verify/generate', {
|
|
@@ -63,8 +72,13 @@ async function runVerifyLoop(opts) {
|
|
|
63
72
|
previousErrors: previousErrors.length > 0 ? previousErrors : undefined,
|
|
64
73
|
projectRuntime: runtimeInfo.runtime,
|
|
65
74
|
suggestedRunner: runtimeInfo.runner,
|
|
75
|
+
framework: runtimeInfo.framework,
|
|
76
|
+
frameworkVersion: runtimeInfo.frameworkVersion,
|
|
77
|
+
testabilityTier: runtimeInfo.testabilityTier,
|
|
78
|
+
packageManager: runtimeInfo.packageManager,
|
|
66
79
|
testFileDir: '.securecode',
|
|
67
80
|
relativeImportPath,
|
|
81
|
+
depsInstalled: runtimeInfo.depsInstalled,
|
|
68
82
|
});
|
|
69
83
|
if (!genResp.canTest || !genResp.testScript) {
|
|
70
84
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyLoop.js","sourceRoot":"","sources":["../../src/attack/verifyLoop.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,
|
|
1
|
+
{"version":3,"file":"verifyLoop.js","sourceRoot":"","sources":["../../src/attack/verifyLoop.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,9 @@ async function runLocalTest(script, runner, workspaceRoot) {
|
|
|
49
49
|
const testDir = path.join(workspaceRoot, '.securecode');
|
|
50
50
|
if (!fs.existsSync(testDir))
|
|
51
51
|
fs.mkdirSync(testDir, { recursive: true });
|
|
52
|
-
const
|
|
52
|
+
const isPython = runner === 'python' || runner === 'python3';
|
|
53
|
+
const isTsRunner = runner === 'tsx' || runner === 'ts' || runner === 'bun' || runner === 'deno' || runner === 'pnpm-tsx' || runner === 'yarn-tsx';
|
|
54
|
+
const ext = isPython ? '.py' : (isTsRunner ? '.test.ts' : '.test.js');
|
|
53
55
|
const testFile = path.join(testDir, `verify-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}${ext}`);
|
|
54
56
|
try {
|
|
55
57
|
fs.writeFileSync(testFile, script, 'utf8');
|
|
@@ -65,6 +67,22 @@ async function runLocalTest(script, runner, workspaceRoot) {
|
|
|
65
67
|
runnerBin = 'npx';
|
|
66
68
|
runnerArgs = ['tsx', testFile];
|
|
67
69
|
}
|
|
70
|
+
else if (runner === 'pnpm-tsx') {
|
|
71
|
+
runnerBin = 'pnpm';
|
|
72
|
+
runnerArgs = ['exec', 'tsx', testFile];
|
|
73
|
+
}
|
|
74
|
+
else if (runner === 'yarn-tsx') {
|
|
75
|
+
runnerBin = 'yarn';
|
|
76
|
+
runnerArgs = ['tsx', testFile];
|
|
77
|
+
}
|
|
78
|
+
else if (runner === 'deno') {
|
|
79
|
+
runnerBin = 'deno';
|
|
80
|
+
runnerArgs = ['run', '--allow-read', '--allow-env', testFile];
|
|
81
|
+
}
|
|
82
|
+
else if (runner === 'bun' && isWindows) {
|
|
83
|
+
runnerBin = 'npx';
|
|
84
|
+
runnerArgs = ['bun', testFile];
|
|
85
|
+
}
|
|
68
86
|
else {
|
|
69
87
|
runnerBin = runner;
|
|
70
88
|
runnerArgs = [testFile];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localTestRunner.js","sourceRoot":"","sources":["../../src/utils/localTestRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,
|
|
1
|
+
{"version":3,"file":"localTestRunner.js","sourceRoot":"","sources":["../../src/utils/localTestRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
export type ProjectRuntime = 'bun' | 'node' | 'deno';
|
|
1
|
+
export type ProjectRuntime = 'bun' | 'node' | 'deno' | 'python';
|
|
2
|
+
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'pip' | 'poetry' | 'uv' | null;
|
|
3
|
+
export type Framework = 'electron' | 'next' | 'remix' | 'nuxt' | 'react-native' | 'express' | 'fastify' | 'nestjs' | 'koa' | 'hapi' | 'flask' | 'fastapi' | 'django' | 'react' | 'vue' | 'svelte' | 'cloudflare-workers' | null;
|
|
4
|
+
export type TestabilityTier = 1 | 2 | 3 | 4;
|
|
2
5
|
export interface RuntimeInfo {
|
|
3
6
|
runtime: ProjectRuntime;
|
|
4
7
|
runner: string;
|
|
8
|
+
packageManager: PackageManager;
|
|
9
|
+
framework: Framework;
|
|
10
|
+
frameworkVersion: string | null;
|
|
11
|
+
testabilityTier: TestabilityTier;
|
|
12
|
+
canRunLocally: boolean;
|
|
13
|
+
skipReason?: string;
|
|
5
14
|
hasBunLock: boolean;
|
|
15
|
+
depsInstalled: boolean;
|
|
6
16
|
}
|
|
7
|
-
export declare function detectRuntime(workspaceRoot: string): RuntimeInfo;
|
|
17
|
+
export declare function detectRuntime(workspaceRoot: string, filePath?: string): RuntimeInfo;
|
|
8
18
|
export declare function computeRelativeImportPath(testFileDir: string, targetFilePath: string): string;
|
|
@@ -37,22 +37,259 @@ exports.detectRuntime = detectRuntime;
|
|
|
37
37
|
exports.computeRelativeImportPath = computeRelativeImportPath;
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const JS_FRAMEWORK_RULES = [
|
|
42
|
+
{ dep: 'react-native', framework: 'react-native', tier: 4 },
|
|
43
|
+
{ dep: '@cloudflare/workers-types', framework: 'cloudflare-workers', tier: 4 },
|
|
44
|
+
{ dep: 'wrangler', framework: 'cloudflare-workers', tier: 4 },
|
|
45
|
+
{ dep: 'electron', framework: 'electron', tier: 2 },
|
|
46
|
+
{ dep: 'next', framework: 'next', tier: 2 },
|
|
47
|
+
{ dep: '@remix-run/node', framework: 'remix', tier: 2 },
|
|
48
|
+
{ dep: 'remix', framework: 'remix', tier: 2 },
|
|
49
|
+
{ dep: 'nuxt', framework: 'nuxt', tier: 2 },
|
|
50
|
+
{ dep: '@nestjs/core', framework: 'nestjs', tier: 1 },
|
|
51
|
+
{ dep: 'fastify', framework: 'fastify', tier: 1 },
|
|
52
|
+
{ dep: 'express', framework: 'express', tier: 1 },
|
|
53
|
+
{ dep: 'koa', framework: 'koa', tier: 1 },
|
|
54
|
+
{ dep: '@hapi/hapi', framework: 'hapi', tier: 1 },
|
|
55
|
+
{ dep: 'svelte', framework: 'svelte', tier: 3 },
|
|
56
|
+
{ dep: 'vue', framework: 'vue', tier: 3 },
|
|
57
|
+
{ dep: 'react', framework: 'react', tier: 3 },
|
|
58
|
+
];
|
|
59
|
+
const PY_FRAMEWORK_RULES = [
|
|
60
|
+
{ dep: 'fastapi', framework: 'fastapi', tier: 1 },
|
|
61
|
+
{ dep: 'flask', framework: 'flask', tier: 1 },
|
|
62
|
+
{ dep: 'django', framework: 'django', tier: 1 },
|
|
63
|
+
];
|
|
64
|
+
const TIER_SKIP_REASONS = {
|
|
65
|
+
4: 'Framework requires a runtime that cannot be invoked locally (Metro/worker runtime). Set canTest: false.',
|
|
66
|
+
};
|
|
67
|
+
const probeCache = new Map();
|
|
68
|
+
function probe(bin) {
|
|
69
|
+
if (probeCache.has(bin))
|
|
70
|
+
return probeCache.get(bin);
|
|
71
|
+
let ok = false;
|
|
72
|
+
try {
|
|
73
|
+
const r = (0, child_process_1.spawnSync)(bin, ['--version'], {
|
|
74
|
+
stdio: 'ignore',
|
|
75
|
+
shell: process.platform === 'win32',
|
|
76
|
+
timeout: 4000,
|
|
77
|
+
});
|
|
78
|
+
ok = r.status === 0;
|
|
46
79
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return { runtime: 'deno', runner: 'deno', hasBunLock: false };
|
|
80
|
+
catch {
|
|
81
|
+
ok = false;
|
|
50
82
|
}
|
|
51
|
-
|
|
83
|
+
probeCache.set(bin, ok);
|
|
84
|
+
return ok;
|
|
85
|
+
}
|
|
86
|
+
function readJson(file) {
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function exists(...files) {
|
|
95
|
+
return files.some(f => fs.existsSync(f));
|
|
96
|
+
}
|
|
97
|
+
function findNearest(startDir, root, candidates) {
|
|
98
|
+
let dir = startDir;
|
|
99
|
+
const rootAbs = path.resolve(root);
|
|
100
|
+
while (true) {
|
|
101
|
+
for (const c of candidates) {
|
|
102
|
+
const p = path.join(dir, c);
|
|
103
|
+
if (fs.existsSync(p))
|
|
104
|
+
return { dir, file: p };
|
|
105
|
+
}
|
|
106
|
+
const parent = path.dirname(dir);
|
|
107
|
+
if (parent === dir || !dir.startsWith(rootAbs))
|
|
108
|
+
break;
|
|
109
|
+
dir = parent;
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
function detectJsFramework(pkg) {
|
|
114
|
+
if (!pkg)
|
|
115
|
+
return { framework: null, version: null, tier: 1 };
|
|
116
|
+
const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
117
|
+
for (const rule of JS_FRAMEWORK_RULES) {
|
|
118
|
+
if (deps[rule.dep]) {
|
|
119
|
+
return { framework: rule.framework, version: deps[rule.dep] || null, tier: rule.tier };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { framework: null, version: null, tier: 1 };
|
|
123
|
+
}
|
|
124
|
+
function detectPyFramework(startDir, root) {
|
|
125
|
+
const reqs = findNearest(startDir, root, ['requirements.txt', 'pyproject.toml', 'setup.py', 'Pipfile']);
|
|
126
|
+
if (!reqs)
|
|
127
|
+
return { framework: null, version: null, tier: 1 };
|
|
128
|
+
let text = '';
|
|
129
|
+
try {
|
|
130
|
+
text = fs.readFileSync(reqs.file, 'utf8');
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return { framework: null, version: null, tier: 1 };
|
|
134
|
+
}
|
|
135
|
+
const lower = text.toLowerCase();
|
|
136
|
+
for (const rule of PY_FRAMEWORK_RULES) {
|
|
137
|
+
const re = new RegExp(`^\\s*${rule.dep}(\\s*[=><~!]|\\s*$)`, 'im');
|
|
138
|
+
if (re.test(lower)) {
|
|
139
|
+
const verMatch = lower.match(new RegExp(`${rule.dep}\\s*[=><~!]*\\s*([0-9][0-9a-zA-Z.\\-]*)`, 'im'));
|
|
140
|
+
return { framework: rule.framework, version: verMatch ? verMatch[1] : null, tier: rule.tier };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return { framework: null, version: null, tier: 1 };
|
|
144
|
+
}
|
|
145
|
+
function resolveJsRunner(runtime, pkgManager) {
|
|
146
|
+
if (runtime === 'bun')
|
|
147
|
+
return probe('bun') ? 'bun' : 'tsx';
|
|
148
|
+
if (runtime === 'deno')
|
|
149
|
+
return probe('deno') ? 'deno' : 'tsx';
|
|
150
|
+
if (pkgManager === 'pnpm' && probe('pnpm'))
|
|
151
|
+
return 'pnpm-tsx';
|
|
152
|
+
if (pkgManager === 'yarn' && probe('yarn'))
|
|
153
|
+
return 'yarn-tsx';
|
|
154
|
+
return 'tsx';
|
|
155
|
+
}
|
|
156
|
+
function resolvePythonRunner() {
|
|
157
|
+
if (probe('python3'))
|
|
158
|
+
return { runner: 'python3', installed: true };
|
|
159
|
+
if (probe('python'))
|
|
160
|
+
return { runner: 'python', installed: true };
|
|
161
|
+
return { runner: 'python3', installed: false };
|
|
162
|
+
}
|
|
163
|
+
function detectPackageManager(pkg, nearest) {
|
|
164
|
+
if (pkg?.packageManager) {
|
|
165
|
+
const pm = String(pkg.packageManager).toLowerCase();
|
|
166
|
+
if (pm.startsWith('bun'))
|
|
167
|
+
return 'bun';
|
|
168
|
+
if (pm.startsWith('pnpm'))
|
|
169
|
+
return 'pnpm';
|
|
170
|
+
if (pm.startsWith('yarn'))
|
|
171
|
+
return 'yarn';
|
|
172
|
+
if (pm.startsWith('npm'))
|
|
173
|
+
return 'npm';
|
|
174
|
+
}
|
|
175
|
+
if (nearest) {
|
|
176
|
+
const dir = nearest.dir;
|
|
177
|
+
if (exists(path.join(dir, 'bun.lockb'), path.join(dir, 'bun.lock')))
|
|
178
|
+
return 'bun';
|
|
179
|
+
if (exists(path.join(dir, 'pnpm-lock.yaml')))
|
|
180
|
+
return 'pnpm';
|
|
181
|
+
if (exists(path.join(dir, 'yarn.lock')))
|
|
182
|
+
return 'yarn';
|
|
183
|
+
if (exists(path.join(dir, 'package-lock.json')))
|
|
184
|
+
return 'npm';
|
|
185
|
+
}
|
|
186
|
+
return 'npm';
|
|
187
|
+
}
|
|
188
|
+
function detectRuntime(workspaceRoot, filePath) {
|
|
189
|
+
const rootAbs = path.resolve(workspaceRoot);
|
|
190
|
+
const isPythonFile = filePath ? /\.p(yi?|yx)$/i.test(filePath) : false;
|
|
191
|
+
if (isPythonFile) {
|
|
192
|
+
const startDir = filePath
|
|
193
|
+
? path.resolve(rootAbs, path.dirname(filePath))
|
|
194
|
+
: rootAbs;
|
|
195
|
+
const py = resolvePythonRunner();
|
|
196
|
+
const { framework, version, tier } = detectPyFramework(startDir, rootAbs);
|
|
197
|
+
const pkgMan = (() => {
|
|
198
|
+
if (exists(path.join(startDir, 'poetry.lock')))
|
|
199
|
+
return 'poetry';
|
|
200
|
+
if (exists(path.join(startDir, 'uv.lock')))
|
|
201
|
+
return 'uv';
|
|
202
|
+
if (exists(path.join(startDir, 'Pipfile')))
|
|
203
|
+
return 'pip';
|
|
204
|
+
if (exists(path.join(startDir, 'requirements.txt'), path.join(startDir, 'pyproject.toml')))
|
|
205
|
+
return 'pip';
|
|
206
|
+
return null;
|
|
207
|
+
})();
|
|
208
|
+
const canRun = py.installed && tier !== 4;
|
|
209
|
+
return {
|
|
210
|
+
runtime: 'python',
|
|
211
|
+
runner: py.runner,
|
|
212
|
+
packageManager: pkgMan,
|
|
213
|
+
framework,
|
|
214
|
+
frameworkVersion: version,
|
|
215
|
+
testabilityTier: tier,
|
|
216
|
+
canRunLocally: canRun,
|
|
217
|
+
skipReason: !py.installed
|
|
218
|
+
? 'Python interpreter not found in PATH. Install python3 to run local exploit tests.'
|
|
219
|
+
: tier === 4 ? TIER_SKIP_REASONS[4] : undefined,
|
|
220
|
+
hasBunLock: false,
|
|
221
|
+
depsInstalled: exists(path.join(startDir, '__pycache__')) || exists(path.join(startDir, '.venv'), path.join(startDir, 'venv')),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const startDir = filePath
|
|
225
|
+
? path.resolve(rootAbs, path.dirname(filePath))
|
|
226
|
+
: rootAbs;
|
|
227
|
+
const nearestPkg = findNearest(startDir, rootAbs, ['package.json']);
|
|
228
|
+
const pkg = nearestPkg ? readJson(nearestPkg.file) : null;
|
|
229
|
+
const hasBunLock = exists(path.join(rootAbs, 'bun.lockb'), path.join(rootAbs, 'bun.lock'), path.join(rootAbs, 'bunfig.toml'));
|
|
230
|
+
let runtime = 'node';
|
|
231
|
+
const nearestLock = findNearest(startDir, rootAbs, [
|
|
232
|
+
'bun.lockb', 'bun.lock', 'bunfig.toml',
|
|
233
|
+
'deno.json', 'deno.jsonc',
|
|
234
|
+
'package-lock.json', 'pnpm-lock.yaml', 'yarn.lock',
|
|
235
|
+
]);
|
|
236
|
+
if (pkg?.packageManager && String(pkg.packageManager).toLowerCase().startsWith('bun')) {
|
|
237
|
+
runtime = 'bun';
|
|
238
|
+
}
|
|
239
|
+
else if (pkg?.engines?.bun) {
|
|
240
|
+
runtime = 'bun';
|
|
241
|
+
}
|
|
242
|
+
else if (hasBunLock) {
|
|
243
|
+
runtime = 'bun';
|
|
244
|
+
}
|
|
245
|
+
else if (pkg?.packageManager && String(pkg.packageManager).toLowerCase().startsWith('deno')) {
|
|
246
|
+
runtime = 'deno';
|
|
247
|
+
}
|
|
248
|
+
else if (exists(path.join(rootAbs, 'deno.json'), path.join(rootAbs, 'deno.jsonc'))) {
|
|
249
|
+
runtime = 'deno';
|
|
250
|
+
}
|
|
251
|
+
else if (nearestLock?.file.endsWith('deno.json') || nearestLock?.file.endsWith('deno.jsonc')) {
|
|
252
|
+
runtime = 'deno';
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
runtime = 'node';
|
|
256
|
+
}
|
|
257
|
+
const packageManager = detectPackageManager(pkg, nearestLock);
|
|
258
|
+
const { framework, version, tier } = detectJsFramework(pkg);
|
|
259
|
+
const runner = resolveJsRunner(runtime, packageManager);
|
|
260
|
+
const canRun = tier !== 4;
|
|
261
|
+
const depsInstalled = (() => {
|
|
262
|
+
const searchDirs = [startDir, rootAbs];
|
|
263
|
+
for (const d of searchDirs) {
|
|
264
|
+
if (exists(path.join(d, 'node_modules')))
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
if (nearestPkg) {
|
|
268
|
+
if (exists(path.join(nearestPkg.dir, 'node_modules')))
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
return false;
|
|
272
|
+
})();
|
|
273
|
+
return {
|
|
274
|
+
runtime,
|
|
275
|
+
runner,
|
|
276
|
+
packageManager,
|
|
277
|
+
framework,
|
|
278
|
+
frameworkVersion: version,
|
|
279
|
+
testabilityTier: tier,
|
|
280
|
+
canRunLocally: canRun,
|
|
281
|
+
skipReason: tier === 4 ? TIER_SKIP_REASONS[4] : undefined,
|
|
282
|
+
hasBunLock,
|
|
283
|
+
depsInstalled,
|
|
284
|
+
};
|
|
52
285
|
}
|
|
53
286
|
function computeRelativeImportPath(testFileDir, targetFilePath) {
|
|
54
287
|
const rel = path.relative(testFileDir, targetFilePath);
|
|
55
288
|
const normalized = rel.replace(/\\/g, '/');
|
|
289
|
+
if (/\.p(yi?|yx)$/i.test(targetFilePath)) {
|
|
290
|
+
const fromRoot = path.relative(path.dirname(testFileDir), targetFilePath).replace(/\\/g, '/');
|
|
291
|
+
return fromRoot.startsWith('.') ? fromRoot : `./${fromRoot}`;
|
|
292
|
+
}
|
|
56
293
|
const withoutExt = normalized.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, '');
|
|
57
294
|
return withoutExt.startsWith('.') ? withoutExt : `./${withoutExt}`;
|
|
58
295
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeDetect.js","sourceRoot":"","sources":["../../src/utils/runtimeDetect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,sCAeC;AAED,8DAKC;AAjCD,uCAAyB;AACzB,2CAA6B;AAU7B,SAAgB,aAAa,CAAC,aAAqB;IAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACnE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3D,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACpD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,yBAAyB,CAAC,WAAmB,EAAE,cAAsB;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;AACvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtimeDetect.js","sourceRoot":"","sources":["../../src/utils/runtimeDetect.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED