@teambit/toolbox.fs.hard-link-directory 0.0.11 → 0.0.12

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.
@@ -23,43 +23,60 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
23
23
  */
24
24
  function hardLinkDirectory(src, destDirs) {
25
25
  return __awaiter(this, void 0, void 0, function* () {
26
+ if (destDirs.length === 0)
27
+ return;
26
28
  const files = yield fs_extra_1.default.readdir(src);
27
29
  yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
28
30
  if (file === 'node_modules')
29
31
  return;
30
32
  const srcFile = path_1.default.join(src, file);
31
33
  if ((yield fs_extra_1.default.lstat(srcFile)).isDirectory()) {
32
- yield Promise.all(destDirs.map((destDir) => __awaiter(this, void 0, void 0, function* () {
33
- const destFile = path_1.default.join(destDir, file);
34
+ const destSubdirs = yield Promise.all(destDirs.map((destDir) => __awaiter(this, void 0, void 0, function* () {
35
+ const destSubdir = path_1.default.join(destDir, file);
34
36
  try {
35
- yield fs_extra_1.default.mkdir(destFile, { recursive: true });
37
+ yield fs_extra_1.default.mkdir(destSubdir, { recursive: true });
36
38
  }
37
39
  catch (err) {
38
40
  if (err.code !== 'EEXIST')
39
41
  throw err;
40
42
  }
41
- return hardLinkDirectory(srcFile, [destFile]);
43
+ return destSubdir;
42
44
  })));
45
+ yield hardLinkDirectory(srcFile, destSubdirs);
43
46
  return;
44
47
  }
45
48
  yield Promise.all(destDirs.map((destDir) => __awaiter(this, void 0, void 0, function* () {
46
49
  const destFile = path_1.default.join(destDir, file);
47
50
  try {
48
- yield fs_extra_1.default.link(srcFile, destFile);
51
+ yield linkFile(srcFile, destFile);
49
52
  }
50
53
  catch (err) {
51
54
  if (err.code === 'ENOENT') {
52
- yield fs_extra_1.default.mkdir(destDir, { recursive: true });
53
- yield fs_extra_1.default.link(srcFile, destFile);
55
+ // broken symlinks are skipped
54
56
  return;
55
57
  }
56
- if (err.code !== 'EEXIST') {
57
- throw err;
58
- }
58
+ throw err;
59
59
  }
60
60
  })));
61
61
  })));
62
62
  });
63
63
  }
64
64
  exports.hardLinkDirectory = hardLinkDirectory;
65
+ function linkFile(srcFile, destFile) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ try {
68
+ yield fs_extra_1.default.link(srcFile, destFile);
69
+ }
70
+ catch (err) {
71
+ if (err.code === 'ENOENT') {
72
+ yield fs_extra_1.default.mkdir(path_1.default.dirname(destFile), { recursive: true });
73
+ yield fs_extra_1.default.link(srcFile, destFile);
74
+ return;
75
+ }
76
+ if (err.code !== 'EEXIST') {
77
+ throw err;
78
+ }
79
+ }
80
+ });
81
+ }
65
82
  //# sourceMappingURL=hard-link-directory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hard-link-directory.js","sourceRoot":"","sources":["../hard-link-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,wDAA0B;AAE1B;;;;;GAKG;AACH,SAAsB,iBAAiB,CAAC,GAAW,EAAE,QAAkB;;QACrE,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,cAAc;gBAAE,OAAO;YACpC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,kBAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC3C,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;oBAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI;wBACF,MAAM,kBAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC/C;oBAAC,OAAO,GAAQ,EAAE;wBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;4BAAE,MAAM,GAAG,CAAC;qBACtC;oBACD,OAAO,iBAAiB,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChD,CAAC,CAAA,CAAC,CACH,CAAC;gBACF,OAAO;aACR;YACD,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;gBAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC1C,IAAI;oBACF,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;iBAClC;gBAAC,OAAO,GAAQ,EAAE;oBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACzB,MAAM,kBAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7C,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;wBACjC,OAAO;qBACR;oBACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACzB,MAAM,GAAG,CAAC;qBACX;iBACF;YACH,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;CAAA;AAvCD,8CAuCC"}
