symlink-dir 8.0.0 → 10.0.0
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/dist/index.d.ts +6 -12
- package/dist/index.js +45 -50
- package/package.json +11 -8
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -7
- package/dist/cli.js.map +0 -1
- package/dist/index.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2016-
|
|
3
|
+
Copyright (c) 2016-2026 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/dist/index.d.ts
CHANGED
|
@@ -2,18 +2,12 @@ interface SymlinkDirOptions {
|
|
|
2
2
|
overwrite?: boolean;
|
|
3
3
|
noJunction?: boolean;
|
|
4
4
|
}
|
|
5
|
-
declare function symlinkDir(target: string, path: string, opts?: SymlinkDirOptions): Promise<{
|
|
5
|
+
export declare function symlinkDir(target: string, path: string, opts?: SymlinkDirOptions): Promise<{
|
|
6
6
|
reused: boolean;
|
|
7
7
|
warn?: string;
|
|
8
8
|
}>;
|
|
9
|
-
declare
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
export
|
|
14
|
-
declare namespace symlinkDir {
|
|
15
|
-
function sync(target: string, path: string, opts?: SymlinkDirOptions): {
|
|
16
|
-
reused: boolean;
|
|
17
|
-
warn?: string;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
9
|
+
export declare function symlinkDirSync(target: string, path: string, opts?: SymlinkDirOptions): {
|
|
10
|
+
reused: boolean;
|
|
11
|
+
warn?: string;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const renameOverwrite = require("rename-overwrite");
|
|
1
|
+
import betterPathResolve from 'better-path-resolve';
|
|
2
|
+
import { promises as fs, symlinkSync, mkdirSync, readlinkSync, unlinkSync } from 'fs';
|
|
3
|
+
import { types } from 'util';
|
|
4
|
+
import pathLib from 'path';
|
|
5
|
+
import renameOverwrite from 'rename-overwrite';
|
|
7
6
|
const IS_WINDOWS = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
|
|
8
|
-
function resolveSrcOnWinJunction(
|
|
9
|
-
return `${
|
|
7
|
+
function resolveSrcOnWinJunction(src) {
|
|
8
|
+
return `${src}\\`;
|
|
10
9
|
}
|
|
11
|
-
function
|
|
10
|
+
function resolveSrcOnTrueSymlink(src, dest) {
|
|
11
|
+
return pathLib.relative(pathLib.dirname(dest), src);
|
|
12
|
+
}
|
|
13
|
+
export function symlinkDir(target, path, opts) {
|
|
12
14
|
path = betterPathResolve(path);
|
|
13
|
-
|
|
15
|
+
target = betterPathResolve(target);
|
|
16
|
+
if (target === path)
|
|
14
17
|
throw new Error(`Symlink path is the same as the target path (${target})`);
|
|
15
18
|
return forceSymlink(target, path, opts);
|
|
16
19
|
}
|
|
20
|
+
export function symlinkDirSync(target, path, opts) {
|
|
21
|
+
path = betterPathResolve(path);
|
|
22
|
+
target = betterPathResolve(target);
|
|
23
|
+
if (target === path)
|
|
24
|
+
throw new Error(`Symlink path is the same as the target path (${target})`);
|
|
25
|
+
return forceSymlinkSync(target, path, opts);
|
|
26
|
+
}
|
|
17
27
|
function isExistingSymlinkUpToDate(wantedTarget, path, linkString) {
|
|
18
|
-
if (wantedTarget === linkString)
|
|
19
|
-
return true;
|
|
20
28
|
// path is going to be that of the symlink, so never be a (drive) root, therefore dirname(path) is different from path
|
|
21
29
|
const existingTarget = pathLib.isAbsolute(linkString) ? linkString : pathLib.join(pathLib.dirname(path), linkString);
|
|
22
|
-
|
|
23
|
-
return pathLib.relative(wantedTargetAbsolute, existingTarget) === '';
|
|
30
|
+
return pathLib.relative(wantedTarget, existingTarget) === '';
|
|
24
31
|
}
|
|
25
32
|
let createSymlinkAsync;
|
|
26
33
|
let createSymlinkSync;
|
|
@@ -67,21 +74,21 @@ else {
|
|
|
67
74
|
createSymlinkSync = createTrueSymlinkSync;
|
|
68
75
|
}
|
|
69
76
|
function createTrueSymlinkAsync(target, path) {
|
|
70
|
-
return
|
|
77
|
+
return fs.symlink(resolveSrcOnTrueSymlink(target, path), path, 'dir');
|
|
71
78
|
}
|
|
72
79
|
function createTrueSymlinkSync(target, path) {
|
|
73
|
-
(
|
|
80
|
+
symlinkSync(resolveSrcOnTrueSymlink(target, path), path, 'dir');
|
|
74
81
|
}
|
|
75
82
|
function createJunctionAsync(target, path) {
|
|
76
|
-
return
|
|
83
|
+
return fs.symlink(resolveSrcOnWinJunction(target), path, 'junction');
|
|
77
84
|
}
|
|
78
85
|
function createJunctionSync(target, path) {
|
|
79
|
-
|
|
86
|
+
symlinkSync(resolveSrcOnWinJunction(target), path, 'junction');
|
|
80
87
|
}
|
|
81
88
|
async function forceSymlink(target, path, opts) {
|
|
82
89
|
let initialErr;
|
|
83
90
|
try {
|
|
84
|
-
if (
|
|
91
|
+
if (opts?.noJunction === true) {
|
|
85
92
|
await createTrueSymlinkAsync(target, path);
|
|
86
93
|
}
|
|
87
94
|
else {
|
|
@@ -93,7 +100,7 @@ async function forceSymlink(target, path, opts) {
|
|
|
93
100
|
switch (err.code) {
|
|
94
101
|
case 'ENOENT':
|
|
95
102
|
try {
|
|
96
|
-
await
|
|
103
|
+
await fs.mkdir(pathLib.dirname(path), { recursive: true });
|
|
97
104
|
}
|
|
98
105
|
catch (mkdirError) {
|
|
99
106
|
mkdirError.message = `Error while trying to symlink "${target}" to "${path}". ` +
|
|
@@ -115,19 +122,19 @@ async function forceSymlink(target, path, opts) {
|
|
|
115
122
|
}
|
|
116
123
|
let linkString;
|
|
117
124
|
try {
|
|
118
|
-
linkString = await
|
|
125
|
+
linkString = await fs.readlink(path);
|
|
119
126
|
}
|
|
120
127
|
catch (err) {
|
|
121
|
-
if (
|
|
128
|
+
if (opts?.overwrite === false) {
|
|
122
129
|
throw initialErr;
|
|
123
130
|
}
|
|
124
131
|
// path is not a link
|
|
125
132
|
const parentDir = pathLib.dirname(path);
|
|
126
133
|
let warn;
|
|
127
|
-
if (opts
|
|
134
|
+
if (opts?.renameTried) {
|
|
128
135
|
// This is needed in order to fix a mysterious bug that sometimes happens on macOS.
|
|
129
136
|
// It is hard to reproduce and is described here: https://github.com/pnpm/pnpm/issues/5909#issuecomment-1400066890
|
|
130
|
-
await
|
|
137
|
+
await fs.unlink(path);
|
|
131
138
|
warn = `Symlink wanted name was occupied by directory or file. Old entity removed: "${parentDir}${pathLib.sep}{${pathLib.basename(path)}".`;
|
|
132
139
|
}
|
|
133
140
|
else {
|
|
@@ -136,7 +143,7 @@ async function forceSymlink(target, path, opts) {
|
|
|
136
143
|
await renameOverwrite(path, pathLib.join(parentDir, ignore));
|
|
137
144
|
}
|
|
138
145
|
catch (error) {
|
|
139
|
-
if (
|
|
146
|
+
if (types.isNativeError(error) && 'code' in error && error.code === 'ENOENT') {
|
|
140
147
|
throw initialErr;
|
|
141
148
|
}
|
|
142
149
|
throw error;
|
|
@@ -151,34 +158,23 @@ async function forceSymlink(target, path, opts) {
|
|
|
151
158
|
if (isExistingSymlinkUpToDate(target, path, linkString)) {
|
|
152
159
|
return { reused: true };
|
|
153
160
|
}
|
|
154
|
-
if (
|
|
161
|
+
if (opts?.overwrite === false) {
|
|
155
162
|
throw initialErr;
|
|
156
163
|
}
|
|
157
164
|
try {
|
|
158
|
-
await
|
|
165
|
+
await fs.unlink(path);
|
|
159
166
|
}
|
|
160
167
|
catch (error) {
|
|
161
|
-
if (!
|
|
168
|
+
if (!types.isNativeError(error) || !('code' in error) || error.code !== 'ENOENT') {
|
|
162
169
|
throw error;
|
|
163
170
|
}
|
|
164
171
|
}
|
|
165
172
|
return await forceSymlink(target, path, opts);
|
|
166
173
|
}
|
|
167
|
-
// for backward compatibility
|
|
168
|
-
symlinkDir['default'] = symlinkDir;
|
|
169
|
-
(function (symlinkDir) {
|
|
170
|
-
function sync(target, path, opts) {
|
|
171
|
-
path = betterPathResolve(path);
|
|
172
|
-
if (betterPathResolve(target) === path)
|
|
173
|
-
throw new Error(`Symlink path is the same as the target path (${target})`);
|
|
174
|
-
return forceSymlinkSync(target, path, opts);
|
|
175
|
-
}
|
|
176
|
-
symlinkDir.sync = sync;
|
|
177
|
-
})(symlinkDir || (symlinkDir = {}));
|
|
178
174
|
function forceSymlinkSync(target, path, opts) {
|
|
179
175
|
let initialErr;
|
|
180
176
|
try {
|
|
181
|
-
if (
|
|
177
|
+
if (opts?.noJunction === true) {
|
|
182
178
|
createTrueSymlinkSync(target, path);
|
|
183
179
|
}
|
|
184
180
|
else {
|
|
@@ -191,7 +187,7 @@ function forceSymlinkSync(target, path, opts) {
|
|
|
191
187
|
switch (err.code) {
|
|
192
188
|
case 'ENOENT':
|
|
193
189
|
try {
|
|
194
|
-
|
|
190
|
+
mkdirSync(pathLib.dirname(path), { recursive: true });
|
|
195
191
|
}
|
|
196
192
|
catch (mkdirError) {
|
|
197
193
|
mkdirError.message = `Error while trying to symlink "${target}" to "${path}". ` +
|
|
@@ -212,19 +208,19 @@ function forceSymlinkSync(target, path, opts) {
|
|
|
212
208
|
}
|
|
213
209
|
let linkString;
|
|
214
210
|
try {
|
|
215
|
-
linkString =
|
|
211
|
+
linkString = readlinkSync(path);
|
|
216
212
|
}
|
|
217
213
|
catch (err) {
|
|
218
|
-
if (
|
|
214
|
+
if (opts?.overwrite === false) {
|
|
219
215
|
throw initialErr;
|
|
220
216
|
}
|
|
221
217
|
// path is not a link
|
|
222
218
|
const parentDir = pathLib.dirname(path);
|
|
223
219
|
let warn;
|
|
224
|
-
if (opts
|
|
220
|
+
if (opts?.renameTried) {
|
|
225
221
|
// This is needed in order to fix a mysterious bug that sometimes happens on macOS.
|
|
226
222
|
// It is hard to reproduce and is described here: https://github.com/pnpm/pnpm/issues/5909#issuecomment-1400066890
|
|
227
|
-
|
|
223
|
+
unlinkSync(path);
|
|
228
224
|
warn = `Symlink wanted name was occupied by directory or file. Old entity removed: "${parentDir}${pathLib.sep}{${pathLib.basename(path)}".`;
|
|
229
225
|
}
|
|
230
226
|
else {
|
|
@@ -233,7 +229,7 @@ function forceSymlinkSync(target, path, opts) {
|
|
|
233
229
|
renameOverwrite.sync(path, pathLib.join(parentDir, ignore));
|
|
234
230
|
}
|
|
235
231
|
catch (error) {
|
|
236
|
-
if (
|
|
232
|
+
if (types.isNativeError(error) && 'code' in error && error.code === 'ENOENT') {
|
|
237
233
|
throw initialErr;
|
|
238
234
|
}
|
|
239
235
|
throw error;
|
|
@@ -248,18 +244,17 @@ function forceSymlinkSync(target, path, opts) {
|
|
|
248
244
|
if (isExistingSymlinkUpToDate(target, path, linkString)) {
|
|
249
245
|
return { reused: true };
|
|
250
246
|
}
|
|
251
|
-
if (
|
|
247
|
+
if (opts?.overwrite === false) {
|
|
252
248
|
throw initialErr;
|
|
253
249
|
}
|
|
254
250
|
try {
|
|
255
|
-
|
|
251
|
+
unlinkSync(path);
|
|
256
252
|
}
|
|
257
253
|
catch (error) {
|
|
258
|
-
if (!
|
|
254
|
+
if (!types.isNativeError(error) || !('code' in error) || error.code !== 'ENOENT') {
|
|
259
255
|
throw error;
|
|
260
256
|
}
|
|
261
257
|
}
|
|
262
258
|
return forceSymlinkSync(target, path, opts);
|
|
263
259
|
}
|
|
264
|
-
module.exports = symlinkDir;
|
|
265
260
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "symlink-dir",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "Cross-platform directory symlinking",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
6
13
|
"files": [
|
|
7
14
|
"dist/",
|
|
8
15
|
"!*.map"
|
|
9
16
|
],
|
|
10
17
|
"typings": "dist/index.d.ts",
|
|
11
|
-
"bin": "dist/cli.js",
|
|
12
18
|
"keywords": [
|
|
13
19
|
"symlink",
|
|
14
20
|
"symlinking",
|
|
@@ -33,11 +39,8 @@
|
|
|
33
39
|
"homepage": "https://github.com/pnpm/symlink-dir#readme",
|
|
34
40
|
"devDependencies": {
|
|
35
41
|
"@types/node": "^22.15.3",
|
|
36
|
-
"@types/tape": "5.6.4",
|
|
37
42
|
"rimraf": "^3.0.2",
|
|
38
|
-
"tape": "^5.9.0",
|
|
39
43
|
"tempy": "^1.0.1",
|
|
40
|
-
"ts-node": "^10.9.2",
|
|
41
44
|
"typescript": "^5.8.3",
|
|
42
45
|
"write-json-file": "^4.3.0"
|
|
43
46
|
},
|
|
@@ -54,12 +57,12 @@
|
|
|
54
57
|
}
|
|
55
58
|
},
|
|
56
59
|
"engines": {
|
|
57
|
-
"node": ">=
|
|
60
|
+
"node": ">=22.13"
|
|
58
61
|
},
|
|
59
62
|
"scripts": {
|
|
60
63
|
"pretest": "rimraf node_modules/src",
|
|
61
|
-
"test": "
|
|
62
|
-
"test:non-develop": "
|
|
64
|
+
"test": "node --experimental-strip-types --test test/sync.ts test/async.ts",
|
|
65
|
+
"test:non-develop": "node --experimental-strip-types -r ./test/emulateWinNonDevelopMode.cjs --test test/sync.ts test/async.ts",
|
|
63
66
|
"premd": "rimraf node_modules/src && npm run tsc",
|
|
64
67
|
"tsc": "rimraf dist && tsc"
|
|
65
68
|
}
|
package/dist/cli.d.ts
DELETED
package/dist/cli.js
DELETED
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|