symlink-dir 5.0.0 → 5.0.2
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/LICENSE +1 -1
- package/README.md +7 -3
- package/dist/cli.js +0 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +22 -9
- package/dist/index.js.map +1 -0
- package/package.json +18 -23
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2016-
|
|
3
|
+
Copyright (c) 2016-2023 Zoltan Kochan <z@kochan.io>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> Cross-platform directory symlinking
|
|
4
4
|
|
|
5
|
-
<!--@shields('npm'
|
|
6
|
-
[](https://www.npmjs.com/package/symlink-dir)
|
|
5
|
+
<!--@shields('npm')-->
|
|
6
|
+
[](https://www.npmjs.com/package/symlink-dir)
|
|
7
7
|
<!--/@-->
|
|
8
8
|
|
|
9
9
|
* Always uses "junctions" on Windows. Even though support for "symbolic links" was added in Vista+, users by default lack permission to create them
|
|
@@ -49,10 +49,14 @@ symlinkDir('src', 'node_modules/src')
|
|
|
49
49
|
|
|
50
50
|
## API
|
|
51
51
|
|
|
52
|
-
### `symlinkDir(src, dest): Promise<{ reused: boolean, warn?: string }>`
|
|
52
|
+
### `symlinkDir(src, dest, opts?): Promise<{ reused: boolean, warn?: string }>`
|
|
53
53
|
|
|
54
54
|
Creates a symlink in `dest` that points to `src`.
|
|
55
55
|
|
|
56
|
+
Options:
|
|
57
|
+
|
|
58
|
+
* `overwrite` - *boolean* - is `true` by default. When `false`, existing files at dest are not overwritten.
|
|
59
|
+
|
|
56
60
|
Result:
|
|
57
61
|
|
|
58
62
|
* `reused` - *boolean* - is `true` if the symlink already existed pointing to the `src`.
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,6BAA6B;AAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAElC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -14,19 +14,19 @@ function resolveSrcOnWin(src, dest) {
|
|
|
14
14
|
function resolveSrcOnNonWin(src, dest) {
|
|
15
15
|
return path.relative(path.dirname(dest), src);
|
|
16
16
|
}
|
|
17
|
-
function symlinkDir(src, dest) {
|
|
17
|
+
function symlinkDir(src, dest, opts) {
|
|
18
18
|
dest = betterPathResolve(dest);
|
|
19
19
|
src = betterPathResolve(src);
|
|
20
20
|
if (src === dest)
|
|
21
21
|
throw new Error(`Symlink path is the same as the target path (${src})`);
|
|
22
22
|
src = resolveSrc(src, dest);
|
|
23
|
-
return forceSymlink(src, dest);
|
|
23
|
+
return forceSymlink(src, dest, opts);
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Creates a symlink. Re-link if a symlink already exists at the supplied
|
|
27
27
|
* srcPath. API compatible with [`fs#symlink`](https://nodejs.org/api/fs.html#fs_fs_symlink_srcpath_dstpath_type_callback).
|
|
28
28
|
*/
|
|
29
|
-
async function forceSymlink(src, dest) {
|
|
29
|
+
async function forceSymlink(src, dest, opts) {
|
|
30
30
|
try {
|
|
31
31
|
await fs_1.promises.symlink(src, dest, symlinkType);
|
|
32
32
|
return { reused: false };
|
|
@@ -43,10 +43,13 @@ async function forceSymlink(src, dest) {
|
|
|
43
43
|
`Details: ${mkdirError}`;
|
|
44
44
|
throw mkdirError;
|
|
45
45
|
}
|
|
46
|
-
await
|
|
46
|
+
await forceSymlink(src, dest, opts);
|
|
47
47
|
return { reused: false };
|
|
48
48
|
case 'EEXIST':
|
|
49
49
|
case 'EISDIR':
|
|
50
|
+
if ((opts === null || opts === void 0 ? void 0 : opts.overwrite) === false) {
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
50
53
|
// If the target file already exists then we proceed.
|
|
51
54
|
// Additional checks are done below.
|
|
52
55
|
break;
|
|
@@ -61,18 +64,28 @@ async function forceSymlink(src, dest) {
|
|
|
61
64
|
catch (err) {
|
|
62
65
|
// Dest is not a link
|
|
63
66
|
const parentDir = path.dirname(dest);
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
let warn;
|
|
68
|
+
if (opts === null || opts === void 0 ? void 0 : opts.renameTried) {
|
|
69
|
+
// This is needed in order to fix a mysterious bug that sometimes happens on macOS.
|
|
70
|
+
// It is hard to reproduce and is described here: https://github.com/pnpm/pnpm/issues/5909#issuecomment-1400066890
|
|
71
|
+
await fs_1.promises.unlink(dest);
|
|
72
|
+
warn = `Symlink wanted name was occupied by directory or file. Old entity removed: "${parentDir}${path.sep}{${path.basename(dest)}".`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const ignore = `.ignored_${path.basename(dest)}`;
|
|
76
|
+
await renameOverwrite(dest, path.join(parentDir, ignore));
|
|
77
|
+
warn = `Symlink wanted name was occupied by directory or file. Old entity moved: "${parentDir}${path.sep}{${path.basename(dest)} => ${ignore}".`;
|
|
78
|
+
}
|
|
66
79
|
return {
|
|
67
|
-
...await forceSymlink(src, dest),
|
|
68
|
-
warn
|
|
80
|
+
...await forceSymlink(src, dest, { ...opts, renameTried: true }),
|
|
81
|
+
warn,
|
|
69
82
|
};
|
|
70
83
|
}
|
|
71
84
|
if (src === linkString) {
|
|
72
85
|
return { reused: true };
|
|
73
86
|
}
|
|
74
87
|
await fs_1.promises.unlink(dest);
|
|
75
|
-
return await forceSymlink(src, dest);
|
|
88
|
+
return await forceSymlink(src, dest, opts);
|
|
76
89
|
}
|
|
77
90
|
// for backward compatibility
|
|
78
91
|
symlinkDir['default'] = symlinkDir;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "symlink-dir",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"description": "Cross-platform directory symlinking",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -17,18 +17,9 @@
|
|
|
17
17
|
"dir",
|
|
18
18
|
"folder"
|
|
19
19
|
],
|
|
20
|
-
"scripts": {
|
|
21
|
-
"pretest": "rimraf node_modules/src",
|
|
22
|
-
"test": "ts-node test",
|
|
23
|
-
"test-md": "mos t",
|
|
24
|
-
"premd": "rimraf node_modules/src && npm run tsc",
|
|
25
|
-
"md": "mos",
|
|
26
|
-
"tsc": "rimraf dist && tsc",
|
|
27
|
-
"prepublishOnly": "npm run tsc"
|
|
28
|
-
},
|
|
29
20
|
"repository": {
|
|
30
21
|
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/
|
|
22
|
+
"url": "git+https://github.com/pnpm/symlink-dir.git"
|
|
32
23
|
},
|
|
33
24
|
"author": {
|
|
34
25
|
"name": "Zoltan Kochan",
|
|
@@ -37,24 +28,22 @@
|
|
|
37
28
|
},
|
|
38
29
|
"license": "MIT",
|
|
39
30
|
"bugs": {
|
|
40
|
-
"url": "https://github.com/
|
|
31
|
+
"url": "https://github.com/pnpm/symlink-dir/issues"
|
|
41
32
|
},
|
|
42
|
-
"homepage": "https://github.com/
|
|
33
|
+
"homepage": "https://github.com/pnpm/symlink-dir#readme",
|
|
43
34
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^
|
|
45
|
-
"@types/tape": "^4.13.
|
|
46
|
-
"mos": "^1.3.1",
|
|
47
|
-
"mos-plugin-readme": "^1.0.4",
|
|
35
|
+
"@types/node": "^16.18.3",
|
|
36
|
+
"@types/tape": "^4.13.2",
|
|
48
37
|
"rimraf": "^3.0.2",
|
|
49
|
-
"tape": "^5.
|
|
50
|
-
"tempy": "^1.0.
|
|
51
|
-
"ts-node": "^9.
|
|
52
|
-
"typescript": "^4.
|
|
38
|
+
"tape": "^5.6.1",
|
|
39
|
+
"tempy": "^1.0.1",
|
|
40
|
+
"ts-node": "^10.9.1",
|
|
41
|
+
"typescript": "^4.9.3",
|
|
53
42
|
"write-json-file": "^4.3.0"
|
|
54
43
|
},
|
|
55
44
|
"dependencies": {
|
|
56
45
|
"better-path-resolve": "^1.0.0",
|
|
57
|
-
"rename-overwrite": "^4.0.
|
|
46
|
+
"rename-overwrite": "^4.0.3"
|
|
58
47
|
},
|
|
59
48
|
"mos": {
|
|
60
49
|
"plugins": [
|
|
@@ -66,5 +55,11 @@
|
|
|
66
55
|
},
|
|
67
56
|
"engines": {
|
|
68
57
|
"node": ">=12.10"
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"pretest": "rimraf node_modules/src",
|
|
61
|
+
"test": "ts-node test",
|
|
62
|
+
"premd": "rimraf node_modules/src && npm run tsc",
|
|
63
|
+
"tsc": "rimraf dist && tsc"
|
|
69
64
|
}
|
|
70
|
-
}
|
|
65
|
+
}
|