@ostro/filesystem 1.0.3 → 2.0.0-alpha.1
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/adapter/CoreAdapter.d.ts +139 -0
- package/adapter/CoreAdapter.d.ts.map +1 -0
- package/adapter/CoreAdapter.js +164 -57
- package/adapter/CoreAdapter.js.map +1 -0
- package/adapter/azure.d.ts +36 -0
- package/adapter/azure.d.ts.map +1 -0
- package/adapter/azure.js +93 -56
- package/adapter/azure.js.map +1 -0
- package/adapter/local.d.ts +78 -0
- package/adapter/local.d.ts.map +1 -0
- package/adapter/local.js +136 -66
- package/adapter/local.js.map +1 -0
- package/adapter/s3.d.ts +36 -0
- package/adapter/s3.d.ts.map +1 -0
- package/adapter/s3.js +102 -70
- package/adapter/s3.js.map +1 -0
- package/callbackHandler.d.ts +69 -0
- package/callbackHandler.d.ts.map +1 -0
- package/callbackHandler.js +93 -23
- package/callbackHandler.js.map +1 -0
- package/clients/azure.d.ts +32 -0
- package/clients/azure.d.ts.map +1 -0
- package/clients/azure.js +43 -13
- package/clients/azure.js.map +1 -0
- package/clients/s3.d.ts +27 -0
- package/clients/s3.d.ts.map +1 -0
- package/clients/s3.js +40 -9
- package/clients/s3.js.map +1 -0
- package/directoryCreateException.d.ts +18 -0
- package/directoryCreateException.d.ts.map +1 -0
- package/directoryCreateException.js +27 -5
- package/directoryCreateException.js.map +1 -0
- package/fileDeleteException.d.ts +19 -0
- package/fileDeleteException.d.ts.map +1 -0
- package/fileDeleteException.js +28 -4
- package/fileDeleteException.js.map +1 -0
- package/fileNotFoundException.d.ts +18 -0
- package/fileNotFoundException.d.ts.map +1 -0
- package/fileNotFoundException.js +27 -5
- package/fileNotFoundException.js.map +1 -0
- package/fileUploadException.d.ts +18 -0
- package/fileUploadException.d.ts.map +1 -0
- package/fileUploadException.js +28 -5
- package/fileUploadException.js.map +1 -0
- package/filesystem.d.ts +300 -0
- package/filesystem.d.ts.map +1 -0
- package/filesystem.js +389 -192
- package/filesystem.js.map +1 -0
- package/filesystemAdapter.d.ts +91 -0
- package/filesystemAdapter.d.ts.map +1 -0
- package/filesystemAdapter.js +134 -52
- package/filesystemAdapter.js.map +1 -0
- package/filesystemManager.d.ts +94 -0
- package/filesystemManager.d.ts.map +1 -0
- package/filesystemManager.js +141 -57
- package/filesystemManager.js.map +1 -0
- package/filesystemServiceProvider.d.ts +40 -0
- package/filesystemServiceProvider.d.ts.map +1 -0
- package/filesystemServiceProvider.js +49 -21
- package/filesystemServiceProvider.js.map +1 -0
- package/invalidArgumentException.d.ts +17 -0
- package/invalidArgumentException.d.ts.map +1 -0
- package/invalidArgumentException.js +26 -4
- package/invalidArgumentException.js.map +1 -0
- package/package.json +24 -10
- package/.github/workflows/npm-publish.yml +0 -22
package/filesystem.js
CHANGED
|
@@ -1,277 +1,474 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
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 filesystem_1 = __importDefault(require("@ostro/contracts/filesystem/filesystem"));
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const Finder = require('filehound');
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fileNotFoundException_1 = __importDefault(require("./fileNotFoundException"));
|
|
11
|
+
/**
|
|
12
|
+
* Class Filesystem.
|
|
13
|
+
*/
|
|
14
|
+
class Filesystem extends filesystem_1.default {
|
|
15
|
+
/**
|
|
16
|
+
* exists method.
|
|
17
|
+
*
|
|
18
|
+
* @param $path - File path to check.
|
|
19
|
+
* @returns Promise resolving to boolean.
|
|
20
|
+
*/
|
|
11
21
|
exists($path) {
|
|
12
|
-
return
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
return fs_extra_1.default.access($path).then(() => true).catch(() => Promise.resolve(false));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* missing method.
|
|
26
|
+
*
|
|
27
|
+
* @param $path - File path to check.
|
|
28
|
+
* @returns Promise resolving to boolean.
|
|
29
|
+
*/
|
|
30
|
+
async missing($path) {
|
|
31
|
+
return !(await this.exists($path));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* get method.
|
|
35
|
+
*
|
|
36
|
+
* @param $path - File path to read.
|
|
37
|
+
* @returns Promise resolving to file content string.
|
|
38
|
+
*/
|
|
19
39
|
get($path) {
|
|
20
|
-
return
|
|
21
|
-
throw new
|
|
22
|
-
})
|
|
23
|
-
|
|
40
|
+
return fs_extra_1.default.readFile($path, 'utf8').catch(() => {
|
|
41
|
+
throw new fileNotFoundException_1.default(`File does not exist at path ${$path}.`);
|
|
42
|
+
});
|
|
24
43
|
}
|
|
25
|
-
|
|
44
|
+
/**
|
|
45
|
+
* put method.
|
|
46
|
+
*
|
|
47
|
+
* @param $path - File path to write.
|
|
48
|
+
* @param $contents - Contents to write.
|
|
49
|
+
* @returns Promise resolving on completion.
|
|
50
|
+
*/
|
|
26
51
|
put($path, $contents) {
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
52
|
+
return fs_extra_1.default.writeFile($path, $contents);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* replaceInFile method.
|
|
56
|
+
*
|
|
57
|
+
* @param $search - Search string or RegExp.
|
|
58
|
+
* @param $replace - Replacement string.
|
|
59
|
+
* @param $path - File path.
|
|
60
|
+
* @returns Promise resolving on completion.
|
|
61
|
+
*/
|
|
30
62
|
replaceInFile($search, $replace, $path) {
|
|
31
|
-
this.get($path).then(content => this.put($path, content.replace($search, $replace)));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
63
|
+
return this.get($path).then(content => this.put($path, content.replace($search, $replace)));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* prepend method.
|
|
67
|
+
*
|
|
68
|
+
* @param $path - File path.
|
|
69
|
+
* @param $data - Data to prepend.
|
|
70
|
+
* @returns Promise resolving on completion.
|
|
71
|
+
*/
|
|
72
|
+
async prepend($path, $data) {
|
|
73
|
+
if (await this.exists($path)) {
|
|
74
|
+
const existing = await this.get($path);
|
|
75
|
+
return this.put($path, $data + existing);
|
|
76
|
+
}
|
|
77
|
+
return this.put($path, $data);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* append method.
|
|
81
|
+
*
|
|
82
|
+
* @param $path - File path.
|
|
83
|
+
* @param $data - Data to append.
|
|
84
|
+
* @returns Promise resolving on completion.
|
|
85
|
+
*/
|
|
38
86
|
append($path, $data) {
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
|
|
87
|
+
return fs_extra_1.default.appendFile($path, $data);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* chmod method.
|
|
91
|
+
*
|
|
92
|
+
* @param $path - File path.
|
|
93
|
+
* @param $mode - Mode number.
|
|
94
|
+
* @returns Promise resolving to mode or void.
|
|
95
|
+
*/
|
|
42
96
|
chmod($path, $mode = null) {
|
|
43
97
|
if ($mode) {
|
|
44
|
-
return
|
|
98
|
+
return fs_extra_1.default.chmod($path, $mode);
|
|
45
99
|
}
|
|
46
|
-
return
|
|
47
|
-
return
|
|
100
|
+
return fs_extra_1.default.stat($path).then(stat => {
|
|
101
|
+
return stat.mode;
|
|
48
102
|
});
|
|
49
|
-
|
|
50
103
|
}
|
|
51
|
-
|
|
104
|
+
/**
|
|
105
|
+
* delete method.
|
|
106
|
+
*
|
|
107
|
+
* @param $paths - Path or array of paths to delete.
|
|
108
|
+
* @returns Promise resolving to boolean success.
|
|
109
|
+
*/
|
|
52
110
|
async delete($paths) {
|
|
53
111
|
$paths = Array.isArray($paths) ? $paths : arguments;
|
|
54
|
-
|
|
55
112
|
let $success = true;
|
|
56
|
-
|
|
57
113
|
for (let $path of $paths) {
|
|
58
114
|
try {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
} catch ($e) {
|
|
115
|
+
await fs_extra_1.default.remove($path);
|
|
116
|
+
}
|
|
117
|
+
catch ($e) {
|
|
63
118
|
$success = false;
|
|
64
119
|
}
|
|
65
120
|
}
|
|
66
|
-
|
|
67
121
|
return $success;
|
|
68
122
|
}
|
|
69
|
-
|
|
123
|
+
/**
|
|
124
|
+
* move method.
|
|
125
|
+
*
|
|
126
|
+
* @param $path - Source path.
|
|
127
|
+
* @param $target - Destination path.
|
|
128
|
+
* @returns Promise resolving on completion.
|
|
129
|
+
*/
|
|
70
130
|
move($path, $target) {
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
|
|
131
|
+
return fs_extra_1.default.move($path, $target);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* copy method.
|
|
135
|
+
*
|
|
136
|
+
* @param $path - Source path.
|
|
137
|
+
* @param $target - Destination path.
|
|
138
|
+
* @returns Promise resolving on completion.
|
|
139
|
+
*/
|
|
74
140
|
copy($path, $target) {
|
|
75
|
-
return
|
|
76
|
-
}
|
|
77
|
-
|
|
141
|
+
return fs_extra_1.default.copy($path, $target);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* link method.
|
|
145
|
+
*
|
|
146
|
+
* @param $target - Target path.
|
|
147
|
+
* @param $link - Symlink path.
|
|
148
|
+
* @param $force - Force flag.
|
|
149
|
+
* @returns Promise resolving on completion.
|
|
150
|
+
*/
|
|
78
151
|
link($target, $link, $force = false) {
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
152
|
+
return fs_extra_1.default.symlink($target, $link, 'junction');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* relativeLink method.
|
|
156
|
+
*
|
|
157
|
+
* @param $target - Target path.
|
|
158
|
+
* @param $link - Symlink path.
|
|
159
|
+
* @param $force - Force flag.
|
|
160
|
+
* @returns Promise resolving on completion.
|
|
161
|
+
*/
|
|
162
|
+
relativeLink($target, $link, $force = false) {
|
|
163
|
+
let relTarget = path_1.default.relative(path_1.default.dirname($link), $target);
|
|
164
|
+
return this.link(relTarget, $link, $force);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* name method.
|
|
168
|
+
*
|
|
169
|
+
* @param $path - File path.
|
|
170
|
+
* @returns File name without extension.
|
|
171
|
+
*/
|
|
87
172
|
name($path) {
|
|
88
|
-
return
|
|
89
|
-
}
|
|
90
|
-
|
|
173
|
+
return path_1.default.parse($path).name;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* basename method.
|
|
177
|
+
*
|
|
178
|
+
* @param $path - File path.
|
|
179
|
+
* @returns Base filename with extension.
|
|
180
|
+
*/
|
|
91
181
|
basename($path) {
|
|
92
|
-
return
|
|
93
|
-
}
|
|
94
|
-
|
|
182
|
+
return path_1.default.basename($path);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* dirname method.
|
|
186
|
+
*
|
|
187
|
+
* @param $path - File path.
|
|
188
|
+
* @returns Directory path.
|
|
189
|
+
*/
|
|
95
190
|
dirname($path) {
|
|
96
|
-
return
|
|
97
|
-
}
|
|
98
|
-
|
|
191
|
+
return path_1.default.dirname($path);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* extension method.
|
|
195
|
+
*
|
|
196
|
+
* @param $path - File path.
|
|
197
|
+
* @returns File extension without leading dot.
|
|
198
|
+
*/
|
|
99
199
|
extension($path) {
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
|
|
200
|
+
return path_1.default.extname($path).replace(/^\./, '');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* guessExtension method.
|
|
204
|
+
*
|
|
205
|
+
* @param $path - File path.
|
|
206
|
+
* @returns Extension with dot.
|
|
207
|
+
*/
|
|
103
208
|
guessExtension($path) {
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
|
|
209
|
+
return path_1.default.extname($path);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* type method.
|
|
213
|
+
*
|
|
214
|
+
* @param $path - Path to check.
|
|
215
|
+
* @returns 'dir' or 'file'.
|
|
216
|
+
*/
|
|
107
217
|
type($path) {
|
|
108
|
-
return
|
|
109
|
-
}
|
|
110
|
-
|
|
218
|
+
return fs_extra_1.default.lstat($path).then(stats => stats.isDirectory() ? 'dir' : 'file').catch(() => 'file');
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* mimeType method.
|
|
222
|
+
*
|
|
223
|
+
* @param $path - File path.
|
|
224
|
+
* @returns Extension as mime identifier.
|
|
225
|
+
*/
|
|
111
226
|
mimeType($path) {
|
|
112
|
-
return
|
|
113
|
-
}
|
|
114
|
-
|
|
227
|
+
return path_1.default.extname($path).replace(/^\./, '');
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* size method.
|
|
231
|
+
*
|
|
232
|
+
* @param $path - File path.
|
|
233
|
+
* @returns Size in bytes.
|
|
234
|
+
*/
|
|
115
235
|
size($path) {
|
|
116
|
-
return
|
|
117
|
-
}
|
|
118
|
-
|
|
236
|
+
return fs_extra_1.default.stat($path).then(stats => stats.size);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* lastModified method.
|
|
240
|
+
*
|
|
241
|
+
* @param $path - File path.
|
|
242
|
+
* @returns Last modified timestamp in seconds.
|
|
243
|
+
*/
|
|
119
244
|
lastModified($path) {
|
|
120
|
-
return
|
|
121
|
-
}
|
|
122
|
-
|
|
245
|
+
return fs_extra_1.default.stat($path).then(stats => Math.floor(stats.mtimeMs / 1000));
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* isDirectory method.
|
|
249
|
+
*
|
|
250
|
+
* @param $directory - Directory path.
|
|
251
|
+
* @returns Boolean indicating if directory.
|
|
252
|
+
*/
|
|
123
253
|
isDirectory($directory) {
|
|
124
|
-
return
|
|
125
|
-
}
|
|
126
|
-
|
|
254
|
+
return fs_extra_1.default.lstat($directory).then(stats => stats.isDirectory()).catch(() => false);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* isReadable method.
|
|
258
|
+
*
|
|
259
|
+
* @param $path - Path to check.
|
|
260
|
+
* @returns Boolean indicating if readable.
|
|
261
|
+
*/
|
|
127
262
|
isReadable($path) {
|
|
128
|
-
return
|
|
129
|
-
}
|
|
130
|
-
|
|
263
|
+
return fs_extra_1.default.access($path, fs_extra_1.default.constants.R_OK).then(() => true).catch(() => false);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* isWritable method.
|
|
267
|
+
*
|
|
268
|
+
* @param $path - Path to check.
|
|
269
|
+
* @returns Boolean indicating if writable.
|
|
270
|
+
*/
|
|
131
271
|
isWritable($path) {
|
|
132
|
-
return
|
|
133
|
-
}
|
|
134
|
-
|
|
272
|
+
return fs_extra_1.default.access($path, fs_extra_1.default.constants.W_OK).then(() => true).catch(() => false);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* isFile method.
|
|
276
|
+
*
|
|
277
|
+
* @param $file - Path to check.
|
|
278
|
+
* @returns Boolean indicating if regular file.
|
|
279
|
+
*/
|
|
135
280
|
isFile($file) {
|
|
136
|
-
return
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
281
|
+
return fs_extra_1.default.lstat($file).then(stats => stats.isFile()).catch(() => false);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* glob method.
|
|
285
|
+
*
|
|
286
|
+
* @param $pattern - Pattern to match.
|
|
287
|
+
* @returns Matching file paths.
|
|
288
|
+
*/
|
|
289
|
+
async glob($pattern) {
|
|
290
|
+
if (!$pattern || $pattern === '.') {
|
|
291
|
+
return [];
|
|
292
|
+
}
|
|
293
|
+
const dir = path_1.default.dirname($pattern);
|
|
294
|
+
const base = path_1.default.basename($pattern);
|
|
295
|
+
let globPattern = '*';
|
|
296
|
+
if (base && base !== '.') {
|
|
297
|
+
globPattern = base;
|
|
298
|
+
}
|
|
299
|
+
return Finder.create().path(dir || '.').glob(globPattern).find();
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* requireOnce method.
|
|
303
|
+
*
|
|
304
|
+
* @param $path - Module path to require.
|
|
305
|
+
* @param $data - Additional data.
|
|
306
|
+
* @returns Required module export.
|
|
307
|
+
*/
|
|
143
308
|
requireOnce($path, $data = []) {
|
|
144
309
|
return this.isFile($path).then($exists => {
|
|
145
|
-
|
|
146
310
|
if ($exists) {
|
|
147
311
|
return require($path);
|
|
148
|
-
|
|
149
|
-
} else {
|
|
150
|
-
throw new FileNotFoundException("File does not exist at path {$path}.");
|
|
151
|
-
|
|
152
312
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
313
|
+
else {
|
|
314
|
+
throw new fileNotFoundException_1.default("File does not exist at path {$path}.");
|
|
315
|
+
}
|
|
316
|
+
});
|
|
156
317
|
}
|
|
157
|
-
|
|
318
|
+
/**
|
|
319
|
+
* files method.
|
|
320
|
+
*
|
|
321
|
+
* @param $directory - Directory path.
|
|
322
|
+
* @param $hidden - Whether to ignore hidden.
|
|
323
|
+
* @returns List of file paths.
|
|
324
|
+
*/
|
|
158
325
|
files($directory, $hidden = false) {
|
|
159
|
-
let inst = Finder.create().path($directory)
|
|
326
|
+
let inst = Finder.create().path($directory);
|
|
160
327
|
if ($hidden) {
|
|
161
|
-
inst.ignoreHiddenDirectories()
|
|
328
|
+
inst.ignoreHiddenDirectories();
|
|
162
329
|
}
|
|
163
|
-
return inst.depth(0).find()
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
330
|
+
return inst.depth(0).find();
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* allFiles method.
|
|
334
|
+
*
|
|
335
|
+
* @param $directory - Directory path.
|
|
336
|
+
* @param $hidden - Whether to ignore hidden.
|
|
337
|
+
* @returns List of all recursive file paths.
|
|
338
|
+
*/
|
|
167
339
|
allFiles($directory, $hidden = false) {
|
|
168
|
-
let inst = Finder.create().path($directory)
|
|
340
|
+
let inst = Finder.create().path($directory);
|
|
169
341
|
if ($hidden) {
|
|
170
|
-
inst.ignoreHiddenDirectories()
|
|
342
|
+
inst.ignoreHiddenDirectories();
|
|
171
343
|
}
|
|
172
|
-
return inst.find()
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
344
|
+
return inst.find();
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* directories method.
|
|
348
|
+
*
|
|
349
|
+
* @param $directory - Directory path.
|
|
350
|
+
* @returns List of directories.
|
|
351
|
+
*/
|
|
176
352
|
directories($directory) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
353
|
+
return Finder.create().path($directory).directory().depth(1).find();
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* ensureDirectoryExists method.
|
|
357
|
+
*
|
|
358
|
+
* @param $path - Directory path.
|
|
359
|
+
* @param $mode - Directory mode permissions.
|
|
360
|
+
* @param $recursive - Recursive creation flag.
|
|
361
|
+
* @returns Boolean success.
|
|
362
|
+
*/
|
|
182
363
|
ensureDirectoryExists($path, $mode = 0o755, $recursive = true) {
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
364
|
+
return fs_extra_1.default.ensureDir($path, $mode).then(() => true).catch(() => false);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* makeDirectory method.
|
|
368
|
+
*
|
|
369
|
+
* @param $path - Directory path.
|
|
370
|
+
* @param $mode - Permissions mode.
|
|
371
|
+
* @param $recursive - Recursive flag.
|
|
372
|
+
* @param $force - Force flag.
|
|
373
|
+
* @returns Result of mkdir.
|
|
374
|
+
*/
|
|
187
375
|
makeDirectory($path, $mode = 0o755, $recursive = false, $force = false) {
|
|
188
|
-
return
|
|
376
|
+
return fs_extra_1.default.mkdir($path, {
|
|
189
377
|
mode: $mode,
|
|
190
378
|
recursive: $recursive
|
|
191
379
|
});
|
|
192
|
-
|
|
193
380
|
}
|
|
194
|
-
|
|
381
|
+
/**
|
|
382
|
+
* moveDirectory method.
|
|
383
|
+
*
|
|
384
|
+
* @param $from - Source directory.
|
|
385
|
+
* @param $to - Destination directory.
|
|
386
|
+
* @param $overwrite - Overwrite flag.
|
|
387
|
+
* @returns Boolean success.
|
|
388
|
+
*/
|
|
195
389
|
async moveDirectory($from, $to, $overwrite = false) {
|
|
196
390
|
if ($overwrite && await this.isDirectory($to) && !await this.deleteDirectory($to)) {
|
|
197
391
|
return false;
|
|
198
392
|
}
|
|
199
|
-
|
|
200
|
-
|
|
393
|
+
try {
|
|
394
|
+
await fs_extra_1.default.rename($from, $to);
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
catch (e) {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
201
400
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
401
|
+
/**
|
|
402
|
+
* copyDirectory method.
|
|
403
|
+
*
|
|
404
|
+
* @param $directory - Source directory.
|
|
405
|
+
* @param $destination - Destination directory.
|
|
406
|
+
* @param $options - Copy options.
|
|
407
|
+
* @returns Boolean success.
|
|
408
|
+
*/
|
|
409
|
+
async copyDirectory($directory, $destination, $options = {}) {
|
|
410
|
+
if (!await this.isDirectory($directory)) {
|
|
205
411
|
return false;
|
|
206
412
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
for (let $item of $items) {
|
|
215
|
-
$item = await fs.stat();
|
|
216
|
-
|
|
217
|
-
$target = path.join($destination, $item.getBasename())
|
|
218
|
-
|
|
219
|
-
if ($item.isDirectory()) {
|
|
220
|
-
$path = $item.getPathname();
|
|
221
|
-
|
|
222
|
-
if (!await this.copyDirectory($path, $target, $options)) {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
} else {
|
|
226
|
-
if (!await this.copy($item.getPathname(), $target)) {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
413
|
+
await this.ensureDirectoryExists($destination);
|
|
414
|
+
try {
|
|
415
|
+
await fs_extra_1.default.copy($directory, $destination, $options);
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
catch (e) {
|
|
419
|
+
return false;
|
|
230
420
|
}
|
|
231
|
-
|
|
232
|
-
return true;
|
|
233
421
|
}
|
|
234
|
-
|
|
422
|
+
/**
|
|
423
|
+
* deleteDirectory method.
|
|
424
|
+
*
|
|
425
|
+
* @param $directory - Directory path.
|
|
426
|
+
* @param $preserve - Preserve directory flag.
|
|
427
|
+
* @returns Boolean success.
|
|
428
|
+
*/
|
|
235
429
|
async deleteDirectory($directory, $preserve = false) {
|
|
236
430
|
if (!await this.isDirectory($directory)) {
|
|
237
431
|
return false;
|
|
238
432
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
for (let $item of $items) {
|
|
243
|
-
$item = await fs.stat();
|
|
244
|
-
|
|
245
|
-
if ($item.isDirectory() && !$item.isSymbolicLink()) {
|
|
246
|
-
await this.deleteDirectory($item.getPathname());
|
|
247
|
-
} else {
|
|
248
|
-
await this.delete($item.getPathname());
|
|
249
|
-
}
|
|
433
|
+
if ($preserve) {
|
|
434
|
+
await fs_extra_1.default.emptyDir($directory);
|
|
250
435
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
await this.delete($directory, true);
|
|
436
|
+
else {
|
|
437
|
+
await fs_extra_1.default.remove($directory);
|
|
254
438
|
}
|
|
255
|
-
|
|
256
439
|
return true;
|
|
257
440
|
}
|
|
258
|
-
|
|
441
|
+
/**
|
|
442
|
+
* deleteDirectories method.
|
|
443
|
+
*
|
|
444
|
+
* @param $directory - Directory path.
|
|
445
|
+
* @returns Boolean success.
|
|
446
|
+
*/
|
|
259
447
|
async deleteDirectories($directory) {
|
|
260
|
-
$allDirectories = await this.directories($directory);
|
|
261
|
-
|
|
262
|
-
if (!empty($allDirectories)) {
|
|
448
|
+
let $allDirectories = await this.directories($directory);
|
|
449
|
+
if ($allDirectories && $allDirectories.length > 0) {
|
|
263
450
|
for (let $directoryName of $allDirectories) {
|
|
264
451
|
await this.deleteDirectory($directoryName);
|
|
265
452
|
}
|
|
266
|
-
|
|
267
453
|
return true;
|
|
268
454
|
}
|
|
269
|
-
|
|
270
455
|
return false;
|
|
271
456
|
}
|
|
272
|
-
|
|
457
|
+
/**
|
|
458
|
+
* cleanDirectory method.
|
|
459
|
+
*
|
|
460
|
+
* @param $directory - Directory path.
|
|
461
|
+
* @returns Boolean success.
|
|
462
|
+
*/
|
|
273
463
|
cleanDirectory($directory) {
|
|
274
464
|
return this.deleteDirectory($directory, true);
|
|
275
465
|
}
|
|
276
466
|
}
|
|
277
|
-
|
|
467
|
+
exports.default = Filesystem;
|
|
468
|
+
//# sourceMappingURL=filesystem.js.map
|
|
469
|
+
if (exports.default) {
|
|
470
|
+
const d = exports.default;
|
|
471
|
+
module.exports = d;
|
|
472
|
+
Object.assign(module.exports, exports);
|
|
473
|
+
module.exports.default = d;
|
|
474
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
|