1
+ {"version":3,"file":"hard-link-directory.js","sourceRoot":"","sources":["../hard-link-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,wDAA0B;AAE1B;;;;;GAKG;AACH,SAAsB,iBAAiB,CAAC,GAAW,EAAE,QAAkB;;QACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,cAAc;gBAAE,OAAO;YACpC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,kBAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC3C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;oBAC7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5C,IAAI;wBACF,MAAM,kBAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBACjD;oBAAC,OAAO,GAAQ,EAAE;wBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;4BAAE,MAAM,GAAG,CAAC;qBACtC;oBACD,OAAO,UAAU,CAAC;gBACpB,CAAC,CAAA,CAAC,CACH,CAAC;gBACF,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC9C,OAAO;aACR;YACD,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;gBAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC1C,IAAI;oBACF,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;iBACnC;gBAAC,OAAO,GAAQ,EAAE;oBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACzB,8BAA8B;wBAC9B,OAAO;qBACR;oBACD,MAAM,GAAG,CAAC;iBACX;YACH,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;CAAA;AAtCD,8CAsCC;AAED,SAAe,QAAQ,CAAC,OAAe,EAAE,QAAgB;;QACvD,IAAI;YACF,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SAClC;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACjC,OAAO;aACR;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,MAAM,GAAG,CAAC;aACX;SACF;IACH,CAAC;CAAA"}
@@ -1,5 +1,5 @@
1
1
  ;
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.toolbox_fs_hard-link-directory@0.0.11/dist/hard-link-directory.docs.mdx';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.toolbox_fs_hard-link-directory@0.0.12/dist/hard-link-directory.docs.mdx';
3
3
 
4
4
  export const compositions = [];
5
5
  export const overview = [overview_0];
@@ -8,42 +8,56 @@ import fs from 'fs-extra';
8
8
  * @param destDirs - The target directories.
9
9
  */
10
10
  export async function hardLinkDirectory(src: string, destDirs: string[]) {
11
+ if (destDirs.length === 0) return;
11
12
  const files = await fs.readdir(src);
12
13
  await Promise.all(
13
14
  files.map(async (file) => {
14
15
  if (file === 'node_modules') return;
15
16
  const srcFile = path.join(src, file);
16
17
  if ((await fs.lstat(srcFile)).isDirectory()) {
17
- await Promise.all(
18
+ const destSubdirs = await Promise.all(
18
19
  destDirs.map(async (destDir) => {
19
- const destFile = path.join(destDir, file);
20
+ const destSubdir = path.join(destDir, file);
20
21
  try {
21
- await fs.mkdir(destFile, { recursive: true });
22
+ await fs.mkdir(destSubdir, { recursive: true });
22
23
  } catch (err: any) {
23
24
  if (err.code !== 'EEXIST') throw err;
24
25
  }
25
- return hardLinkDirectory(srcFile, [destFile]);
26
+ return destSubdir;
26
27
  })
27
28
  );
29
+ await hardLinkDirectory(srcFile, destSubdirs);
28
30
  return;
29
31
  }
30
32
  await Promise.all(
31
33
  destDirs.map(async (destDir) => {
32
34
  const destFile = path.join(destDir, file);
33
35
  try {
34
- await fs.link(srcFile, destFile);
36
+ await linkFile(srcFile, destFile);
35
37
  } catch (err: any) {
36
38
  if (err.code === 'ENOENT') {
37
- await fs.mkdir(destDir, { recursive: true });
38
- await fs.link(srcFile, destFile);
39
+ // broken symlinks are skipped
39
40
  return;
40
41
  }
41
- if (err.code !== 'EEXIST') {
42
- throw err;
43
- }
42
+ throw err;
44
43
  }
45
44
  })
46
45
  );
47
46
  })
48
47
  );
49
48
  }
49
+
50
+ async function linkFile(srcFile: string, destFile: string) {
51
+ try {
52
+ await fs.link(srcFile, destFile);
53
+ } catch (err: any) {
54
+ if (err.code === 'ENOENT') {
55
+ await fs.mkdir(path.dirname(destFile), { recursive: true });
56
+ await fs.link(srcFile, destFile);
57
+ return;
58
+ }
59
+ if (err.code !== 'EEXIST') {
60
+ throw err;
61
+ }
62
+ }
63
+ }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/toolbox.fs.hard-link-directory",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "homepage": "https://bit.dev/teambit/toolbox/fs/hard-link-directory",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.toolbox",
8
8
  "name": "fs/hard-link-directory",
9
- "version": "0.0.11"
9
+ "version": "0.0.12"
10
10
  },
11
11
  "dependencies": {
12
12
  "fs-extra": "10.0.0"
@@ -14,9 +14,9 @@
14
14
  "devDependencies": {
15
15
  "@types/fs-extra": "9.0.7",
16
16
  "@types/mocha": "9.1.0",
17
- "@babel/runtime": "7.20.0",
18
- "@types/node": "12.20.4",
19
17
  "@types/jest": "26.0.20",
18
+ "@types/node": "12.20.4",
19
+ "@babel/runtime": "7.20.0",
20
20
  "@teambit/defender.fs.global-bit-temp-dir": "0.0.1"
21
21
  },
22
22
  "peerDependencies": {},