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 CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016-2025 Zoltan Kochan <z@kochan.io>
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 namespace symlinkDir {
10
- var _a: typeof symlinkDir;
11
- export { _a as default };
12
- }
13
- export = symlinkDir;
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
- "use strict";
2
- const betterPathResolve = require("better-path-resolve");
3
- const fs_1 = require("fs");
4
- const util = require("util");
5
- const pathLib = require("path");
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(target, path) {
9
- return `${pathLib.isAbsolute(target) ? target : pathLib.join(pathLib.dirname(path), target)}\\`;
7
+ function resolveSrcOnWinJunction(src) {
8
+ return `${src}\\`;
10
9
  }
11
- function symlinkDir(target, path, opts) {
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
- if (betterPathResolve(target) === path)
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
- const wantedTargetAbsolute = pathLib.isAbsolute(wantedTarget) ? wantedTarget : pathLib.join(pathLib.dirname(path), wantedTarget);
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 fs_1.promises.symlink(target, path, 'dir');
77
+ return fs.symlink(resolveSrcOnTrueSymlink(target, path), path, 'dir');
71
78
  }
72
79
  function createTrueSymlinkSync(target, path) {
73
- (0, fs_1.symlinkSync)(target, path, 'dir');
80
+ symlinkSync(resolveSrcOnTrueSymlink(target, path), path, 'dir');
74
81
  }
75
82
  function createJunctionAsync(target, path) {
76
- return fs_1.promises.symlink(resolveSrcOnWinJunction(target, path), path, 'junction');
83
+ return fs.symlink(resolveSrcOnWinJunction(target), path, 'junction');
77
84
  }
78
85
  function createJunctionSync(target, path) {
79
- (0, fs_1.symlinkSync)(resolveSrcOnWinJunction(target, path), path, 'junction');
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 ((opts === null || opts === void 0 ? void 0 : opts.noJunction) === true) {
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 fs_1.promises.mkdir(pathLib.dirname(path), { recursive: true });
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 fs_1.promises.readlink(path);
125
+ linkString = await fs.readlink(path);
119
126
  }
120
127
  catch (err) {
121
- if ((opts === null || opts === void 0 ? void 0 : opts.overwrite) === false) {
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 === null || opts === void 0 ? void 0 : opts.renameTried) {
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 fs_1.promises.unlink(path);
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 (util.types.isNativeError(error) && 'code' in error && error.code === 'ENOENT') {
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 ((opts === null || opts === void 0 ? void 0 : opts.overwrite) === false) {
161
+ if (opts?.overwrite === false) {
155
162
  throw initialErr;
156
163
  }
157
164
  try {
158
- await fs_1.promises.unlink(path);
165
+ await fs.unlink(path);
159
166
  }
160
167
  catch (error) {
161
- if (!util.types.isNativeError(error) || !('code' in error) || error.code !== 'ENOENT') {
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 ((opts === null || opts === void 0 ? void 0 : opts.noJunction) === true) {
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
- (0, fs_1.mkdirSync)(pathLib.dirname(path), { recursive: true });
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 = (0, fs_1.readlinkSync)(path);
211
+ linkString = readlinkSync(path);
216
212
  }
217
213
  catch (err) {
218
- if ((opts === null || opts === void 0 ? void 0 : opts.overwrite) === false) {
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 === null || opts === void 0 ? void 0 : opts.renameTried) {
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
- (0, fs_1.unlinkSync)(path);
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 (util.types.isNativeError(error) && 'code' in error && error.code === 'ENOENT') {
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 ((opts === null || opts === void 0 ? void 0 : opts.overwrite) === false) {
247
+ if (opts?.overwrite === false) {
252
248
  throw initialErr;
253
249
  }
254
250
  try {
255
- (0, fs_1.unlinkSync)(path);
251
+ unlinkSync(path);
256
252
  }
257
253
  catch (error) {
258
- if (!util.types.isNativeError(error) || !('code' in error) || error.code !== 'ENOENT') {
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": "8.0.0",
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": ">=18.12"
60
+ "node": ">=22.13"
58
61
  },
59
62
  "scripts": {
60
63
  "pretest": "rimraf node_modules/src",
61
- "test": "ts-node test/sync.ts && ts-node test/async.ts",
62
- "test:non-develop": "ts-node -r ./test/emulateWinNonDevelopMode.js test/sync.ts && ts-node -r ./test/emulateWinNonDevelopMode.js test/async.ts",
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
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/cli.js DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const linkDir = require(".");
5
- const args = process.argv.slice(2);
6
- linkDir(args[0], args[1]);
7
- //# sourceMappingURL=cli.js.map
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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"}