@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.
@@ -1,29 +1,56 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const end_of_stream_1 = __importDefault(require("end-of-stream"));
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
- return new Promise((resolve, reject) => {
9
- const buffers = [];
10
- stream.on('data', buffers.push.bind(buffers));
11
- (0, end_of_stream_1.default)(stream, err => {
12
- if (err) {
13
- reject(err);
14
- return;
15
- }
16
- switch (buffers.length) {
17
- case 0:
18
- resolve(Buffer.allocUnsafe(0));
19
- break;
20
- case 1:
21
- resolve(buffers[0]);
22
- break;
23
- default:
24
- resolve(Buffer.concat(buffers));
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 __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const path_1 = __importDefault(require("path"));
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const ignore_1 = __importDefault(require("ignore"));
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
- return (error !== null &&
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
- return s.replace(/(\n|^)\.\//g, '$1');
41
+ return s.replace(/(\n|^)\.\//g, "$1");
16
42
  }
17
- async function default_1(downloadPath, rootDirectory) {
18
- const readFile = async (p) => {
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
- ignoreContents.push(...(await Promise.all([readFile(vercelIgnorePath), readFile(nowIgnorePath)])).filter(Boolean));
35
- }
36
- catch (error) {
37
- if (isCodedError(error) && error.code === 'ENOTDIR') {
38
- console.log(`Warning: Cannot read ignore file from ${vercelIgnorePath}`);
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
- if (ignoreContents.length === 0) {
48
- return () => false;
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
- const ignoreFilter = (0, ignore_1.default)().add(clearRelative(ignoreContents[0]));
51
- return function (p) {
52
- // we should not ignore now.json and vercel.json if it asked to.
53
- // we depend on these files for building the app with sourceless
54
- if (p === 'now.json' || p === 'vercel.json')
55
- return false;
56
- return ignoreFilter.test(p).ignored;
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;
@@ -1,26 +1,45 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPlatformEnv = void 0;
4
- const errors_1 = require("./errors");
5
- /**
6
- * Helper function to support both `VERCEL_` and legacy `NOW_` env vars.
7
- * Throws an error if *both* env vars are defined.
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
- const vName = `VERCEL_${name}`;
11
- const nName = `NOW_${name}`;
12
- const v = process.env[vName];
13
- const n = process.env[nName];
14
- if (typeof v === 'string') {
15
- if (typeof n === 'string') {
16
- throw new errors_1.NowBuildError({
17
- code: 'CONFLICTING_ENV_VAR_NAMES',
18
- message: `Both "${vName}" and "${nName}" env vars are defined. Please only define the "${vName}" env var.`,
19
- link: 'https://vercel.link/combining-old-and-new-config',
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 n;
38
+ return v;
39
+ }
40
+ return n;
25
41
  };
26
- exports.getPlatformEnv = getPlatformEnv;
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(exports, "__esModule", { value: true });
3
- exports.getPrefixedEnvVars = void 0;
4
- /**
5
- * Get the framework-specific prefixed System Environment Variables.
6
- * See https://vercel.com/docs/concepts/projects/environment-variables#system-environment-variables
7
- * @param envPrefix - Prefix, typically from `@vercel/frameworks`
8
- * @param envs - Environment Variables, typically from `process.env`
9
- */
10
- function getPrefixedEnvVars({ envPrefix, envs, }) {
11
- const vercelSystemEnvPrefix = 'VERCEL_';
12
- const allowed = [
13
- 'VERCEL_URL',
14
- 'VERCEL_ENV',
15
- 'VERCEL_REGION',
16
- 'VERCEL_BRANCH_URL',
17
- ];
18
- const newEnvs = {};
19
- if (envPrefix && envs.VERCEL_URL) {
20
- Object.keys(envs)
21
- .filter(key => allowed.includes(key) || key.startsWith('VERCEL_GIT_'))
22
- .forEach(key => {
23
- const newKey = `${envPrefix}${key}`;
24
- if (!(newKey in envs)) {
25
- newEnvs[newKey] = envs[key];
26
- }
27
- });
28
- // Tell turbo to exclude all Vercel System Env Vars
29
- // See https://github.com/vercel/turborepo/pull/1622
30
- newEnvs.TURBO_CI_VENDOR_ENV_KEY = `${envPrefix}${vercelSystemEnvPrefix}`;
31
- }
32
- return newEnvs;
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
- exports.getPrefixedEnvVars = getPrefixedEnvVars;
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ getPrefixedEnvVars
50
+ });
@@ -1,84 +1,104 @@
1
1
  "use strict";
2
- // Source: https://github.com/pnpm/pnpm/blob/b38d711f3892a473e20e69dd32ca7e1b439efaec/fs/hard-link-dir/src/index.ts#L4
3
- // LICENSE (MIT): https://github.com/pnpm/pnpm/blob/b38d711f3892a473e20e69dd32ca7e1b439efaec/LICENSE
4
- var __importDefault = (this && this.__importDefault) || function (mod) {
5
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.hardLinkDir = void 0;
9
- const path_1 = __importDefault(require("path"));
10
- const fs_1 = require("fs");
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
- if (destDirs.length === 0)
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
- // Don't try to hard link the source directory to itself
15
- destDirs = destDirs.filter(destDir => path_1.default.relative(destDir, src) !== '');
16
- const files = await fs_1.promises.readdir(src);
17
- await Promise.all(files.map(async (file) => {
18
- if (file === 'node_modules')
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
- await linkOrCopyFile(srcFile, destFile);
41
- }
42
- catch (err) {
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
- try {
56
- await linkOrCopy(srcFile, destFile);
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
- catch (err) {
59
- // eslint-disable-line
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
- try {
76
- await fs_1.promises.link(srcFile, destFile);
77
- }
78
- catch (err) {
79
- // eslint-disable-line
80
- if (err.code !== 'EXDEV')
81
- throw err;
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
+ });