pwd-fs 3.1.3 → 3.1.4
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/lib/src/index.d.ts +3 -5
- package/lib/src/index.js +21 -0
- package/lib/src/powered-file-system.d.ts +2 -1
- package/lib/{powered-file-system.js → src/powered-file-system.js} +58 -54
- package/lib/{recurse-io-sync.js → src/recurse-io-sync.js} +25 -27
- package/lib/{recurse-io.js → src/recurse-io.js} +31 -33
- package/lib/test/__fmock.js +40 -0
- package/lib/test/append.spec.js +58 -0
- package/lib/test/bitmask.spec.js +26 -0
- package/lib/test/chmod.spec.js +62 -0
- package/lib/test/chown.spec.js +68 -0
- package/lib/test/constructor.spec.js +17 -0
- package/lib/test/copy.spec.js +80 -0
- package/lib/test/mkdir.spec.js +90 -0
- package/lib/test/read.spec.js +73 -0
- package/lib/test/readdir.spec.js +70 -0
- package/lib/test/remove.spec.js +63 -0
- package/lib/test/rename.spec.js +66 -0
- package/lib/test/stat.spec.js +76 -0
- package/lib/test/symlink.spec.js +74 -0
- package/lib/test/test.spec.js +60 -0
- package/lib/test/write.spec.js +82 -0
- package/package.json +7 -14
- package/readme.md +10 -8
- package/src/index.ts +4 -26
- package/src/powered-file-system.ts +22 -20
- package/{__tests__ → test}/append.spec.ts +2 -3
- package/{__tests__ → test}/chmod.spec.ts +2 -3
- package/{__tests__ → test}/chown.spec.ts +2 -4
- package/{__tests__ → test}/constructor.spec.ts +1 -1
- package/{__tests__ → test}/copy.spec.ts +2 -3
- package/{__tests__ → test}/mkdir.spec.ts +2 -1
- package/{__tests__ → test}/read.spec.ts +2 -3
- package/{__tests__ → test}/readdir.spec.ts +3 -4
- package/{__tests__ → test}/remove.spec.ts +3 -3
- package/{__tests__ → test}/rename.spec.ts +2 -2
- package/{__tests__ → test}/stat.spec.ts +2 -3
- package/{__tests__ → test}/symlink.spec.ts +3 -3
- package/{__tests__ → test}/test.spec.ts +1 -3
- package/{__tests__ → test}/write.spec.ts +2 -2
- package/tsconfig.json +5 -5
- package/jest.config.ts +0 -14
- package/lib/index.js +0 -24
- package/rollup.config.js +0 -16
- /package/lib/{__tests__ → test}/__fmock.d.ts +0 -0
- /package/lib/{__tests__ → test}/append.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/bitmask.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/chmod.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/chown.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/constructor.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/copy.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/mkdir.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/read.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/readdir.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/remove.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/rename.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/stat.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/symlink.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/test.spec.d.ts +0 -0
- /package/lib/{__tests__ → test}/write.spec.d.ts +0 -0
- /package/{__tests__ → test}/__fmock.ts +0 -0
- /package/{__tests__ → test}/bitmask.spec.ts +0 -0
package/lib/src/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
export type Flag = TFlag;
|
|
4
|
-
export type Stats = TStats;
|
|
5
|
-
export declare const bitmask: typeof PoweredFileSystem.bitmask;
|
|
1
|
+
import { PoweredFileSystem } from './powered-file-system';
|
|
2
|
+
export declare const pfs: PoweredFileSystem;
|
|
6
3
|
export default PoweredFileSystem;
|
|
4
|
+
export * from './powered-file-system';
|
package/lib/src/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.pfs = void 0;
|
|
18
|
+
const powered_file_system_1 = require("./powered-file-system");
|
|
19
|
+
exports.pfs = new powered_file_system_1.PoweredFileSystem();
|
|
20
|
+
exports.default = powered_file_system_1.PoweredFileSystem;
|
|
21
|
+
__exportStar(require("./powered-file-system"), exports);
|
|
@@ -10,12 +10,13 @@ export interface IConstants {
|
|
|
10
10
|
w: number;
|
|
11
11
|
x: number;
|
|
12
12
|
}
|
|
13
|
+
export declare function bitmask(mode: number): number;
|
|
13
14
|
export declare class PoweredFileSystem {
|
|
14
15
|
readonly pwd: string;
|
|
15
16
|
readonly constants: IConstants;
|
|
17
|
+
static bitmask: typeof bitmask;
|
|
16
18
|
constructor(pwd?: string);
|
|
17
19
|
private resolve;
|
|
18
|
-
static bitmask(mode: number): number;
|
|
19
20
|
test(src: string, options: {
|
|
20
21
|
sync: true;
|
|
21
22
|
flag?: Mode;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PoweredFileSystem = exports.bitmask = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const recurse_io_1 = __importDefault(require("./recurse-io"));
|
|
10
|
+
const recurse_io_sync_1 = __importDefault(require("./recurse-io-sync"));
|
|
8
11
|
const permissions = [
|
|
9
12
|
0o400, // OWNER_READ
|
|
10
13
|
0o200, // OWNER_WRITE
|
|
@@ -16,41 +19,43 @@ const permissions = [
|
|
|
16
19
|
0o002, // OTHERS_WRITE
|
|
17
20
|
0o001 // OTHERS_EXECUTE
|
|
18
21
|
];
|
|
22
|
+
function bitmask(mode) {
|
|
23
|
+
const type = typeof mode;
|
|
24
|
+
if (type !== 'number') {
|
|
25
|
+
throw new Error(`Argument of type '${type}' is not assignable to parameter of type 'number'.`);
|
|
26
|
+
}
|
|
27
|
+
let umask = 0o000;
|
|
28
|
+
for (const flag of permissions) {
|
|
29
|
+
if (mode & flag) {
|
|
30
|
+
umask += flag;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return umask;
|
|
34
|
+
}
|
|
35
|
+
exports.bitmask = bitmask;
|
|
19
36
|
class PoweredFileSystem {
|
|
20
37
|
pwd;
|
|
21
38
|
constants = {
|
|
22
|
-
e:
|
|
23
|
-
r:
|
|
24
|
-
w:
|
|
25
|
-
x:
|
|
39
|
+
e: node_fs_1.default.constants.F_OK,
|
|
40
|
+
r: node_fs_1.default.constants.R_OK,
|
|
41
|
+
w: node_fs_1.default.constants.W_OK,
|
|
42
|
+
x: node_fs_1.default.constants.X_OK
|
|
26
43
|
};
|
|
44
|
+
static bitmask = bitmask;
|
|
27
45
|
constructor(pwd) {
|
|
28
|
-
this.pwd = pwd ?
|
|
46
|
+
this.pwd = pwd ? node_path_1.default.resolve(pwd) : process.cwd();
|
|
29
47
|
}
|
|
30
48
|
resolve(src) {
|
|
31
|
-
return
|
|
32
|
-
}
|
|
33
|
-
static bitmask(mode) {
|
|
34
|
-
const type = typeof mode;
|
|
35
|
-
if (type !== 'number') {
|
|
36
|
-
throw new Error(`Argument of type '${type}' is not assignable to parameter of type 'number'.`);
|
|
37
|
-
}
|
|
38
|
-
let umask = 0o000;
|
|
39
|
-
for (const flag of permissions) {
|
|
40
|
-
if (mode & flag) {
|
|
41
|
-
umask += flag;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return umask;
|
|
49
|
+
return node_path_1.default.resolve(this.pwd, src);
|
|
45
50
|
}
|
|
46
51
|
test(src, { sync = false, flag = 'e' } = {}) {
|
|
47
52
|
const mode = this.constants[flag];
|
|
48
|
-
src =
|
|
53
|
+
src = node_path_1.default.resolve(this.pwd, src);
|
|
49
54
|
if (sync) {
|
|
50
|
-
return
|
|
55
|
+
return node_fs_1.default.existsSync(src);
|
|
51
56
|
}
|
|
52
57
|
return new Promise((resolve) => {
|
|
53
|
-
|
|
58
|
+
node_fs_1.default.access(src, mode, (err) => {
|
|
54
59
|
if (err) {
|
|
55
60
|
return resolve(false);
|
|
56
61
|
}
|
|
@@ -61,10 +66,10 @@ class PoweredFileSystem {
|
|
|
61
66
|
stat(src, { sync = false } = {}) {
|
|
62
67
|
src = this.resolve(src);
|
|
63
68
|
if (sync) {
|
|
64
|
-
return
|
|
69
|
+
return node_fs_1.default.lstatSync(src);
|
|
65
70
|
}
|
|
66
71
|
return new Promise((resolve, reject) => {
|
|
67
|
-
|
|
72
|
+
node_fs_1.default.lstat(src, (err, stats) => {
|
|
68
73
|
if (err) {
|
|
69
74
|
return reject(err);
|
|
70
75
|
}
|
|
@@ -75,10 +80,10 @@ class PoweredFileSystem {
|
|
|
75
80
|
chmod(src, mode, { sync = false } = {}) {
|
|
76
81
|
src = this.resolve(src);
|
|
77
82
|
if (sync) {
|
|
78
|
-
return
|
|
83
|
+
return recurse_io_sync_1.default.chmod(src, mode);
|
|
79
84
|
}
|
|
80
85
|
return new Promise((resolve, reject) => {
|
|
81
|
-
|
|
86
|
+
recurse_io_1.default.chmod(src, mode, (err) => {
|
|
82
87
|
if (err) {
|
|
83
88
|
return reject(err);
|
|
84
89
|
}
|
|
@@ -89,10 +94,10 @@ class PoweredFileSystem {
|
|
|
89
94
|
chown(src, uid, gid, { sync = false } = {}) {
|
|
90
95
|
src = this.resolve(src);
|
|
91
96
|
if (sync) {
|
|
92
|
-
return
|
|
97
|
+
return recurse_io_sync_1.default.chown(src, uid, gid);
|
|
93
98
|
}
|
|
94
99
|
return new Promise((resolve, reject) => {
|
|
95
|
-
|
|
100
|
+
recurse_io_1.default.chown(src, uid, gid, (err) => {
|
|
96
101
|
if (err) {
|
|
97
102
|
return reject(err);
|
|
98
103
|
}
|
|
@@ -104,10 +109,10 @@ class PoweredFileSystem {
|
|
|
104
109
|
src = this.resolve(src);
|
|
105
110
|
use = this.resolve(use);
|
|
106
111
|
if (sync) {
|
|
107
|
-
return
|
|
112
|
+
return node_fs_1.default.symlinkSync(src, use);
|
|
108
113
|
}
|
|
109
114
|
return new Promise((resolve, reject) => {
|
|
110
|
-
|
|
115
|
+
node_fs_1.default.symlink(src, use, (err) => {
|
|
111
116
|
if (err) {
|
|
112
117
|
return reject(err);
|
|
113
118
|
}
|
|
@@ -119,10 +124,10 @@ class PoweredFileSystem {
|
|
|
119
124
|
src = this.resolve(src);
|
|
120
125
|
dir = this.resolve(dir);
|
|
121
126
|
if (sync) {
|
|
122
|
-
return
|
|
127
|
+
return recurse_io_sync_1.default.copy(src, dir, umask);
|
|
123
128
|
}
|
|
124
129
|
return new Promise((resolve, reject) => {
|
|
125
|
-
|
|
130
|
+
recurse_io_1.default.copy(src, dir, umask, (err) => {
|
|
126
131
|
if (err) {
|
|
127
132
|
return reject(err);
|
|
128
133
|
}
|
|
@@ -134,10 +139,10 @@ class PoweredFileSystem {
|
|
|
134
139
|
src = this.resolve(src);
|
|
135
140
|
use = this.resolve(use);
|
|
136
141
|
if (sync) {
|
|
137
|
-
return
|
|
142
|
+
return node_fs_1.default.renameSync(src, use);
|
|
138
143
|
}
|
|
139
144
|
return new Promise((resolve, reject) => {
|
|
140
|
-
|
|
145
|
+
node_fs_1.default.rename(src, use, (err) => {
|
|
141
146
|
if (err) {
|
|
142
147
|
return reject(err);
|
|
143
148
|
}
|
|
@@ -148,10 +153,10 @@ class PoweredFileSystem {
|
|
|
148
153
|
remove(src, { sync = false } = {}) {
|
|
149
154
|
src = this.resolve(src);
|
|
150
155
|
if (sync) {
|
|
151
|
-
return
|
|
156
|
+
return recurse_io_sync_1.default.remove(src);
|
|
152
157
|
}
|
|
153
158
|
return new Promise((resolve, reject) => {
|
|
154
|
-
|
|
159
|
+
recurse_io_1.default.remove(src, (err) => {
|
|
155
160
|
if (err) {
|
|
156
161
|
return reject(err);
|
|
157
162
|
}
|
|
@@ -162,13 +167,13 @@ class PoweredFileSystem {
|
|
|
162
167
|
read(src, { sync = false, encoding = 'utf8', flag = 'r' } = {}) {
|
|
163
168
|
src = this.resolve(src);
|
|
164
169
|
if (sync) {
|
|
165
|
-
return
|
|
170
|
+
return node_fs_1.default.readFileSync(src, {
|
|
166
171
|
encoding,
|
|
167
172
|
flag
|
|
168
173
|
});
|
|
169
174
|
}
|
|
170
175
|
return new Promise((resolve, reject) => {
|
|
171
|
-
|
|
176
|
+
node_fs_1.default.readFile(src, {
|
|
172
177
|
encoding,
|
|
173
178
|
flag
|
|
174
179
|
}, (err, raw) => {
|
|
@@ -183,14 +188,14 @@ class PoweredFileSystem {
|
|
|
183
188
|
src = this.resolve(src);
|
|
184
189
|
const mode = 0o666 - umask;
|
|
185
190
|
if (sync) {
|
|
186
|
-
return
|
|
191
|
+
return node_fs_1.default.writeFileSync(src, data, {
|
|
187
192
|
encoding,
|
|
188
193
|
mode,
|
|
189
194
|
flag
|
|
190
195
|
});
|
|
191
196
|
}
|
|
192
197
|
return new Promise((resolve, reject) => {
|
|
193
|
-
|
|
198
|
+
node_fs_1.default.writeFile(src, data, {
|
|
194
199
|
encoding,
|
|
195
200
|
mode,
|
|
196
201
|
flag
|
|
@@ -206,14 +211,14 @@ class PoweredFileSystem {
|
|
|
206
211
|
src = this.resolve(src);
|
|
207
212
|
const mode = 0o666 - umask;
|
|
208
213
|
if (sync) {
|
|
209
|
-
return
|
|
214
|
+
return node_fs_1.default.appendFileSync(src, data, {
|
|
210
215
|
encoding,
|
|
211
216
|
mode,
|
|
212
217
|
flag
|
|
213
218
|
});
|
|
214
219
|
}
|
|
215
220
|
return new Promise((resolve, reject) => {
|
|
216
|
-
|
|
221
|
+
node_fs_1.default.appendFile(src, data, {
|
|
217
222
|
encoding,
|
|
218
223
|
mode,
|
|
219
224
|
flag
|
|
@@ -228,12 +233,12 @@ class PoweredFileSystem {
|
|
|
228
233
|
readdir(dir, { sync = false, encoding = 'utf8' } = {}) {
|
|
229
234
|
dir = this.resolve(dir);
|
|
230
235
|
if (sync) {
|
|
231
|
-
return
|
|
236
|
+
return node_fs_1.default.readdirSync(dir, {
|
|
232
237
|
encoding
|
|
233
238
|
});
|
|
234
239
|
}
|
|
235
240
|
return new Promise((resolve, reject) => {
|
|
236
|
-
|
|
241
|
+
node_fs_1.default.readdir(dir, { encoding }, (err, list) => {
|
|
237
242
|
if (err) {
|
|
238
243
|
return reject(err);
|
|
239
244
|
}
|
|
@@ -244,10 +249,10 @@ class PoweredFileSystem {
|
|
|
244
249
|
mkdir(dir, { umask = 0o000, sync = false } = {}) {
|
|
245
250
|
dir = this.resolve(dir);
|
|
246
251
|
if (sync) {
|
|
247
|
-
return
|
|
252
|
+
return recurse_io_sync_1.default.mkdir(dir, umask);
|
|
248
253
|
}
|
|
249
254
|
return new Promise((resolve, reject) => {
|
|
250
|
-
|
|
255
|
+
recurse_io_1.default.mkdir(dir, umask, (err) => {
|
|
251
256
|
if (err) {
|
|
252
257
|
return reject(err);
|
|
253
258
|
}
|
|
@@ -256,5 +261,4 @@ class PoweredFileSystem {
|
|
|
256
261
|
});
|
|
257
262
|
}
|
|
258
263
|
}
|
|
259
|
-
|
|
260
264
|
exports.PoweredFileSystem = PoweredFileSystem;
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const { sep } =
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const { sep } = node_path_1.default;
|
|
9
9
|
function chmod(src, mode) {
|
|
10
|
-
const stat =
|
|
10
|
+
const stat = node_fs_1.default.statSync(src);
|
|
11
11
|
if (stat.isDirectory()) {
|
|
12
|
-
const list =
|
|
12
|
+
const list = node_fs_1.default.readdirSync(src);
|
|
13
13
|
for (const loc of list) {
|
|
14
14
|
chmod(`${src}${sep}${loc}`, mode);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
node_fs_1.default.chmodSync(src, mode);
|
|
18
18
|
}
|
|
19
19
|
function chown(src, uid, gid) {
|
|
20
|
-
const stat =
|
|
20
|
+
const stat = node_fs_1.default.statSync(src);
|
|
21
21
|
if (stat.isDirectory()) {
|
|
22
|
-
const list =
|
|
22
|
+
const list = node_fs_1.default.readdirSync(src);
|
|
23
23
|
for (const loc of list) {
|
|
24
24
|
chown(`${src}${sep}${loc}`, uid, gid);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
node_fs_1.default.chownSync(src, uid, gid);
|
|
28
28
|
}
|
|
29
29
|
function copy(src, dir, umask) {
|
|
30
|
-
const stat =
|
|
30
|
+
const stat = node_fs_1.default.statSync(src);
|
|
31
31
|
if (stat.isDirectory()) {
|
|
32
|
-
const list =
|
|
32
|
+
const list = node_fs_1.default.readdirSync(src);
|
|
33
33
|
const paths = src.split(sep);
|
|
34
34
|
const loc = paths[paths.length - 1];
|
|
35
35
|
const mode = 0o777 - umask;
|
|
36
36
|
dir = `${dir}${sep}${loc}`;
|
|
37
|
-
|
|
37
|
+
node_fs_1.default.mkdirSync(dir, mode);
|
|
38
38
|
for (const loc of list) {
|
|
39
39
|
copy(`${src}${sep}${loc}`, dir, umask);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
|
-
const loc =
|
|
43
|
+
const loc = node_path_1.default.basename(src);
|
|
44
44
|
const use = `${dir}${sep}${loc}`;
|
|
45
|
-
|
|
45
|
+
node_fs_1.default.copyFileSync(src, use);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
function remove(src) {
|
|
49
|
-
const stat =
|
|
49
|
+
const stat = node_fs_1.default.statSync(src);
|
|
50
50
|
if (stat.isDirectory()) {
|
|
51
|
-
const list =
|
|
51
|
+
const list = node_fs_1.default.readdirSync(src);
|
|
52
52
|
for (const loc of list) {
|
|
53
53
|
remove(`${src}${sep}${loc}`);
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
node_fs_1.default.rmdirSync(src);
|
|
56
56
|
}
|
|
57
57
|
else {
|
|
58
|
-
|
|
58
|
+
node_fs_1.default.unlinkSync(src);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
function mkdir(dir, umask) {
|
|
@@ -70,7 +70,7 @@ function mkdir(dir, umask) {
|
|
|
70
70
|
for (const loc of ways) {
|
|
71
71
|
use += `${sep}${loc}`;
|
|
72
72
|
try {
|
|
73
|
-
|
|
73
|
+
node_fs_1.default.mkdirSync(use, { mode });
|
|
74
74
|
}
|
|
75
75
|
catch (err) {
|
|
76
76
|
if (err.errno !== -17) {
|
|
@@ -79,12 +79,10 @@ function mkdir(dir, umask) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
exports.default = {
|
|
83
83
|
chmod,
|
|
84
84
|
chown,
|
|
85
85
|
copy,
|
|
86
86
|
remove,
|
|
87
87
|
mkdir
|
|
88
88
|
};
|
|
89
|
-
|
|
90
|
-
exports.default = recurseSync;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const { sep } =
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const { sep } = node_path_1.default;
|
|
9
9
|
function chmod(src, mode, callback) {
|
|
10
10
|
let reduce = 0;
|
|
11
|
-
|
|
11
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
12
12
|
if (err) {
|
|
13
13
|
return callback(err);
|
|
14
14
|
}
|
|
15
15
|
if (stat.isDirectory()) {
|
|
16
|
-
|
|
16
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
17
17
|
if (err) {
|
|
18
18
|
return callback(err);
|
|
19
19
|
}
|
|
20
20
|
if (list.length === 0) {
|
|
21
|
-
return
|
|
21
|
+
return node_fs_1.default.chmod(src, mode, callback);
|
|
22
22
|
}
|
|
23
23
|
reduce += list.length;
|
|
24
24
|
for (const loc of list) {
|
|
@@ -27,30 +27,30 @@ function chmod(src, mode, callback) {
|
|
|
27
27
|
return callback(err);
|
|
28
28
|
}
|
|
29
29
|
if (--reduce === 0) {
|
|
30
|
-
|
|
30
|
+
node_fs_1.default.chmod(src, mode, callback);
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
|
-
|
|
37
|
+
node_fs_1.default.chmod(src, mode, callback);
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
function chown(src, uid, gid, callback) {
|
|
42
42
|
let reduce = 0;
|
|
43
|
-
|
|
43
|
+
node_fs_1.default.stat(src, (err, stats) => {
|
|
44
44
|
if (err) {
|
|
45
45
|
return callback(err);
|
|
46
46
|
}
|
|
47
47
|
if (stats.isDirectory()) {
|
|
48
|
-
|
|
48
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
49
49
|
if (err) {
|
|
50
50
|
return callback(err);
|
|
51
51
|
}
|
|
52
52
|
if (list.length === 0) {
|
|
53
|
-
return
|
|
53
|
+
return node_fs_1.default.chown(src, uid, gid, callback);
|
|
54
54
|
}
|
|
55
55
|
reduce += list.length;
|
|
56
56
|
for (const loc of list) {
|
|
@@ -59,25 +59,25 @@ function chown(src, uid, gid, callback) {
|
|
|
59
59
|
return callback(err);
|
|
60
60
|
}
|
|
61
61
|
if (--reduce === 0) {
|
|
62
|
-
|
|
62
|
+
node_fs_1.default.chown(src, uid, gid, callback);
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
69
|
-
|
|
69
|
+
node_fs_1.default.chown(src, uid, gid, callback);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
function copy(src, dir, umask, callback) {
|
|
74
74
|
let reduce = 0;
|
|
75
|
-
|
|
75
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
76
76
|
if (err) {
|
|
77
77
|
return callback(err);
|
|
78
78
|
}
|
|
79
79
|
if (stat.isDirectory()) {
|
|
80
|
-
|
|
80
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
81
81
|
if (err) {
|
|
82
82
|
return callback(err);
|
|
83
83
|
}
|
|
@@ -86,7 +86,7 @@ function copy(src, dir, umask, callback) {
|
|
|
86
86
|
const loc = paths[paths.length - 1];
|
|
87
87
|
const mode = 0o777 - umask;
|
|
88
88
|
dir = `${dir}${sep}${loc}`;
|
|
89
|
-
|
|
89
|
+
node_fs_1.default.mkdir(dir, { mode }, (err) => {
|
|
90
90
|
if (err) {
|
|
91
91
|
return callback(err);
|
|
92
92
|
}
|
|
@@ -108,9 +108,9 @@ function copy(src, dir, umask, callback) {
|
|
|
108
108
|
}
|
|
109
109
|
else {
|
|
110
110
|
const mode = 0o666 - umask;
|
|
111
|
-
const loc =
|
|
112
|
-
const readStream =
|
|
113
|
-
const writeStream =
|
|
111
|
+
const loc = node_path_1.default.basename(src);
|
|
112
|
+
const readStream = node_fs_1.default.createReadStream(src);
|
|
113
|
+
const writeStream = node_fs_1.default.createWriteStream(`${dir}${sep}${loc}`, {
|
|
114
114
|
mode
|
|
115
115
|
});
|
|
116
116
|
readStream.on('error', callback);
|
|
@@ -123,18 +123,18 @@ function copy(src, dir, umask, callback) {
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
function remove(src, callback) {
|
|
126
|
-
|
|
126
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
127
127
|
if (err) {
|
|
128
128
|
return callback(err);
|
|
129
129
|
}
|
|
130
130
|
if (stat.isDirectory()) {
|
|
131
|
-
|
|
131
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
132
132
|
if (err) {
|
|
133
133
|
return callback(err);
|
|
134
134
|
}
|
|
135
135
|
let reduce = list.length;
|
|
136
136
|
if (reduce === 0) {
|
|
137
|
-
return
|
|
137
|
+
return node_fs_1.default.rmdir(src, callback);
|
|
138
138
|
}
|
|
139
139
|
for (const loc of list) {
|
|
140
140
|
remove(`${src}${sep}${loc}`, (err) => {
|
|
@@ -142,14 +142,14 @@ function remove(src, callback) {
|
|
|
142
142
|
return callback(err);
|
|
143
143
|
}
|
|
144
144
|
if (--reduce === 0) {
|
|
145
|
-
|
|
145
|
+
node_fs_1.default.rmdir(src, callback);
|
|
146
146
|
}
|
|
147
147
|
});
|
|
148
148
|
}
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
151
|
else {
|
|
152
|
-
|
|
152
|
+
node_fs_1.default.unlink(src, callback);
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
155
|
}
|
|
@@ -162,7 +162,7 @@ function mkdir(dir, umask, callback) {
|
|
|
162
162
|
const iter = yield;
|
|
163
163
|
for (const item of files) {
|
|
164
164
|
dir += `${sep}${item}`;
|
|
165
|
-
|
|
165
|
+
node_fs_1.default.mkdir(dir, { mode }, (err) => {
|
|
166
166
|
if (err && err.errno !== -17) {
|
|
167
167
|
return callback(err);
|
|
168
168
|
}
|
|
@@ -183,12 +183,10 @@ function mkdir(dir, umask, callback) {
|
|
|
183
183
|
iter.next();
|
|
184
184
|
iter.next(iter);
|
|
185
185
|
}
|
|
186
|
-
|
|
186
|
+
exports.default = {
|
|
187
187
|
chmod,
|
|
188
188
|
chown,
|
|
189
189
|
copy,
|
|
190
190
|
remove,
|
|
191
191
|
mkdir
|
|
192
192
|
};
|
|
193
|
-
|
|
194
|
-
exports.default = recurse;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.restore = exports.fmock = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
function fmock(frame) {
|
|
10
|
+
for (const src of Object.keys(frame)) {
|
|
11
|
+
const { dir } = node_path_1.default.parse(src);
|
|
12
|
+
const value = frame[src];
|
|
13
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
14
|
+
if (value.type === 'directory') {
|
|
15
|
+
node_fs_1.default.mkdirSync(src);
|
|
16
|
+
}
|
|
17
|
+
if (value.type === 'file') {
|
|
18
|
+
node_fs_1.default.writeFileSync(src, value.data);
|
|
19
|
+
}
|
|
20
|
+
if (value.type === 'symlink') {
|
|
21
|
+
node_fs_1.default.symlinkSync(value.target, src);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.fmock = fmock;
|
|
26
|
+
function restore(tmpDir) {
|
|
27
|
+
const removeRecursive = (src) => {
|
|
28
|
+
if (node_fs_1.default.existsSync(src)) {
|
|
29
|
+
node_fs_1.default.readdirSync(src).forEach((item) => {
|
|
30
|
+
const curl = `${src}/${item}`;
|
|
31
|
+
node_fs_1.default.lstatSync(curl).isDirectory()
|
|
32
|
+
? removeRecursive(curl)
|
|
33
|
+
: node_fs_1.default.unlinkSync(curl);
|
|
34
|
+
});
|
|
35
|
+
node_fs_1.default.rmdirSync(src);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
removeRecursive(tmpDir);
|
|
39
|
+
}
|
|
40
|
+
exports.restore = restore;
|