hagiscript-sdk 0.2.9-dev.1780142424.1.dedbfb7
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 +25 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/package.json +38 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.js +27 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/runtime/command-launch.d.ts +41 -0
- package/dist/src/runtime/command-launch.js +100 -0
- package/dist/src/runtime/command-launch.js.map +1 -0
- package/dist/src/runtime/component-service-manager.d.ts +71 -0
- package/dist/src/runtime/component-service-manager.js +367 -0
- package/dist/src/runtime/component-service-manager.js.map +1 -0
- package/dist/src/runtime/dotnet-installer.d.ts +39 -0
- package/dist/src/runtime/dotnet-installer.js +282 -0
- package/dist/src/runtime/dotnet-installer.js.map +1 -0
- package/dist/src/runtime/download-cache.d.ts +7 -0
- package/dist/src/runtime/download-cache.js +110 -0
- package/dist/src/runtime/download-cache.js.map +1 -0
- package/dist/src/runtime/manifest-manager.d.ts +57 -0
- package/dist/src/runtime/manifest-manager.js +188 -0
- package/dist/src/runtime/manifest-manager.js.map +1 -0
- package/dist/src/runtime/node-download.d.ts +13 -0
- package/dist/src/runtime/node-download.js +78 -0
- package/dist/src/runtime/node-download.js.map +1 -0
- package/dist/src/runtime/node-extract.d.ts +18 -0
- package/dist/src/runtime/node-extract.js +170 -0
- package/dist/src/runtime/node-extract.js.map +1 -0
- package/dist/src/runtime/node-installer.d.ts +43 -0
- package/dist/src/runtime/node-installer.js +114 -0
- package/dist/src/runtime/node-installer.js.map +1 -0
- package/dist/src/runtime/node-platform.d.ts +15 -0
- package/dist/src/runtime/node-platform.js +51 -0
- package/dist/src/runtime/node-platform.js.map +1 -0
- package/dist/src/runtime/node-release.d.ts +28 -0
- package/dist/src/runtime/node-release.js +149 -0
- package/dist/src/runtime/node-release.js.map +1 -0
- package/dist/src/runtime/node-verify.d.ts +30 -0
- package/dist/src/runtime/node-verify.js +102 -0
- package/dist/src/runtime/node-verify.js.map +1 -0
- package/dist/src/runtime/npm-global.d.ts +28 -0
- package/dist/src/runtime/npm-global.js +77 -0
- package/dist/src/runtime/npm-global.js.map +1 -0
- package/dist/src/runtime/npm-sync.d.ts +164 -0
- package/dist/src/runtime/npm-sync.js +603 -0
- package/dist/src/runtime/npm-sync.js.map +1 -0
- package/dist/src/runtime/pm2-manager.d.ts +102 -0
- package/dist/src/runtime/pm2-manager.js +715 -0
- package/dist/src/runtime/pm2-manager.js.map +1 -0
- package/dist/src/runtime/runtime-executor.d.ts +58 -0
- package/dist/src/runtime/runtime-executor.js +291 -0
- package/dist/src/runtime/runtime-executor.js.map +1 -0
- package/dist/src/runtime/runtime-manager.d.ts +92 -0
- package/dist/src/runtime/runtime-manager.js +798 -0
- package/dist/src/runtime/runtime-manager.js.map +1 -0
- package/dist/src/runtime/runtime-manifest.d.ts +106 -0
- package/dist/src/runtime/runtime-manifest.js +450 -0
- package/dist/src/runtime/runtime-manifest.js.map +1 -0
- package/dist/src/runtime/runtime-paths.d.ts +45 -0
- package/dist/src/runtime/runtime-paths.js +138 -0
- package/dist/src/runtime/runtime-paths.js.map +1 -0
- package/dist/src/runtime/runtime-state.d.ts +45 -0
- package/dist/src/runtime/runtime-state.js +82 -0
- package/dist/src/runtime/runtime-state.js.map +1 -0
- package/dist/src/runtime/server-config.d.ts +21 -0
- package/dist/src/runtime/server-config.js +169 -0
- package/dist/src/runtime/server-config.js.map +1 -0
- package/dist/src/runtime/server-manager.d.ts +107 -0
- package/dist/src/runtime/server-manager.js +946 -0
- package/dist/src/runtime/server-manager.js.map +1 -0
- package/dist/src/runtime/server-version-state.d.ts +43 -0
- package/dist/src/runtime/server-version-state.js +156 -0
- package/dist/src/runtime/server-version-state.js.map +1 -0
- package/dist/src/runtime/seven-zip-extract.d.ts +15 -0
- package/dist/src/runtime/seven-zip-extract.js +104 -0
- package/dist/src/runtime/seven-zip-extract.js.map +1 -0
- package/dist/src/runtime/tool-sync-catalog.config.json +59 -0
- package/dist/src/runtime/tool-sync-catalog.d.ts +48 -0
- package/dist/src/runtime/tool-sync-catalog.js +189 -0
- package/dist/src/runtime/tool-sync-catalog.js.map +1 -0
- package/dist/src/runtime/zip-extract.d.ts +6 -0
- package/dist/src/runtime/zip-extract.js +90 -0
- package/dist/src/runtime/zip-extract.js.map +1 -0
- package/dist/src/version.d.ts +7 -0
- package/dist/src/version.js +23 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-manager.js","sourceRoot":"","sources":["../../../../src/runtime/manifest-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DownloadProgress {
|
|
2
|
+
receivedBytes: number;
|
|
3
|
+
totalBytes?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface DownloadOptions {
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
onProgress?: (progress: DownloadProgress) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare class NodeRuntimeNetworkError extends Error {
|
|
11
|
+
constructor(message: string, options?: ErrorOptions);
|
|
12
|
+
}
|
|
13
|
+
export declare function downloadNodeArchive(url: string, destinationPath: string, options?: DownloadOptions): Promise<void>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createWriteStream } from "node:fs";
|
|
2
|
+
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
export class NodeRuntimeNetworkError extends Error {
|
|
5
|
+
constructor(message, options) {
|
|
6
|
+
super(message, options);
|
|
7
|
+
this.name = "NodeRuntimeNetworkError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export async function downloadNodeArchive(url, destinationPath, options = {}) {
|
|
11
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
12
|
+
const timeoutMs = options.timeoutMs ?? 120_000;
|
|
13
|
+
const abortController = new AbortController();
|
|
14
|
+
const timeout = setTimeout(() => abortController.abort(), timeoutMs);
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetchImpl(url, { signal: abortController.signal });
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw new NodeRuntimeNetworkError(`Failed to download Node.js archive: HTTP ${response.status}`);
|
|
19
|
+
}
|
|
20
|
+
if (!response.body) {
|
|
21
|
+
throw new NodeRuntimeNetworkError("Failed to download Node.js archive: response body was empty.");
|
|
22
|
+
}
|
|
23
|
+
await mkdir(dirname(destinationPath), { recursive: true });
|
|
24
|
+
const totalBytes = parseContentLength(response.headers.get("content-length"));
|
|
25
|
+
let receivedBytes = 0;
|
|
26
|
+
await writeResponseBody(response.body, destinationPath, (chunkLength) => {
|
|
27
|
+
receivedBytes += chunkLength;
|
|
28
|
+
options.onProgress?.({ receivedBytes, totalBytes });
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error instanceof NodeRuntimeNetworkError) {
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
36
|
+
throw new NodeRuntimeNetworkError(`Failed to download Node.js archive: ${reason}`, error instanceof Error ? { cause: error } : undefined);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
clearTimeout(timeout);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function writeResponseBody(body, destinationPath, onChunk) {
|
|
43
|
+
const reader = body.getReader();
|
|
44
|
+
const file = createWriteStream(destinationPath);
|
|
45
|
+
try {
|
|
46
|
+
while (true) {
|
|
47
|
+
const { done, value } = await reader.read();
|
|
48
|
+
if (done) {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
onChunk(value.byteLength);
|
|
52
|
+
if (!file.write(value)) {
|
|
53
|
+
await new Promise((resolve) => file.once("drain", resolve));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
await new Promise((resolve, reject) => {
|
|
57
|
+
file.end((error) => {
|
|
58
|
+
if (error) {
|
|
59
|
+
reject(error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
resolve();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
reader.releaseLock();
|
|
68
|
+
file.close();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function parseContentLength(value) {
|
|
72
|
+
if (!value) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const parsed = Number(value);
|
|
76
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=node-download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-download.js","sourceRoot":"","sources":["../../../../src/runtime/node-download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { cp, mkdir, rename, rm } from "node:fs/promises";
|
|
2
|
+
import { runCommand } from "./command-launch.js";
|
|
3
|
+
export declare class NodeRuntimeExtractionError extends Error {
|
|
4
|
+
constructor(message: string, options?: ErrorOptions);
|
|
5
|
+
}
|
|
6
|
+
export declare function extractNodeArchive(archivePath: string, stagingDirectory: string, archiveExtension: "zip" | "tar.xz", options?: NodeArchiveExtractionOptions): Promise<string>;
|
|
7
|
+
export interface NodeArchiveExtractionOptions {
|
|
8
|
+
runCommand?: typeof runCommand;
|
|
9
|
+
}
|
|
10
|
+
export declare function moveExtractedRootToTarget(extractedRoot: string, targetDirectory: string, operations?: NodeRuntimeMoveOperations): Promise<void>;
|
|
11
|
+
export interface NodeRuntimeMoveOperations {
|
|
12
|
+
mkdir?: typeof mkdir;
|
|
13
|
+
rm?: typeof rm;
|
|
14
|
+
rename?: typeof rename;
|
|
15
|
+
cp?: typeof cp;
|
|
16
|
+
}
|
|
17
|
+
export declare function shouldFallbackToCopy(error: unknown): boolean;
|
|
18
|
+
export declare function assertTargetIsEmptyOrMissing(targetDirectory: string): Promise<void>;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { createWriteStream } from "node:fs";
|
|
2
|
+
import { cp, mkdir, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { basename, dirname, join, relative, sep } from "node:path";
|
|
4
|
+
import { createGunzip, gunzipSync } from "node:zlib";
|
|
5
|
+
import { pipeline } from "node:stream/promises";
|
|
6
|
+
import { createReadStream } from "node:fs";
|
|
7
|
+
import { CommandExecutionError, runCommand } from "./command-launch.js";
|
|
8
|
+
import { extractZipArchive } from "./zip-extract.js";
|
|
9
|
+
export class NodeRuntimeExtractionError extends Error {
|
|
10
|
+
constructor(message, options) {
|
|
11
|
+
super(message, options);
|
|
12
|
+
this.name = "NodeRuntimeExtractionError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function extractNodeArchive(archivePath, stagingDirectory, archiveExtension, options = {}) {
|
|
16
|
+
await mkdir(stagingDirectory, { recursive: true });
|
|
17
|
+
if (archiveExtension === "zip") {
|
|
18
|
+
await extractZip(archivePath, stagingDirectory, options);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
await extractTar(archivePath, stagingDirectory, options);
|
|
22
|
+
}
|
|
23
|
+
return findExtractedRoot(stagingDirectory);
|
|
24
|
+
}
|
|
25
|
+
export async function moveExtractedRootToTarget(extractedRoot, targetDirectory, operations = {}) {
|
|
26
|
+
const moveOperations = {
|
|
27
|
+
mkdir,
|
|
28
|
+
rm,
|
|
29
|
+
rename,
|
|
30
|
+
cp,
|
|
31
|
+
...operations
|
|
32
|
+
};
|
|
33
|
+
await assertTargetIsEmptyOrMissing(targetDirectory);
|
|
34
|
+
await moveOperations.mkdir(dirname(targetDirectory), { recursive: true });
|
|
35
|
+
await moveOperations.rm(targetDirectory, { recursive: true, force: true });
|
|
36
|
+
try {
|
|
37
|
+
await moveOperations.rename(extractedRoot, targetDirectory);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (!shouldFallbackToCopy(error)) {
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
await moveOperations.cp(extractedRoot, targetDirectory, {
|
|
44
|
+
recursive: true,
|
|
45
|
+
force: true
|
|
46
|
+
});
|
|
47
|
+
await moveOperations.rm(extractedRoot, { recursive: true, force: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function shouldFallbackToCopy(error) {
|
|
51
|
+
const code = error?.code;
|
|
52
|
+
return code === "EPERM" || code === "EXDEV" || code === "EBUSY";
|
|
53
|
+
}
|
|
54
|
+
export async function assertTargetIsEmptyOrMissing(targetDirectory) {
|
|
55
|
+
try {
|
|
56
|
+
const entries = await readdir(targetDirectory);
|
|
57
|
+
if (entries.length > 0) {
|
|
58
|
+
throw new NodeRuntimeExtractionError(`Target directory is not empty: ${targetDirectory}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error.code === "ENOENT") {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (error instanceof NodeRuntimeExtractionError) {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
const stats = await stat(targetDirectory).catch(() => undefined);
|
|
69
|
+
if (stats && !stats.isDirectory()) {
|
|
70
|
+
throw new NodeRuntimeExtractionError(`Target path exists but is not a directory: ${targetDirectory}`);
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function extractZip(archivePath, destination, options) {
|
|
76
|
+
try {
|
|
77
|
+
await extractZipArchive(archivePath, destination, {
|
|
78
|
+
platform: process.platform,
|
|
79
|
+
runCommand: options.runCommand
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const zipError = error instanceof Error ? error : new Error(String(error));
|
|
84
|
+
throw new NodeRuntimeExtractionError(`Failed to extract zip archive: ${zipError.message}`, { cause: zipError });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function extractTar(archivePath, destination, options) {
|
|
88
|
+
try {
|
|
89
|
+
await runExtractor("tar", ["-xJf", archivePath, "-C", destination], options);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const directError = error instanceof Error ? error : new Error(String(error));
|
|
93
|
+
try {
|
|
94
|
+
await extractTarWithNode(archivePath, destination);
|
|
95
|
+
}
|
|
96
|
+
catch (fallbackError) {
|
|
97
|
+
throw new NodeRuntimeExtractionError(`Failed to extract tar archive: ${directError.message}`, fallbackError instanceof Error ? { cause: fallbackError } : undefined);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function runExtractor(command, args, options) {
|
|
102
|
+
try {
|
|
103
|
+
await (options.runCommand ?? runCommand)(command, args);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (error instanceof CommandExecutionError) {
|
|
107
|
+
throw new Error(`${command} exited with code ${error.context.exitCode ?? "unknown"}: ${error.context.stderr.trim()}`);
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function findExtractedRoot(stagingDirectory) {
|
|
113
|
+
const entries = await readdir(stagingDirectory, { withFileTypes: true });
|
|
114
|
+
const directories = entries.filter((entry) => entry.isDirectory());
|
|
115
|
+
if (directories.length !== 1) {
|
|
116
|
+
throw new NodeRuntimeExtractionError(`Expected exactly one extracted Node.js root in staging directory, found ${directories.length}.`);
|
|
117
|
+
}
|
|
118
|
+
return join(stagingDirectory, directories[0].name);
|
|
119
|
+
}
|
|
120
|
+
async function extractTarWithNode(archivePath, destination) {
|
|
121
|
+
const tarPath = archivePath.endsWith(".gz")
|
|
122
|
+
? `${archivePath}.tar`
|
|
123
|
+
: `${archivePath}.decompressed.tar`;
|
|
124
|
+
try {
|
|
125
|
+
if (archivePath.endsWith(".gz")) {
|
|
126
|
+
await pipeline(createReadStream(archivePath), createGunzip(), createWriteStream(tarPath));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
await writeFile(tarPath, gunzipSync(await readFile(archivePath)));
|
|
130
|
+
}
|
|
131
|
+
await extractTarBuffer(await readFile(tarPath), destination);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
await rm(tarPath, { force: true }).catch(() => undefined);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function extractTarBuffer(buffer, destination) {
|
|
138
|
+
let offset = 0;
|
|
139
|
+
while (offset + 512 <= buffer.length) {
|
|
140
|
+
const header = buffer.subarray(offset, offset + 512);
|
|
141
|
+
if (header.every((byte) => byte === 0)) {
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
const name = header.toString("utf8", 0, 100).replace(/\0.*$/, "");
|
|
145
|
+
const sizeText = header
|
|
146
|
+
.toString("utf8", 124, 136)
|
|
147
|
+
.replace(/\0.*$/, "")
|
|
148
|
+
.trim();
|
|
149
|
+
const typeFlag = header.toString("utf8", 156, 157);
|
|
150
|
+
const size = parseInt(sizeText || "0", 8);
|
|
151
|
+
const outputPath = safeJoin(destination, name);
|
|
152
|
+
if (typeFlag === "5") {
|
|
153
|
+
await mkdir(outputPath, { recursive: true });
|
|
154
|
+
}
|
|
155
|
+
else if (typeFlag === "0" || typeFlag === "") {
|
|
156
|
+
await mkdir(dirname(outputPath), { recursive: true });
|
|
157
|
+
await writeFile(outputPath, buffer.subarray(offset + 512, offset + 512 + size));
|
|
158
|
+
}
|
|
159
|
+
offset += 512 + Math.ceil(size / 512) * 512;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function safeJoin(root, entryName) {
|
|
163
|
+
const normalized = join(root, entryName);
|
|
164
|
+
const rel = relative(root, normalized);
|
|
165
|
+
if (rel.startsWith("..") || rel.includes(`..${sep}`)) {
|
|
166
|
+
throw new NodeRuntimeExtractionError(`Archive entry escapes extraction directory: ${basename(entryName)}`);
|
|
167
|
+
}
|
|
168
|
+
return normalized;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=node-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-extract.js","sourceRoot":"","sources":["../../../../src/runtime/node-extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type DownloadProgress } from "./node-download.js";
|
|
2
|
+
import { verifyNodeRuntime } from "./node-verify.js";
|
|
3
|
+
export interface InstallNodeRuntimeOptions {
|
|
4
|
+
targetDirectory: string;
|
|
5
|
+
versionSelector?: string;
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
downloadTimeoutMs?: number;
|
|
8
|
+
verifyTimeoutMs?: number;
|
|
9
|
+
downloadCacheEnabled?: boolean;
|
|
10
|
+
downloadCacheDirectory?: string;
|
|
11
|
+
onProgress?: (progress: DownloadProgress) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface ResolveManagedNodeRuntimeOptions {
|
|
14
|
+
targetDirectory?: string;
|
|
15
|
+
versionSelector?: string;
|
|
16
|
+
fetchImpl?: typeof fetch;
|
|
17
|
+
downloadTimeoutMs?: number;
|
|
18
|
+
verifyTimeoutMs?: number;
|
|
19
|
+
downloadCacheEnabled?: boolean;
|
|
20
|
+
downloadCacheDirectory?: string;
|
|
21
|
+
verifyRuntime?: typeof verifyNodeRuntime;
|
|
22
|
+
installRuntime?: typeof installNodeRuntime;
|
|
23
|
+
onProgress?: (progress: DownloadProgress) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface InstallNodeRuntimeResult {
|
|
26
|
+
version: string;
|
|
27
|
+
npmVersion: string;
|
|
28
|
+
targetDirectory: string;
|
|
29
|
+
nodePath: string;
|
|
30
|
+
npmPath: string;
|
|
31
|
+
archiveUrl: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ResolveManagedNodeRuntimeResult {
|
|
34
|
+
targetDirectory: string;
|
|
35
|
+
nodePath: string;
|
|
36
|
+
npmPath: string;
|
|
37
|
+
nodeVersion: string;
|
|
38
|
+
npmVersion: string;
|
|
39
|
+
installed: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare function getDefaultManagedNodeRuntimeDirectory(): string;
|
|
42
|
+
export declare function resolveManagedNodeRuntime(options?: ResolveManagedNodeRuntimeOptions): Promise<ResolveManagedNodeRuntimeResult>;
|
|
43
|
+
export declare function installNodeRuntime(options: InstallNodeRuntimeOptions): Promise<InstallNodeRuntimeResult>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { copyFileFromCache, isDownloadCacheEnabled, resolveDownloadCacheDirectory, storeFileInCache } from "./download-cache.js";
|
|
5
|
+
import { assertTargetIsEmptyOrMissing, extractNodeArchive, moveExtractedRootToTarget } from "./node-extract.js";
|
|
6
|
+
import { downloadNodeArchive } from "./node-download.js";
|
|
7
|
+
import { fetchNodeReleaseMetadata, selectNodeArchive } from "./node-release.js";
|
|
8
|
+
import { mapNodePlatform } from "./node-platform.js";
|
|
9
|
+
import { getRuntimeExecutablePaths, verifyNodeRuntime } from "./node-verify.js";
|
|
10
|
+
export function getDefaultManagedNodeRuntimeDirectory() {
|
|
11
|
+
return join(homedir(), ".hagiscript", "node-runtime");
|
|
12
|
+
}
|
|
13
|
+
export async function resolveManagedNodeRuntime(options = {}) {
|
|
14
|
+
const targetDirectory = resolve(options.targetDirectory ?? getDefaultManagedNodeRuntimeDirectory());
|
|
15
|
+
const verifyRuntime = options.verifyRuntime ?? verifyNodeRuntime;
|
|
16
|
+
const initialVerification = await verifyRuntime(targetDirectory, {
|
|
17
|
+
timeoutMs: options.verifyTimeoutMs
|
|
18
|
+
});
|
|
19
|
+
if (initialVerification.valid) {
|
|
20
|
+
return toResolvedRuntime(initialVerification, false);
|
|
21
|
+
}
|
|
22
|
+
const installRuntime = options.installRuntime ?? installNodeRuntime;
|
|
23
|
+
await installRuntime({
|
|
24
|
+
targetDirectory,
|
|
25
|
+
versionSelector: options.versionSelector,
|
|
26
|
+
fetchImpl: options.fetchImpl,
|
|
27
|
+
downloadTimeoutMs: options.downloadTimeoutMs,
|
|
28
|
+
verifyTimeoutMs: options.verifyTimeoutMs,
|
|
29
|
+
downloadCacheEnabled: options.downloadCacheEnabled,
|
|
30
|
+
downloadCacheDirectory: options.downloadCacheDirectory,
|
|
31
|
+
onProgress: options.onProgress
|
|
32
|
+
});
|
|
33
|
+
const finalVerification = await verifyRuntime(targetDirectory, {
|
|
34
|
+
timeoutMs: options.verifyTimeoutMs
|
|
35
|
+
});
|
|
36
|
+
assertValidVerification(finalVerification);
|
|
37
|
+
return toResolvedRuntime(finalVerification, true);
|
|
38
|
+
}
|
|
39
|
+
export async function installNodeRuntime(options) {
|
|
40
|
+
const targetDirectory = resolve(options.targetDirectory);
|
|
41
|
+
await assertTargetIsEmptyOrMissing(targetDirectory);
|
|
42
|
+
const releases = await fetchNodeReleaseMetadata(options.fetchImpl);
|
|
43
|
+
const archive = selectNodeArchive(releases, options.versionSelector, mapNodePlatform());
|
|
44
|
+
const stagingRoot = await mkdtemp(join(dirname(targetDirectory), ".hagiscript-node-"));
|
|
45
|
+
const archivePath = join(stagingRoot, archive.fileName);
|
|
46
|
+
const cacheArchivePath = isDownloadCacheEnabled(options.downloadCacheEnabled)
|
|
47
|
+
? join(resolveDownloadCacheDirectory(options.downloadCacheDirectory), "node", archive.version, archive.platform.nodeFileKey, archive.fileName)
|
|
48
|
+
: undefined;
|
|
49
|
+
try {
|
|
50
|
+
await materializeNodeArchive({
|
|
51
|
+
archive,
|
|
52
|
+
archivePath,
|
|
53
|
+
cacheArchivePath,
|
|
54
|
+
fetchImpl: options.fetchImpl,
|
|
55
|
+
timeoutMs: options.downloadTimeoutMs,
|
|
56
|
+
onProgress: options.onProgress
|
|
57
|
+
});
|
|
58
|
+
const extractedRoot = await extractNodeArchive(archivePath, join(stagingRoot, "extract"), archive.platform.archiveExtension);
|
|
59
|
+
const verification = await verifyNodeRuntime(extractedRoot, {
|
|
60
|
+
timeoutMs: options.verifyTimeoutMs
|
|
61
|
+
});
|
|
62
|
+
assertValidVerification(verification);
|
|
63
|
+
await moveExtractedRootToTarget(extractedRoot, targetDirectory);
|
|
64
|
+
const finalPaths = getRuntimeExecutablePaths(targetDirectory);
|
|
65
|
+
return {
|
|
66
|
+
version: verification.nodeVersion ?? archive.version,
|
|
67
|
+
npmVersion: verification.npmVersion ?? "unknown",
|
|
68
|
+
targetDirectory,
|
|
69
|
+
nodePath: finalPaths.nodePath,
|
|
70
|
+
npmPath: finalPaths.npmPath,
|
|
71
|
+
archiveUrl: archive.url
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await rm(stagingRoot, { recursive: true, force: true }).catch(() => undefined);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function materializeNodeArchive(options) {
|
|
79
|
+
if (options.cacheArchivePath) {
|
|
80
|
+
const cachedSize = await copyFileFromCache(options.cacheArchivePath, options.archivePath);
|
|
81
|
+
if (cachedSize !== undefined) {
|
|
82
|
+
options.onProgress?.({
|
|
83
|
+
receivedBytes: cachedSize,
|
|
84
|
+
totalBytes: cachedSize
|
|
85
|
+
});
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
await downloadNodeArchive(options.archive.url, options.archivePath, {
|
|
90
|
+
fetchImpl: options.fetchImpl,
|
|
91
|
+
timeoutMs: options.timeoutMs,
|
|
92
|
+
onProgress: options.onProgress
|
|
93
|
+
});
|
|
94
|
+
if (options.cacheArchivePath) {
|
|
95
|
+
await storeFileInCache(options.archivePath, options.cacheArchivePath);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function assertValidVerification(verification) {
|
|
99
|
+
if (!verification.valid) {
|
|
100
|
+
throw new Error(`Installed Node.js runtime failed verification: ${verification.failureReason ?? "unknown failure"}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function toResolvedRuntime(verification, installed) {
|
|
104
|
+
assertValidVerification(verification);
|
|
105
|
+
return {
|
|
106
|
+
targetDirectory: verification.targetDirectory,
|
|
107
|
+
nodePath: verification.nodePath,
|
|
108
|
+
npmPath: verification.npmPath,
|
|
109
|
+
nodeVersion: verification.nodeVersion,
|
|
110
|
+
npmVersion: verification.npmVersion,
|
|
111
|
+
installed
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=node-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-installer.js","sourceRoot":"","sources":["../../../../src/runtime/node-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type NodeOperatingSystem = "win" | "linux" | "darwin";
|
|
2
|
+
export type NodeArchitecture = "x64" | "arm64";
|
|
3
|
+
export interface NodePlatformTarget {
|
|
4
|
+
os: NodeOperatingSystem;
|
|
5
|
+
arch: NodeArchitecture;
|
|
6
|
+
nodeFileKey: `${NodeOperatingSystem}-${NodeArchitecture}`;
|
|
7
|
+
releaseFileKey: string;
|
|
8
|
+
archiveExtension: "zip" | "tar.xz";
|
|
9
|
+
executableName: "node.exe" | "node";
|
|
10
|
+
npmExecutableName: "npm.cmd" | "npm";
|
|
11
|
+
}
|
|
12
|
+
export declare class UnsupportedNodePlatformError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export declare function mapNodePlatform(platform?: NodeJS.Platform, arch?: NodeJS.Architecture): NodePlatformTarget;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export class UnsupportedNodePlatformError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "UnsupportedNodePlatformError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function mapNodePlatform(platform = process.platform, arch = process.arch) {
|
|
8
|
+
const os = mapOperatingSystem(platform);
|
|
9
|
+
const nodeArch = mapArchitecture(arch);
|
|
10
|
+
return {
|
|
11
|
+
os,
|
|
12
|
+
arch: nodeArch,
|
|
13
|
+
nodeFileKey: `${os}-${nodeArch}`,
|
|
14
|
+
releaseFileKey: getReleaseFileKey(os, nodeArch),
|
|
15
|
+
archiveExtension: os === "win" ? "zip" : "tar.xz",
|
|
16
|
+
executableName: os === "win" ? "node.exe" : "node",
|
|
17
|
+
npmExecutableName: os === "win" ? "npm.cmd" : "npm"
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function getReleaseFileKey(os, arch) {
|
|
21
|
+
if (os === "darwin") {
|
|
22
|
+
return `osx-${arch}-tar`;
|
|
23
|
+
}
|
|
24
|
+
if (os === "win") {
|
|
25
|
+
return `win-${arch}-zip`;
|
|
26
|
+
}
|
|
27
|
+
return `${os}-${arch}`;
|
|
28
|
+
}
|
|
29
|
+
function mapOperatingSystem(platform) {
|
|
30
|
+
switch (platform) {
|
|
31
|
+
case "win32":
|
|
32
|
+
return "win";
|
|
33
|
+
case "linux":
|
|
34
|
+
return "linux";
|
|
35
|
+
case "darwin":
|
|
36
|
+
return "darwin";
|
|
37
|
+
default:
|
|
38
|
+
throw new UnsupportedNodePlatformError(`Unsupported operating system for Node.js runtime archives: ${platform}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function mapArchitecture(arch) {
|
|
42
|
+
switch (arch) {
|
|
43
|
+
case "x64":
|
|
44
|
+
return "x64";
|
|
45
|
+
case "arm64":
|
|
46
|
+
return "arm64";
|
|
47
|
+
default:
|
|
48
|
+
throw new UnsupportedNodePlatformError(`Unsupported CPU architecture for Node.js runtime archives: ${arch}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=node-platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-platform.js","sourceRoot":"","sources":["../../../../src/runtime/node-platform.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAC7B,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAC3B,IAAI,GAAG,OAAO,CAAC,IAAI;IAEnB,MAAM,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO;QACL,EAAE;QACF,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE;QAChC,cAAc,EAAE,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC;QAC/C,gBAAgB,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACjD,cAAc,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;QAClD,iBAAiB,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,EAAuB,EACvB,IAAsB;IAEtB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,OAAO,IAAI,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QACjB,OAAO,OAAO,IAAI,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,MAAM,IAAI,4BAA4B,CACpC,8DAA8D,QAAQ,EAAE,CACzE,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB;YACE,MAAM,IAAI,4BAA4B,CACpC,8DAA8D,IAAI,EAAE,CACrE,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type NodePlatformTarget } from "./node-platform.js";
|
|
2
|
+
export declare const DEFAULT_NODE_MAJOR = 22;
|
|
3
|
+
export declare const OFFICIAL_NODE_DIST_BASE_URL = "https://nodejs.org/dist";
|
|
4
|
+
export interface NodeReleaseMetadata {
|
|
5
|
+
version: string;
|
|
6
|
+
lts?: string | boolean;
|
|
7
|
+
files: string[];
|
|
8
|
+
npm?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SelectedNodeArchive {
|
|
11
|
+
release: NodeReleaseMetadata;
|
|
12
|
+
version: string;
|
|
13
|
+
platform: NodePlatformTarget;
|
|
14
|
+
fileName: string;
|
|
15
|
+
url: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class NodeVersionSelectorError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
export declare class NodeRuntimeSourcePolicyError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
export declare function normalizeVersionSelector(selector?: string): string;
|
|
24
|
+
export declare function validateVersionSelector(selector?: string): void;
|
|
25
|
+
export declare function fetchNodeReleaseMetadata(fetchImpl?: typeof fetch, baseUrl?: string): Promise<NodeReleaseMetadata[]>;
|
|
26
|
+
export declare function resolveNodeRelease(releases: NodeReleaseMetadata[], selector?: string, platform?: NodePlatformTarget): NodeReleaseMetadata;
|
|
27
|
+
export declare function selectNodeArchive(releases: NodeReleaseMetadata[], selector?: string, platform?: NodePlatformTarget, baseUrl?: string): SelectedNodeArchive;
|
|
28
|
+
export declare function assertOfficialNodeDistBaseUrl(baseUrl: string): void;
|