@vercel/build-utils 7.0.0 → 7.1.1
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 +14 -0
- package/build.mjs +3 -0
- package/dist/clone-env.js +39 -30
- package/dist/debug.js +28 -9
- package/dist/edge-function.js +36 -16
- package/dist/errors.js +83 -74
- package/dist/file-blob.js +63 -32
- package/dist/file-fs-ref.js +99 -65
- package/dist/file-ref.js +97 -77
- package/dist/fs/download.js +121 -91
- package/dist/fs/get-writable-directory.js +29 -9
- package/dist/fs/glob.js +104 -77
- package/dist/fs/node-version.js +115 -82
- package/dist/fs/normalize-path.js +28 -8
- package/dist/fs/read-config-file.js +66 -40
- package/dist/fs/rename.js +27 -14
- package/dist/fs/run-user-scripts.js +457 -419
- package/dist/fs/stream-to-buffer.js +51 -24
- package/dist/get-ignore-filter.js +80 -49
- package/dist/get-platform-env.js +41 -22
- package/dist/get-prefixed-env-vars.js +48 -32
- package/dist/hard-link-dir.js +90 -70
- package/dist/index.js +22266 -29399
- package/dist/lambda.d.ts +3 -0
- package/dist/lambda.js +208 -140
- package/dist/nodejs-lambda.js +40 -12
- package/dist/prerender.js +109 -64
- package/dist/schemas.js +83 -57
- package/dist/should-serve.js +43 -16
- package/dist/types.d.ts +4 -0
- package/dist/types.js +15 -1
- package/dist/validate-npmrc.js +38 -24
- package/package.json +4 -4
- package/build.js +0 -30
@@ -1,29 +1,56 @@
|
|
1
1
|
"use strict";
|
2
|
-
var
|
3
|
-
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
4
11
|
};
|
5
|
-
|
6
|
-
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
var stream_to_buffer_exports = {};
|
30
|
+
__export(stream_to_buffer_exports, {
|
31
|
+
default: () => streamToBuffer
|
32
|
+
});
|
33
|
+
module.exports = __toCommonJS(stream_to_buffer_exports);
|
34
|
+
var import_end_of_stream = __toESM(require("end-of-stream"));
|
7
35
|
function streamToBuffer(stream) {
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
});
|
36
|
+
return new Promise((resolve, reject) => {
|
37
|
+
const buffers = [];
|
38
|
+
stream.on("data", buffers.push.bind(buffers));
|
39
|
+
(0, import_end_of_stream.default)(stream, (err) => {
|
40
|
+
if (err) {
|
41
|
+
reject(err);
|
42
|
+
return;
|
43
|
+
}
|
44
|
+
switch (buffers.length) {
|
45
|
+
case 0:
|
46
|
+
resolve(Buffer.allocUnsafe(0));
|
47
|
+
break;
|
48
|
+
case 1:
|
49
|
+
resolve(buffers[0]);
|
50
|
+
break;
|
51
|
+
default:
|
52
|
+
resolve(Buffer.concat(buffers));
|
53
|
+
}
|
27
54
|
});
|
55
|
+
});
|
28
56
|
}
|
29
|
-
exports.default = streamToBuffer;
|
@@ -1,59 +1,90 @@
|
|
1
1
|
"use strict";
|
2
|
-
var
|
3
|
-
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
4
11
|
};
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
var get_ignore_filter_exports = {};
|
30
|
+
__export(get_ignore_filter_exports, {
|
31
|
+
default: () => get_ignore_filter_default
|
32
|
+
});
|
33
|
+
module.exports = __toCommonJS(get_ignore_filter_exports);
|
34
|
+
var import_path = __toESM(require("path"));
|
35
|
+
var import_fs_extra = __toESM(require("fs-extra"));
|
36
|
+
var import_ignore = __toESM(require("ignore"));
|
9
37
|
function isCodedError(error) {
|
10
|
-
|
11
|
-
error !== undefined &&
|
12
|
-
error.code !== undefined);
|
38
|
+
return error !== null && error !== void 0 && error.code !== void 0;
|
13
39
|
}
|
14
40
|
function clearRelative(s) {
|
15
|
-
|
41
|
+
return s.replace(/(\n|^)\.\//g, "$1");
|
16
42
|
}
|
17
|
-
async function
|
18
|
-
|
19
|
-
try {
|
20
|
-
return await fs_extra_1.default.readFile(p, 'utf8');
|
21
|
-
}
|
22
|
-
catch (error) {
|
23
|
-
if (error.code === 'ENOENT' ||
|
24
|
-
(error instanceof Error && error.message.includes('ENOENT'))) {
|
25
|
-
return undefined;
|
26
|
-
}
|
27
|
-
throw error;
|
28
|
-
}
|
29
|
-
};
|
30
|
-
const vercelIgnorePath = path_1.default.join(downloadPath, rootDirectory || '', '.vercelignore');
|
31
|
-
const nowIgnorePath = path_1.default.join(downloadPath, rootDirectory || '', '.nowignore');
|
32
|
-
const ignoreContents = [];
|
43
|
+
async function get_ignore_filter_default(downloadPath, rootDirectory) {
|
44
|
+
const readFile = async (p) => {
|
33
45
|
try {
|
34
|
-
|
35
|
-
}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
else {
|
41
|
-
throw error;
|
42
|
-
}
|
43
|
-
}
|
44
|
-
if (ignoreContents.length === 2) {
|
45
|
-
throw new Error('Cannot use both a `.vercelignore` and `.nowignore` file. Please delete the `.nowignore` file.');
|
46
|
+
return await import_fs_extra.default.readFile(p, "utf8");
|
47
|
+
} catch (error) {
|
48
|
+
if (error.code === "ENOENT" || error instanceof Error && error.message.includes("ENOENT")) {
|
49
|
+
return void 0;
|
50
|
+
}
|
51
|
+
throw error;
|
46
52
|
}
|
47
|
-
|
48
|
-
|
53
|
+
};
|
54
|
+
const vercelIgnorePath = import_path.default.join(
|
55
|
+
downloadPath,
|
56
|
+
rootDirectory || "",
|
57
|
+
".vercelignore"
|
58
|
+
);
|
59
|
+
const nowIgnorePath = import_path.default.join(
|
60
|
+
downloadPath,
|
61
|
+
rootDirectory || "",
|
62
|
+
".nowignore"
|
63
|
+
);
|
64
|
+
const ignoreContents = [];
|
65
|
+
try {
|
66
|
+
ignoreContents.push(
|
67
|
+
...(await Promise.all([readFile(vercelIgnorePath), readFile(nowIgnorePath)])).filter(Boolean)
|
68
|
+
);
|
69
|
+
} catch (error) {
|
70
|
+
if (isCodedError(error) && error.code === "ENOTDIR") {
|
71
|
+
console.log(`Warning: Cannot read ignore file from ${vercelIgnorePath}`);
|
72
|
+
} else {
|
73
|
+
throw error;
|
49
74
|
}
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
75
|
+
}
|
76
|
+
if (ignoreContents.length === 2) {
|
77
|
+
throw new Error(
|
78
|
+
"Cannot use both a `.vercelignore` and `.nowignore` file. Please delete the `.nowignore` file."
|
79
|
+
);
|
80
|
+
}
|
81
|
+
if (ignoreContents.length === 0) {
|
82
|
+
return () => false;
|
83
|
+
}
|
84
|
+
const ignoreFilter = (0, import_ignore.default)().add(clearRelative(ignoreContents[0]));
|
85
|
+
return function(p) {
|
86
|
+
if (p === "now.json" || p === "vercel.json")
|
87
|
+
return false;
|
88
|
+
return ignoreFilter.test(p).ignored;
|
89
|
+
};
|
58
90
|
}
|
59
|
-
exports.default = default_1;
|
package/dist/get-platform-env.js
CHANGED
@@ -1,26 +1,45 @@
|
|
1
1
|
"use strict";
|
2
|
-
Object.defineProperty
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var get_platform_env_exports = {};
|
20
|
+
__export(get_platform_env_exports, {
|
21
|
+
getPlatformEnv: () => getPlatformEnv
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(get_platform_env_exports);
|
24
|
+
var import_errors = require("./errors");
|
9
25
|
const getPlatformEnv = (name) => {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
}
|
22
|
-
return v;
|
26
|
+
const vName = `VERCEL_${name}`;
|
27
|
+
const nName = `NOW_${name}`;
|
28
|
+
const v = process.env[vName];
|
29
|
+
const n = process.env[nName];
|
30
|
+
if (typeof v === "string") {
|
31
|
+
if (typeof n === "string") {
|
32
|
+
throw new import_errors.NowBuildError({
|
33
|
+
code: "CONFLICTING_ENV_VAR_NAMES",
|
34
|
+
message: `Both "${vName}" and "${nName}" env vars are defined. Please only define the "${vName}" env var.`,
|
35
|
+
link: "https://vercel.link/combining-old-and-new-config"
|
36
|
+
});
|
23
37
|
}
|
24
|
-
return
|
38
|
+
return v;
|
39
|
+
}
|
40
|
+
return n;
|
25
41
|
};
|
26
|
-
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
43
|
+
0 && (module.exports = {
|
44
|
+
getPlatformEnv
|
45
|
+
});
|
@@ -1,34 +1,50 @@
|
|
1
1
|
"use strict";
|
2
|
-
Object.defineProperty
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var get_prefixed_env_vars_exports = {};
|
20
|
+
__export(get_prefixed_env_vars_exports, {
|
21
|
+
getPrefixedEnvVars: () => getPrefixedEnvVars
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(get_prefixed_env_vars_exports);
|
24
|
+
function getPrefixedEnvVars({
|
25
|
+
envPrefix,
|
26
|
+
envs
|
27
|
+
}) {
|
28
|
+
const vercelSystemEnvPrefix = "VERCEL_";
|
29
|
+
const allowed = [
|
30
|
+
"VERCEL_URL",
|
31
|
+
"VERCEL_ENV",
|
32
|
+
"VERCEL_REGION",
|
33
|
+
"VERCEL_BRANCH_URL"
|
34
|
+
];
|
35
|
+
const newEnvs = {};
|
36
|
+
if (envPrefix && envs.VERCEL_URL) {
|
37
|
+
Object.keys(envs).filter((key) => allowed.includes(key) || key.startsWith("VERCEL_GIT_")).forEach((key) => {
|
38
|
+
const newKey = `${envPrefix}${key}`;
|
39
|
+
if (!(newKey in envs)) {
|
40
|
+
newEnvs[newKey] = envs[key];
|
41
|
+
}
|
42
|
+
});
|
43
|
+
newEnvs.TURBO_CI_VENDOR_ENV_KEY = `${envPrefix}${vercelSystemEnvPrefix}`;
|
44
|
+
}
|
45
|
+
return newEnvs;
|
33
46
|
}
|
34
|
-
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
48
|
+
0 && (module.exports = {
|
49
|
+
getPrefixedEnvVars
|
50
|
+
});
|
package/dist/hard-link-dir.js
CHANGED
@@ -1,84 +1,104 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
var
|
5
|
-
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
6
11
|
};
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
var hard_link_dir_exports = {};
|
30
|
+
__export(hard_link_dir_exports, {
|
31
|
+
hardLinkDir: () => hardLinkDir
|
32
|
+
});
|
33
|
+
module.exports = __toCommonJS(hard_link_dir_exports);
|
34
|
+
var import_path = __toESM(require("path"));
|
35
|
+
var import_fs = require("fs");
|
11
36
|
async function hardLinkDir(src, destDirs) {
|
12
|
-
|
37
|
+
if (destDirs.length === 0)
|
38
|
+
return;
|
39
|
+
destDirs = destDirs.filter((destDir) => import_path.default.relative(destDir, src) !== "");
|
40
|
+
const files = await import_fs.promises.readdir(src);
|
41
|
+
await Promise.all(
|
42
|
+
files.map(async (file) => {
|
43
|
+
if (file === "node_modules")
|
13
44
|
return;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
return;
|
20
|
-
const srcFile = path_1.default.join(src, file);
|
21
|
-
if ((await fs_1.promises.lstat(srcFile)).isDirectory()) {
|
22
|
-
const destSubdirs = await Promise.all(destDirs.map(async (destDir) => {
|
23
|
-
const destSubdir = path_1.default.join(destDir, file);
|
24
|
-
try {
|
25
|
-
await fs_1.promises.mkdir(destSubdir, { recursive: true });
|
26
|
-
}
|
27
|
-
catch (err) {
|
28
|
-
// eslint-disable-line
|
29
|
-
if (err.code !== 'EEXIST')
|
30
|
-
throw err;
|
31
|
-
}
|
32
|
-
return destSubdir;
|
33
|
-
}));
|
34
|
-
await hardLinkDir(srcFile, destSubdirs);
|
35
|
-
return;
|
36
|
-
}
|
37
|
-
await Promise.all(destDirs.map(async (destDir) => {
|
38
|
-
const destFile = path_1.default.join(destDir, file);
|
45
|
+
const srcFile = import_path.default.join(src, file);
|
46
|
+
if ((await import_fs.promises.lstat(srcFile)).isDirectory()) {
|
47
|
+
const destSubdirs = await Promise.all(
|
48
|
+
destDirs.map(async (destDir) => {
|
49
|
+
const destSubdir = import_path.default.join(destDir, file);
|
39
50
|
try {
|
40
|
-
|
41
|
-
}
|
42
|
-
|
43
|
-
// eslint-disable-line
|
44
|
-
if (err.code === 'ENOENT') {
|
45
|
-
// Ignore broken symlinks
|
46
|
-
return;
|
47
|
-
}
|
51
|
+
await import_fs.promises.mkdir(destSubdir, { recursive: true });
|
52
|
+
} catch (err) {
|
53
|
+
if (err.code !== "EEXIST")
|
48
54
|
throw err;
|
49
55
|
}
|
50
|
-
|
51
|
-
|
56
|
+
return destSubdir;
|
57
|
+
})
|
58
|
+
);
|
59
|
+
await hardLinkDir(srcFile, destSubdirs);
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
await Promise.all(
|
63
|
+
destDirs.map(async (destDir) => {
|
64
|
+
const destFile = import_path.default.join(destDir, file);
|
65
|
+
try {
|
66
|
+
await linkOrCopyFile(srcFile, destFile);
|
67
|
+
} catch (err) {
|
68
|
+
if (err.code === "ENOENT") {
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
throw err;
|
72
|
+
}
|
73
|
+
})
|
74
|
+
);
|
75
|
+
})
|
76
|
+
);
|
52
77
|
}
|
53
|
-
exports.hardLinkDir = hardLinkDir;
|
54
78
|
async function linkOrCopyFile(srcFile, destFile) {
|
55
|
-
|
56
|
-
|
79
|
+
try {
|
80
|
+
await linkOrCopy(srcFile, destFile);
|
81
|
+
} catch (err) {
|
82
|
+
if (err.code === "ENOENT") {
|
83
|
+
await import_fs.promises.mkdir(import_path.default.dirname(destFile), { recursive: true });
|
84
|
+
await linkOrCopy(srcFile, destFile);
|
85
|
+
return;
|
57
86
|
}
|
58
|
-
|
59
|
-
|
60
|
-
if (err.code === 'ENOENT') {
|
61
|
-
await fs_1.promises.mkdir(path_1.default.dirname(destFile), { recursive: true });
|
62
|
-
await linkOrCopy(srcFile, destFile);
|
63
|
-
return;
|
64
|
-
}
|
65
|
-
if (err.code !== 'EEXIST') {
|
66
|
-
throw err;
|
67
|
-
}
|
87
|
+
if (err.code !== "EEXIST") {
|
88
|
+
throw err;
|
68
89
|
}
|
90
|
+
}
|
69
91
|
}
|
70
|
-
/*
|
71
|
-
* This function could be optimized because we don't really need to try linking again
|
72
|
-
* if linking failed once.
|
73
|
-
*/
|
74
92
|
async function linkOrCopy(srcFile, destFile) {
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
await fs_1.promises.copyFile(srcFile, destFile);
|
83
|
-
}
|
93
|
+
try {
|
94
|
+
await import_fs.promises.link(srcFile, destFile);
|
95
|
+
} catch (err) {
|
96
|
+
if (err.code !== "EXDEV")
|
97
|
+
throw err;
|
98
|
+
await import_fs.promises.copyFile(srcFile, destFile);
|
99
|
+
}
|
84
100
|
}
|
101
|
+
// Annotate the CommonJS export names for ESM import in node:
|
102
|
+
0 && (module.exports = {
|
103
|
+
hardLinkDir
|
104
|
+
});
|