bugproof 0.1.2 → 0.2.2
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/CHANGELOG.md +61 -5
- package/README.md +175 -4
- package/dist/capture/env-snapshot.d.ts +53 -0
- package/dist/capture/env-snapshot.d.ts.map +1 -0
- package/dist/capture/env-snapshot.js +122 -0
- package/dist/capture/env-snapshot.js.map +1 -0
- package/dist/capture/language-support.d.ts +55 -0
- package/dist/capture/language-support.d.ts.map +1 -0
- package/dist/capture/language-support.js +505 -0
- package/dist/capture/language-support.js.map +1 -0
- package/dist/capture/packager.d.ts +9 -0
- package/dist/capture/packager.d.ts.map +1 -1
- package/dist/capture/packager.js +23 -2
- package/dist/capture/packager.js.map +1 -1
- package/dist/capture/source-strategy.d.ts +52 -0
- package/dist/capture/source-strategy.d.ts.map +1 -0
- package/dist/capture/source-strategy.js +227 -0
- package/dist/capture/source-strategy.js.map +1 -0
- package/dist/cli.js +373 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts +44 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +87 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/replay/engine.d.ts +9 -0
- package/dist/replay/engine.d.ts.map +1 -1
- package/dist/replay/engine.js +29 -3
- package/dist/replay/engine.js.map +1 -1
- package/dist/replay/hints.d.ts +18 -0
- package/dist/replay/hints.d.ts.map +1 -0
- package/dist/replay/hints.js +138 -0
- package/dist/replay/hints.js.map +1 -0
- package/dist/replay/sandbox.js +41 -14
- package/dist/replay/sandbox.js.map +1 -1
- package/dist/replay/verdict.d.ts.map +1 -1
- package/dist/replay/verdict.js +41 -5
- package/dist/replay/verdict.js.map +1 -1
- package/dist/sandbox/bugbox.d.ts.map +1 -1
- package/dist/sandbox/bugbox.js +40 -6
- package/dist/sandbox/bugbox.js.map +1 -1
- package/dist/sandbox/container.d.ts +81 -0
- package/dist/sandbox/container.d.ts.map +1 -0
- package/dist/sandbox/container.js +343 -0
- package/dist/sandbox/container.js.map +1 -0
- package/dist/sandbox/cross-platform.d.ts +59 -0
- package/dist/sandbox/cross-platform.d.ts.map +1 -0
- package/dist/sandbox/cross-platform.js +330 -0
- package/dist/sandbox/cross-platform.js.map +1 -0
- package/dist/sandbox/network.d.ts.map +1 -1
- package/dist/sandbox/network.js +31 -2
- package/dist/sandbox/network.js.map +1 -1
- package/dist/share/gist.d.ts +21 -0
- package/dist/share/gist.d.ts.map +1 -0
- package/dist/share/gist.js +158 -0
- package/dist/share/gist.js.map +1 -0
- package/dist/utils/archive.d.ts +1 -0
- package/dist/utils/archive.d.ts.map +1 -1
- package/dist/utils/archive.js +42 -1
- package/dist/utils/archive.js.map +1 -1
- package/dist/utils/artifact-validation.d.ts +7 -0
- package/dist/utils/artifact-validation.d.ts.map +1 -0
- package/dist/utils/artifact-validation.js +212 -0
- package/dist/utils/artifact-validation.js.map +1 -0
- package/dist/utils/dependencies.d.ts +18 -0
- package/dist/utils/dependencies.d.ts.map +1 -0
- package/dist/utils/dependencies.js +218 -0
- package/dist/utils/dependencies.js.map +1 -0
- package/package.json +3 -2
- package/scripts/postinstall.cjs +38 -5
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BugBox Cross-Platform Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles the scenario where a bug was captured on one OS but replayed on another.
|
|
5
|
+
* Instead of requiring Docker/WSL, this layer translates:
|
|
6
|
+
*
|
|
7
|
+
* 1. Commands — python3 ↔ python, node stays node, bash → cmd/powershell
|
|
8
|
+
* 2. Paths — / ↔ \, $HOME ↔ %USERPROFILE%, path separators in PATH
|
|
9
|
+
* 3. Environment variables — HOME ↔ USERPROFILE, USER ↔ USERNAME, etc.
|
|
10
|
+
* 4. Shell wrappers — bash -c "..." → cmd /c "..." or powershell -c "..."
|
|
11
|
+
*
|
|
12
|
+
* Limitations (honest about what we CAN'T do):
|
|
13
|
+
* - Compiled binaries (ELF on Windows, PE on Linux) → fail with clear message
|
|
14
|
+
* - OS-specific syscalls (inotify, kqueue, epoll) → fail with clear message
|
|
15
|
+
* - Shell scripts with heavy bash-isms → best-effort translation, may fail
|
|
16
|
+
*
|
|
17
|
+
* Philosophy: Translate what's translatable, warn clearly about what isn't.
|
|
18
|
+
*/
|
|
19
|
+
import * as os from 'os';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import { spawnSync } from 'child_process';
|
|
22
|
+
/**
|
|
23
|
+
* Detects whether cross-platform translation is needed and assesses compatibility.
|
|
24
|
+
*/
|
|
25
|
+
export function detectCrossPlatform(capturedPlatform, replayPlatform) {
|
|
26
|
+
const replay = replayPlatform || os.platform();
|
|
27
|
+
const needsTranslation = capturedPlatform !== replay;
|
|
28
|
+
const warnings = [];
|
|
29
|
+
let likelyCompatible = true;
|
|
30
|
+
if (needsTranslation) {
|
|
31
|
+
warnings.push(`Cross-platform replay: captured on ${platformName(capturedPlatform)}, replaying on ${platformName(replay)}`);
|
|
32
|
+
// Assess compatibility
|
|
33
|
+
if ((capturedPlatform === 'linux' && replay === 'darwin') ||
|
|
34
|
+
(capturedPlatform === 'darwin' && replay === 'linux')) {
|
|
35
|
+
// Unix-to-Unix: high compatibility for scripting languages
|
|
36
|
+
likelyCompatible = true;
|
|
37
|
+
warnings.push('Unix-to-Unix translation: high compatibility expected for scripting languages.');
|
|
38
|
+
}
|
|
39
|
+
else if ((capturedPlatform === 'win32' && (replay === 'linux' || replay === 'darwin')) ||
|
|
40
|
+
((capturedPlatform === 'linux' || capturedPlatform === 'darwin') && replay === 'win32')) {
|
|
41
|
+
// Cross-family: medium compatibility
|
|
42
|
+
likelyCompatible = true; // Optimistic — we'll catch hard failures in command translation
|
|
43
|
+
warnings.push('Cross-family translation applied. Path separators and commands will be adapted.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { capturedPlatform, replayPlatform: replay, needsTranslation, likelyCompatible, warnings };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Translates a command from the captured platform to the replay platform.
|
|
50
|
+
*/
|
|
51
|
+
export function translateCommand(command, capturedPlatform, replayPlatform) {
|
|
52
|
+
const replay = replayPlatform || os.platform();
|
|
53
|
+
const translations = [];
|
|
54
|
+
const blockers = [];
|
|
55
|
+
if (capturedPlatform === replay) {
|
|
56
|
+
return { command, translated: false, translations: [], blockers: [] };
|
|
57
|
+
}
|
|
58
|
+
let translated = [...command];
|
|
59
|
+
// 1. Translate the executable
|
|
60
|
+
translated[0] = translateExecutable(translated[0], capturedPlatform, replay, translations, blockers);
|
|
61
|
+
// 2. Translate shell wrappers
|
|
62
|
+
translated = translateShellWrapper(translated, capturedPlatform, replay, translations);
|
|
63
|
+
// 3. Translate path arguments
|
|
64
|
+
translated = translated.map((arg, i) => {
|
|
65
|
+
if (i === 0)
|
|
66
|
+
return arg; // Already handled
|
|
67
|
+
return translatePathArg(arg, capturedPlatform, replay);
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
command: translated,
|
|
71
|
+
translated: translations.length > 0,
|
|
72
|
+
translations,
|
|
73
|
+
blockers,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Translates environment variables between platforms.
|
|
78
|
+
*/
|
|
79
|
+
export function translateEnvironment(env, capturedPlatform, replayPlatform) {
|
|
80
|
+
const replay = replayPlatform || os.platform();
|
|
81
|
+
const translations = [];
|
|
82
|
+
if (capturedPlatform === replay) {
|
|
83
|
+
return { environment: env, translations: [] };
|
|
84
|
+
}
|
|
85
|
+
const result = { ...env };
|
|
86
|
+
// Translate PATH separator
|
|
87
|
+
if (result.PATH) {
|
|
88
|
+
const fromSep = capturedPlatform === 'win32' ? ';' : ':';
|
|
89
|
+
const toSep = replay === 'win32' ? ';' : ':';
|
|
90
|
+
if (fromSep !== toSep) {
|
|
91
|
+
result.PATH = result.PATH.split(fromSep).join(toSep);
|
|
92
|
+
translations.push(`PATH separator: '${fromSep}' → '${toSep}'`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Map HOME ↔ USERPROFILE
|
|
96
|
+
if (capturedPlatform === 'win32' && replay !== 'win32') {
|
|
97
|
+
// Windows → Unix
|
|
98
|
+
if (result.USERPROFILE && !result.HOME) {
|
|
99
|
+
result.HOME = translatePathValue(result.USERPROFILE, capturedPlatform, replay);
|
|
100
|
+
translations.push('USERPROFILE → HOME');
|
|
101
|
+
}
|
|
102
|
+
if (result.USERNAME && !result.USER) {
|
|
103
|
+
result.USER = result.USERNAME;
|
|
104
|
+
translations.push('USERNAME → USER');
|
|
105
|
+
}
|
|
106
|
+
if (result.APPDATA && !result.XDG_CONFIG_HOME) {
|
|
107
|
+
result.XDG_CONFIG_HOME = translatePathValue(result.APPDATA, capturedPlatform, replay);
|
|
108
|
+
translations.push('APPDATA → XDG_CONFIG_HOME');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (capturedPlatform !== 'win32' && replay === 'win32') {
|
|
112
|
+
// Unix → Windows
|
|
113
|
+
if (result.HOME && !result.USERPROFILE) {
|
|
114
|
+
result.USERPROFILE = translatePathValue(result.HOME, capturedPlatform, replay);
|
|
115
|
+
translations.push('HOME → USERPROFILE');
|
|
116
|
+
}
|
|
117
|
+
if (result.USER && !result.USERNAME) {
|
|
118
|
+
result.USERNAME = result.USER;
|
|
119
|
+
translations.push('USER → USERNAME');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Translate TMPDIR/TMP/TEMP
|
|
123
|
+
if (capturedPlatform !== 'win32' && replay === 'win32') {
|
|
124
|
+
if (result.TMPDIR && !result.TEMP) {
|
|
125
|
+
result.TEMP = os.tmpdir();
|
|
126
|
+
result.TMP = os.tmpdir();
|
|
127
|
+
translations.push('TMPDIR → TEMP/TMP (using local temp dir)');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (capturedPlatform === 'win32' && replay !== 'win32') {
|
|
131
|
+
if ((result.TEMP || result.TMP) && !result.TMPDIR) {
|
|
132
|
+
result.TMPDIR = os.tmpdir();
|
|
133
|
+
translations.push('TEMP/TMP → TMPDIR (using local temp dir)');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Translate path values in all env vars
|
|
137
|
+
for (const key of Object.keys(result)) {
|
|
138
|
+
if (result[key] && looksLikePath(result[key], capturedPlatform)) {
|
|
139
|
+
const translated = translatePathValue(result[key], capturedPlatform, replay);
|
|
140
|
+
if (translated !== result[key]) {
|
|
141
|
+
result[key] = translated;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { environment: result, translations };
|
|
146
|
+
}
|
|
147
|
+
// ── Command translation helpers ──
|
|
148
|
+
/** Common command aliases across platforms */
|
|
149
|
+
const COMMAND_MAP = {
|
|
150
|
+
// ── Scripting languages ──
|
|
151
|
+
'python3': { win32: 'python' },
|
|
152
|
+
'python': { linux: 'python3', darwin: 'python3' },
|
|
153
|
+
'pip3': { win32: 'pip' },
|
|
154
|
+
'pip': { linux: 'pip3', darwin: 'pip3' },
|
|
155
|
+
// ── Java/JVM ──
|
|
156
|
+
'gradlew': { win32: 'gradlew.bat' },
|
|
157
|
+
'gradlew.bat': { linux: './gradlew', darwin: './gradlew' },
|
|
158
|
+
'./gradlew': { win32: 'gradlew.bat' },
|
|
159
|
+
'mvnw': { win32: 'mvnw.cmd' },
|
|
160
|
+
'mvnw.cmd': { linux: './mvnw', darwin: './mvnw' },
|
|
161
|
+
'./mvnw': { win32: 'mvnw.cmd' },
|
|
162
|
+
// ── C/C++ build tools ──
|
|
163
|
+
'make': { win32: 'mingw32-make' },
|
|
164
|
+
'mingw32-make': { linux: 'make', darwin: 'make' },
|
|
165
|
+
'cc': { win32: 'gcc' },
|
|
166
|
+
'c++': { win32: 'g++' },
|
|
167
|
+
// ── .NET ──
|
|
168
|
+
'dotnet': { win32: 'dotnet', linux: 'dotnet', darwin: 'dotnet' },
|
|
169
|
+
// ── Utilities ──
|
|
170
|
+
'open': { win32: 'start', linux: 'xdg-open' },
|
|
171
|
+
'xdg-open': { win32: 'start', darwin: 'open' },
|
|
172
|
+
'start': { linux: 'xdg-open', darwin: 'open' },
|
|
173
|
+
'cls': { linux: 'clear', darwin: 'clear' },
|
|
174
|
+
'clear': { win32: 'cls' },
|
|
175
|
+
'cat': { win32: 'type' },
|
|
176
|
+
'ls': { win32: 'dir' },
|
|
177
|
+
'rm': { win32: 'del' },
|
|
178
|
+
'cp': { win32: 'copy' },
|
|
179
|
+
'mv': { win32: 'move' },
|
|
180
|
+
'which': { win32: 'where' },
|
|
181
|
+
'where': { linux: 'which', darwin: 'which' },
|
|
182
|
+
// ── Shell ──
|
|
183
|
+
'sh': { win32: 'bash' },
|
|
184
|
+
};
|
|
185
|
+
/** Binary extensions that cannot run cross-platform (reserved for future use) */
|
|
186
|
+
const _NATIVE_BINARY_EXTENSIONS = ['.exe', '.dll', '.so', '.dylib', '.elf', ''];
|
|
187
|
+
function translateExecutable(exe, from, to, translations, blockers) {
|
|
188
|
+
const baseName = path.basename(exe).replace(/\.exe$/i, '');
|
|
189
|
+
// Check for native binaries
|
|
190
|
+
const ext = path.extname(exe).toLowerCase();
|
|
191
|
+
if (from !== to) {
|
|
192
|
+
if (from === 'win32' && ext === '.exe' && to !== 'win32') {
|
|
193
|
+
blockers.push(`Cannot run Windows executable '${exe}' on ${platformName(to)}. Requires Windows or Wine.`);
|
|
194
|
+
}
|
|
195
|
+
if (from === 'linux' && !ext && to === 'win32') {
|
|
196
|
+
// Could be a Linux ELF binary — check if it's a known scripting command
|
|
197
|
+
if (!isScriptingCommand(baseName)) {
|
|
198
|
+
blockers.push(`Binary '${exe}' may be a Linux ELF executable. Cannot run on Windows without WSL.`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Try command map
|
|
203
|
+
const mapping = COMMAND_MAP[baseName];
|
|
204
|
+
if (mapping && mapping[to]) {
|
|
205
|
+
// Verify the target command exists
|
|
206
|
+
const exists = commandExists(mapping[to]);
|
|
207
|
+
if (exists) {
|
|
208
|
+
translations.push(`Command: ${baseName} → ${mapping[to]}`);
|
|
209
|
+
return mapping[to];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// python3 → python fallback on Windows
|
|
213
|
+
if (baseName === 'python3' && to === 'win32') {
|
|
214
|
+
if (commandExists('python')) {
|
|
215
|
+
translations.push('Command: python3 → python');
|
|
216
|
+
return 'python';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return exe;
|
|
220
|
+
}
|
|
221
|
+
function translateShellWrapper(command, from, to, translations) {
|
|
222
|
+
if (command.length < 2)
|
|
223
|
+
return command;
|
|
224
|
+
const exe = path.basename(command[0]).replace(/\.exe$/i, '');
|
|
225
|
+
// bash -c "..." → cmd /c "..." or powershell -c "..."
|
|
226
|
+
if ((exe === 'bash' || exe === 'sh') && command[1] === '-c' && to === 'win32') {
|
|
227
|
+
if (commandExists('bash')) {
|
|
228
|
+
// WSL/Git Bash available — keep as-is
|
|
229
|
+
return command;
|
|
230
|
+
}
|
|
231
|
+
translations.push(`Shell: ${exe} -c → powershell -Command`);
|
|
232
|
+
return ['powershell', '-NoProfile', '-Command', ...command.slice(2)];
|
|
233
|
+
}
|
|
234
|
+
// cmd /c "..." → bash -c "..." on Unix
|
|
235
|
+
if (exe === 'cmd' && (command[1] === '/c' || command[1] === '/C') && to !== 'win32') {
|
|
236
|
+
translations.push('Shell: cmd /c → bash -c');
|
|
237
|
+
return ['bash', '-c', ...command.slice(2)];
|
|
238
|
+
}
|
|
239
|
+
// powershell -Command "..." → bash -c "..." on Unix
|
|
240
|
+
if ((exe === 'powershell' || exe === 'pwsh') && to !== 'win32') {
|
|
241
|
+
const cmdIdx = command.findIndex(a => a === '-Command' || a === '-c');
|
|
242
|
+
if (cmdIdx >= 0) {
|
|
243
|
+
translations.push(`Shell: ${exe} → bash -c`);
|
|
244
|
+
return ['bash', '-c', ...command.slice(cmdIdx + 1)];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return command;
|
|
248
|
+
}
|
|
249
|
+
// ── Path translation ──
|
|
250
|
+
function translatePathArg(arg, from, to) {
|
|
251
|
+
if (!looksLikePath(arg, from))
|
|
252
|
+
return arg;
|
|
253
|
+
return translatePathValue(arg, from, to);
|
|
254
|
+
}
|
|
255
|
+
function translatePathValue(value, from, to) {
|
|
256
|
+
if (from === 'win32' && to !== 'win32') {
|
|
257
|
+
// Windows → Unix: C:\Users\foo → /home/foo (best effort)
|
|
258
|
+
let result = value.replace(/\\/g, '/');
|
|
259
|
+
// Strip drive letter
|
|
260
|
+
result = result.replace(/^[A-Za-z]:/, '');
|
|
261
|
+
// Map common Windows paths
|
|
262
|
+
result = result.replace(/^\/Users\//, '/home/');
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
if (from !== 'win32' && to === 'win32') {
|
|
266
|
+
// Unix → Windows: /home/foo/project → C:\Users\foo\project (best effort)
|
|
267
|
+
let result = value.replace(/\//g, '\\');
|
|
268
|
+
// Add drive letter if absolute
|
|
269
|
+
if (result.startsWith('\\')) {
|
|
270
|
+
result = 'C:' + result;
|
|
271
|
+
}
|
|
272
|
+
// Map common Unix paths
|
|
273
|
+
result = result.replace(/^C:\\home\\/, 'C:\\Users\\');
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
return value;
|
|
277
|
+
}
|
|
278
|
+
function looksLikePath(value, platform) {
|
|
279
|
+
if (platform === 'win32') {
|
|
280
|
+
return /^[A-Za-z]:[/\\]/.test(value) || value.includes('\\');
|
|
281
|
+
}
|
|
282
|
+
return value.startsWith('/') || value.startsWith('./') || value.startsWith('../');
|
|
283
|
+
}
|
|
284
|
+
// ── Utilities ──
|
|
285
|
+
function platformName(p) {
|
|
286
|
+
switch (p) {
|
|
287
|
+
case 'win32': return 'Windows';
|
|
288
|
+
case 'linux': return 'Linux';
|
|
289
|
+
case 'darwin': return 'macOS';
|
|
290
|
+
default: return p;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function isScriptingCommand(name) {
|
|
294
|
+
const crossPlatformCommands = [
|
|
295
|
+
// Scripting runtimes
|
|
296
|
+
'node', 'python', 'python3', 'ruby', 'perl', 'php', 'deno', 'bun',
|
|
297
|
+
// JVM
|
|
298
|
+
'java', 'javac', 'kotlin', 'kotlinc', 'scala', 'scalac',
|
|
299
|
+
// Compiled but cross-platform source
|
|
300
|
+
'go', 'cargo', 'rustc', 'gcc', 'g++', 'clang', 'clang++', 'cc', 'c++',
|
|
301
|
+
// Build tools
|
|
302
|
+
'make', 'cmake', 'ninja', 'meson', 'gradle', 'gradlew', 'mvn', 'mvnw', 'sbt', 'ant',
|
|
303
|
+
'msbuild', 'dotnet', 'xcodebuild',
|
|
304
|
+
// Package managers
|
|
305
|
+
'npm', 'npx', 'yarn', 'pnpm', 'pip', 'pip3', 'gem', 'bundle', 'composer',
|
|
306
|
+
'apt', 'brew', 'choco', 'scoop', 'pacman',
|
|
307
|
+
// Version managers
|
|
308
|
+
'nvm', 'pyenv', 'rbenv', 'rustup', 'sdkman',
|
|
309
|
+
// Test runners
|
|
310
|
+
'jest', 'pytest', 'mocha', 'vitest', 'rspec', 'junit',
|
|
311
|
+
// Misc tools
|
|
312
|
+
'git', 'curl', 'wget', 'tar', 'unzip', 'grep', 'find', 'sed', 'awk',
|
|
313
|
+
];
|
|
314
|
+
return crossPlatformCommands.includes(name);
|
|
315
|
+
}
|
|
316
|
+
function commandExists(name) {
|
|
317
|
+
try {
|
|
318
|
+
const cmd = os.platform() === 'win32' ? 'where' : 'which';
|
|
319
|
+
const result = spawnSync(cmd, [name], {
|
|
320
|
+
encoding: 'utf-8',
|
|
321
|
+
timeout: 3000,
|
|
322
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
323
|
+
});
|
|
324
|
+
return result.status === 0;
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=cross-platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform.js","sourceRoot":"","sources":["../../src/sandbox/cross-platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAuB/E"}
|
package/dist/sandbox/network.js
CHANGED
|
@@ -119,13 +119,18 @@ export function createNetworkCleanup(strategy, ruleName) {
|
|
|
119
119
|
* @returns true if the rule was added, false on failure.
|
|
120
120
|
*/
|
|
121
121
|
export function addFirewallBlockRule(ruleName, exePath) {
|
|
122
|
+
const safeRuleName = sanitizeFirewallRuleName(ruleName);
|
|
123
|
+
const safeExePath = sanitizeExecutablePath(exePath);
|
|
124
|
+
if (!safeRuleName || !safeExePath) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
122
127
|
try {
|
|
123
128
|
const result = spawnSync('netsh', [
|
|
124
129
|
'advfirewall', 'firewall', 'add', 'rule',
|
|
125
|
-
`name=${
|
|
130
|
+
`name=${safeRuleName}`,
|
|
126
131
|
'dir=out',
|
|
127
132
|
'action=block',
|
|
128
|
-
`program=${
|
|
133
|
+
`program=${safeExePath}`,
|
|
129
134
|
], { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
130
135
|
return result.status === 0;
|
|
131
136
|
}
|
|
@@ -133,4 +138,28 @@ export function addFirewallBlockRule(ruleName, exePath) {
|
|
|
133
138
|
return false;
|
|
134
139
|
}
|
|
135
140
|
}
|
|
141
|
+
function sanitizeFirewallRuleName(value) {
|
|
142
|
+
if (!value || value.length > 120) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
if (/[\r\n\t=]/.test(value)) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
if (!/^[A-Za-z0-9 _.-]+$/.test(value)) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
function sanitizeExecutablePath(value) {
|
|
154
|
+
if (!value || value.length > 260) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
if (/[\r\n\0]/.test(value)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
if (/["<>|]/.test(value)) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
136
165
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAe1C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA0B;IAC9D,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAyB,EACzB,OAAiB;IAEjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO;gBACL,oEAAoE;gBACpE,mEAAmE;gBACnE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;gBAClE,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,4CAA4C;gBAC5C,mEAAmE;gBACnE,gCAAgC;gBAChC,OAAO,EAAE;oBACP,cAAc;oBACd,IAAI;oBACJ,2CAA2C;oBAC3C,IAAI;oBACJ,GAAG,OAAO;iBACX;gBACD,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,OAAO;YACV,sEAAsE;YACtE,0EAA0E;YAC1E,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,IAAI;gBAClB,QAAQ;aACT,CAAC;QAEJ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAyB,EACzB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,SAAS,CACP,OAAO,EACP,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC,EACjE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,EACP;YACE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;YACxC,QAAQ,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Share Engine — push .bug artifacts to GitHub Gist
|
|
3
|
+
*
|
|
4
|
+
* Creates a secret gist with the artifact contents for easy sharing.
|
|
5
|
+
* Recipients can download and replay with: bugproof pull <gist-url>
|
|
6
|
+
*/
|
|
7
|
+
export interface ShareResult {
|
|
8
|
+
url: string;
|
|
9
|
+
gistId: string;
|
|
10
|
+
rawUrl: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function sanitizeShareError(input: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Uploads artifact contents to a GitHub Gist.
|
|
15
|
+
* Requires GITHUB_TOKEN or BUGPROOF_GITHUB_TOKEN env var.
|
|
16
|
+
*/
|
|
17
|
+
export declare function shareToGist(artifactPath: string, options?: {
|
|
18
|
+
public?: boolean;
|
|
19
|
+
description?: string;
|
|
20
|
+
}): Promise<ShareResult>;
|
|
21
|
+
//# sourceMappingURL=gist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gist.d.ts","sourceRoot":"","sources":["../../src/share/gist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,WAAW,CAAC,CA4EtB"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Share Engine — push .bug artifacts to GitHub Gist
|
|
3
|
+
*
|
|
4
|
+
* Creates a secret gist with the artifact contents for easy sharing.
|
|
5
|
+
* Recipients can download and replay with: bugproof pull <gist-url>
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import * as https from 'https';
|
|
11
|
+
import { extractZip } from '../utils/archive.js';
|
|
12
|
+
export function sanitizeShareError(input) {
|
|
13
|
+
return input
|
|
14
|
+
.replace(/Bearer\s+[A-Za-z0-9_\-.]+/gi, 'Bearer [REDACTED]')
|
|
15
|
+
.replace(/(gh[pousr]_[A-Za-z0-9_]+)/g, '[REDACTED_TOKEN]')
|
|
16
|
+
.replace(/("authorization"\s*:\s*")([^"]+)(")/gi, '$1[REDACTED]$3')
|
|
17
|
+
.replace(/(token\s*[=:]\s*)([^\s,]+)/gi, '$1[REDACTED]');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Uploads artifact contents to a GitHub Gist.
|
|
21
|
+
* Requires GITHUB_TOKEN or BUGPROOF_GITHUB_TOKEN env var.
|
|
22
|
+
*/
|
|
23
|
+
export async function shareToGist(artifactPath, options = {}) {
|
|
24
|
+
const token = process.env.BUGPROOF_GITHUB_TOKEN || process.env.GITHUB_TOKEN;
|
|
25
|
+
if (!token) {
|
|
26
|
+
throw new Error('GitHub token required for sharing. Set GITHUB_TOKEN or BUGPROOF_GITHUB_TOKEN environment variable.\n' +
|
|
27
|
+
'Create a token at: https://github.com/settings/tokens (needs "gist" scope)');
|
|
28
|
+
}
|
|
29
|
+
// Extract artifact if it's a zip
|
|
30
|
+
let extractDir;
|
|
31
|
+
let targetDir;
|
|
32
|
+
const stat = fs.statSync(artifactPath);
|
|
33
|
+
if (stat.isFile()) {
|
|
34
|
+
extractDir = fs.mkdtempSync(path.join(os.tmpdir(), 'bugproof-share-'));
|
|
35
|
+
await extractZip(artifactPath, extractDir);
|
|
36
|
+
targetDir = extractDir;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
targetDir = artifactPath;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
// Read key files from the artifact
|
|
43
|
+
const files = {};
|
|
44
|
+
const keyFiles = ['manifest.json', 'failure.json', 'run.json', 'env.schema.json'];
|
|
45
|
+
for (const filename of keyFiles) {
|
|
46
|
+
const filePath = path.join(targetDir, filename);
|
|
47
|
+
if (fs.existsSync(filePath)) {
|
|
48
|
+
files[filename] = { content: fs.readFileSync(filePath, 'utf-8') };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Add a README for context
|
|
52
|
+
const manifest = JSON.parse(fs.readFileSync(path.join(targetDir, 'manifest.json'), 'utf-8'));
|
|
53
|
+
files['README.md'] = {
|
|
54
|
+
content: generateGistReadme(manifest),
|
|
55
|
+
};
|
|
56
|
+
// Add stderr/stdout logs if they exist
|
|
57
|
+
const stderrPath = path.join(targetDir, 'stderr.log');
|
|
58
|
+
const stdoutPath = path.join(targetDir, 'stdout.log');
|
|
59
|
+
if (fs.existsSync(stderrPath)) {
|
|
60
|
+
const content = fs.readFileSync(stderrPath, 'utf-8');
|
|
61
|
+
if (content.length <= 100000) { // Gist file size limit
|
|
62
|
+
files['stderr.log'] = { content };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (fs.existsSync(stdoutPath)) {
|
|
66
|
+
const content = fs.readFileSync(stdoutPath, 'utf-8');
|
|
67
|
+
if (content.length <= 100000) {
|
|
68
|
+
files['stdout.log'] = { content };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Create the gist
|
|
72
|
+
const gistData = JSON.stringify({
|
|
73
|
+
description: options.description || `BugProof: ${manifest.name} — ${manifest.description}`,
|
|
74
|
+
public: options.public || false,
|
|
75
|
+
files,
|
|
76
|
+
});
|
|
77
|
+
const result = await httpPost('https://api.github.com/gists', gistData, token);
|
|
78
|
+
const parsed = JSON.parse(result);
|
|
79
|
+
return {
|
|
80
|
+
url: parsed.html_url,
|
|
81
|
+
gistId: parsed.id,
|
|
82
|
+
rawUrl: parsed.html_url + '/raw',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
if (extractDir) {
|
|
87
|
+
fs.rmSync(extractDir, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
+
function generateGistReadme(manifest) {
|
|
93
|
+
return `# BugProof Artifact: ${manifest.name}
|
|
94
|
+
|
|
95
|
+
> ${manifest.description}
|
|
96
|
+
|
|
97
|
+
## Quick Replay
|
|
98
|
+
|
|
99
|
+
\`\`\`bash
|
|
100
|
+
# Download and replay this bug:
|
|
101
|
+
bugproof pull ${manifest.name}
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
## Details
|
|
105
|
+
|
|
106
|
+
| Field | Value |
|
|
107
|
+
|-------|-------|
|
|
108
|
+
| Command | \`${manifest.command.join(' ')}\` |
|
|
109
|
+
| Exit Code | ${manifest.exit_code} |
|
|
110
|
+
| Platform | ${manifest.captured_on.os}/${manifest.captured_on.arch} |
|
|
111
|
+
| Node | ${manifest.captured_on.node_version} |
|
|
112
|
+
| Captured | ${manifest.captured_at} |
|
|
113
|
+
| Git | ${manifest.captured_on.git_branch || 'n/a'} @ ${(manifest.captured_on.git_commit || 'n/a').slice(0, 8)} |
|
|
114
|
+
|
|
115
|
+
## Files
|
|
116
|
+
|
|
117
|
+
${manifest.files_count} files captured (${(manifest.files_size_bytes / 1024).toFixed(1)} KB)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
*Generated by [BugProof](https://github.com/sidinsearch/BugProof) v${manifest.bugproof_version}*
|
|
121
|
+
`;
|
|
122
|
+
}
|
|
123
|
+
function httpPost(url, data, token) {
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
const urlObj = new URL(url);
|
|
126
|
+
const options = {
|
|
127
|
+
hostname: urlObj.hostname,
|
|
128
|
+
port: 443,
|
|
129
|
+
path: urlObj.pathname,
|
|
130
|
+
method: 'POST',
|
|
131
|
+
headers: {
|
|
132
|
+
'Content-Type': 'application/json',
|
|
133
|
+
'Authorization': `Bearer ${token}`,
|
|
134
|
+
'User-Agent': 'BugProof-CLI',
|
|
135
|
+
'Accept': 'application/vnd.github+json',
|
|
136
|
+
'Content-Length': Buffer.byteLength(data),
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
const req = https.request(options, (res) => {
|
|
140
|
+
let body = '';
|
|
141
|
+
res.on('data', (chunk) => { body += chunk; });
|
|
142
|
+
res.on('end', () => {
|
|
143
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
144
|
+
resolve(body);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
reject(new Error(sanitizeShareError(`GitHub API error ${res.statusCode}: ${body}`)));
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
req.on('error', (err) => {
|
|
152
|
+
reject(new Error(sanitizeShareError(String(err))));
|
|
153
|
+
});
|
|
154
|
+
req.write(data);
|
|
155
|
+
req.end();
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=gist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gist.js","sourceRoot":"","sources":["../../src/share/gist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAYjD,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK;SACT,OAAO,CAAC,6BAA6B,EAAE,mBAAmB,CAAC;SAC3D,OAAO,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;SACzD,OAAO,CAAC,uCAAuC,EAAE,gBAAgB,CAAC;SAClE,OAAO,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,YAAoB,EACpB,UAAsD,EAAE;IAExD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,sGAAsG;YACtG,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAiB,CAAC;IAEtB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC3C,SAAS,GAAG,UAAU,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAElF,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACpE,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7F,KAAK,CAAC,WAAW,CAAC,GAAG;YACnB,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC;SACtC,CAAC;QAEF,uCAAuC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,uBAAuB;gBACrD,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBAC7B,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,aAAa,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE;YAC1F,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,8BAA8B,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,QAAQ;YACpB,MAAM,EAAE,MAAM,CAAC,EAAE;YACjB,MAAM,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM;SACjC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,EAAE,CAAC;YACf,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,SAAS,kBAAkB,CAAC,QAAa;IACvC,OAAO,wBAAwB,QAAQ,CAAC,IAAI;;IAE1C,QAAQ,CAAC,WAAW;;;;;;gBAMR,QAAQ,CAAC,IAAI;;;;;;;gBAOb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,QAAQ,CAAC,SAAS;eACnB,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI;WACxD,QAAQ,CAAC,WAAW,CAAC,YAAY;eAC7B,QAAQ,CAAC,WAAW;UACzB,QAAQ,CAAC,WAAW,CAAC,UAAU,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;;;EAI5G,QAAQ,CAAC,WAAW,oBAAoB,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;;qEAGlB,QAAQ,CAAC,gBAAgB;CAC7F,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,YAAY,EAAE,cAAc;gBAC5B,QAAQ,EAAE,6BAA6B;gBACvC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,oBAAoB,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/utils/archive.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"AAUA,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CASjF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChF"}
|