@hagicode/hagiscript 0.2.9-dev.131.1.433ddb7 → 0.2.9-dev.132.1.13b97a0
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { chmod, mkdir, stat } from "node:fs/promises";
|
|
2
2
|
import { path7za } from "7zip-bin";
|
|
3
|
-
import { CommandExecutionError, runCommand } from "./command-launch.js";
|
|
3
|
+
import { CommandExecutionError, normalizeCommandPath, runCommand } from "./command-launch.js";
|
|
4
4
|
export class SevenZipExtractionError extends Error {
|
|
5
5
|
constructor(message, options) {
|
|
6
6
|
super(message, options);
|
|
@@ -17,29 +17,74 @@ export function getBundledSevenZipBinaryPath() {
|
|
|
17
17
|
export function createBundledSevenZipExtractor(options = {}) {
|
|
18
18
|
const binaryPath = options.binaryPath?.trim() || getBundledSevenZipBinaryPath();
|
|
19
19
|
const runner = options.runner ?? runCommand;
|
|
20
|
+
const systemFallbackBinaryPath = normalizeSystemFallbackBinaryPath(options.systemFallbackBinaryPath, binaryPath);
|
|
20
21
|
return {
|
|
21
22
|
binaryPath,
|
|
22
23
|
async extract(archivePath, destination) {
|
|
23
24
|
await mkdir(destination, { recursive: true });
|
|
24
25
|
try {
|
|
25
|
-
await
|
|
26
|
-
await runner(binaryPath, ["x", "-bd", "-y", `-o${destination}`, archivePath], {
|
|
27
|
-
maxBuffer: 10 * 1024 * 1024
|
|
28
|
-
});
|
|
26
|
+
await extractWithBinary(runner, binaryPath, archivePath, destination);
|
|
29
27
|
}
|
|
30
28
|
catch (error) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
if (systemFallbackBinaryPath &&
|
|
30
|
+
shouldRetryWithSystemFallback(binaryPath, error)) {
|
|
31
|
+
try {
|
|
32
|
+
await extractWithBinary(runner, systemFallbackBinaryPath, archivePath, destination);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
catch (fallbackError) {
|
|
36
|
+
throw new SevenZipExtractionError(`Failed to extract 7z archive ${archivePath} with bundled provider ${binaryPath}: ${formatExtractionFailureDetails(error)}. Fallback ${systemFallbackBinaryPath} also failed: ${formatExtractionFailureDetails(fallbackError)}`, fallbackError instanceof Error
|
|
37
|
+
? { cause: fallbackError }
|
|
38
|
+
: error instanceof Error
|
|
39
|
+
? { cause: error }
|
|
40
|
+
: undefined);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw new SevenZipExtractionError(`Failed to extract 7z archive ${archivePath} with bundled provider ${binaryPath}: ${formatExtractionFailureDetails(error)}`, error instanceof Error ? { cause: error } : undefined);
|
|
39
44
|
}
|
|
40
45
|
}
|
|
41
46
|
};
|
|
42
47
|
}
|
|
48
|
+
async function extractWithBinary(runner, binaryPath, archivePath, destination) {
|
|
49
|
+
await ensureBundledSevenZipBinaryExecutable(binaryPath);
|
|
50
|
+
await runner(binaryPath, ["x", "-bd", "-y", `-o${destination}`, archivePath], {
|
|
51
|
+
maxBuffer: 10 * 1024 * 1024
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function shouldRetryWithSystemFallback(binaryPath, error) {
|
|
55
|
+
const normalizedBinaryPath = normalizeCommandPath(binaryPath).toLowerCase();
|
|
56
|
+
if (normalizedBinaryPath === "7z" ||
|
|
57
|
+
normalizedBinaryPath.endsWith("/7z") ||
|
|
58
|
+
normalizedBinaryPath.endsWith("/7z.exe") ||
|
|
59
|
+
normalizedBinaryPath.endsWith("\\7z") ||
|
|
60
|
+
normalizedBinaryPath.endsWith("\\7z.exe")) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return formatExtractionFailureDetails(error)
|
|
64
|
+
.toLowerCase()
|
|
65
|
+
.includes("unsupported method");
|
|
66
|
+
}
|
|
67
|
+
function normalizeSystemFallbackBinaryPath(value, primaryBinaryPath) {
|
|
68
|
+
const normalized = value === undefined ? "7z" : value?.trim() || "";
|
|
69
|
+
if (!normalized) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return normalizeCommandPath(normalized) ===
|
|
73
|
+
normalizeCommandPath(primaryBinaryPath)
|
|
74
|
+
? null
|
|
75
|
+
: normalized;
|
|
76
|
+
}
|
|
77
|
+
function formatExtractionFailureDetails(error) {
|
|
78
|
+
if (error instanceof CommandExecutionError) {
|
|
79
|
+
return (error.context.stderr.trim() ||
|
|
80
|
+
error.context.stdout.trim() ||
|
|
81
|
+
error.message);
|
|
82
|
+
}
|
|
83
|
+
if (error instanceof Error) {
|
|
84
|
+
return error.message;
|
|
85
|
+
}
|
|
86
|
+
return String(error);
|
|
87
|
+
}
|
|
43
88
|
async function ensureBundledSevenZipBinaryExecutable(binaryPath) {
|
|
44
89
|
if (process.platform === "win32") {
|
|
45
90
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seven-zip-extract.js","sourceRoot":"","sources":["../../src/runtime/seven-zip-extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,UAAU,EAEX,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"seven-zip-extract.js","sourceRoot":"","sources":["../../src/runtime/seven-zip-extract.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hagicode/hagiscript",
|
|
3
|
-
"version": "0.2.9-dev.
|
|
3
|
+
"version": "0.2.9-dev.132.1.13b97a0",
|
|
4
4
|
"description": "Scoped npm package foundation for Hagiscript language tooling.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/HagiCode-org/hagiscript#readme",
|