@ostro/filesystem 1.0.4 → 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 +388 -193
- 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,279 +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
|
-
|
|
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
|
+
*/
|
|
139
289
|
async glob($pattern) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
+
*/
|
|
145
308
|
requireOnce($path, $data = []) {
|
|
146
309
|
return this.isFile($path).then($exists => {
|
|
147
|
-
|
|
148
310
|
if ($exists) {
|
|
149
311
|
return require($path);
|
|
150
|
-
|
|
151
|
-
} else {
|
|
152
|
-
throw new FileNotFoundException("File does not exist at path {$path}.");
|
|
153
|
-
|
|
154
312
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
313
|
+
else {
|
|
314
|
+
throw new fileNotFoundException_1.default("File does not exist at path {$path}.");
|
|
315
|
+
}
|
|
316
|
+
});
|
|
158
317
|
}
|
|
159
|
-
|
|
318
|
+
/**
|
|
319
|
+
* files method.
|
|
320
|
+
*
|
|
321
|
+
* @param $directory - Directory path.
|
|
322
|
+
* @param $hidden - Whether to ignore hidden.
|
|
323
|
+
* @returns List of file paths.
|
|
324
|
+
*/
|
|
160
325
|
files($directory, $hidden = false) {
|
|
161
|
-
let inst = Finder.create().path($directory)
|
|
326
|
+
let inst = Finder.create().path($directory);
|
|
162
327
|
if ($hidden) {
|
|
163
|
-
inst.ignoreHiddenDirectories()
|
|
328
|
+
inst.ignoreHiddenDirectories();
|
|
164
329
|
}
|
|
165
|
-
return inst.depth(0).find()
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
+
*/
|
|
169
339
|
allFiles($directory, $hidden = false) {
|
|
170
|
-
let inst = Finder.create().path($directory)
|
|
340
|
+
let inst = Finder.create().path($directory);
|
|
171
341
|
if ($hidden) {
|
|
172
|
-
inst.ignoreHiddenDirectories()
|
|
342
|
+
inst.ignoreHiddenDirectories();
|
|
173
343
|
}
|
|
174
|
-
return inst.find()
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
344
|
+
return inst.find();
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* directories method.
|
|
348
|
+
*
|
|
349
|
+
* @param $directory - Directory path.
|
|
350
|
+
* @returns List of directories.
|
|
351
|
+
*/
|
|
178
352
|
directories($directory) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
+
*/
|
|
184
363
|
ensureDirectoryExists($path, $mode = 0o755, $recursive = true) {
|
|
185
|
-
return
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
+
*/
|
|
189
375
|
makeDirectory($path, $mode = 0o755, $recursive = false, $force = false) {
|
|
190
|
-
return
|
|
376
|
+
return fs_extra_1.default.mkdir($path, {
|
|
191
377
|
mode: $mode,
|
|
192
378
|
recursive: $recursive
|
|
193
379
|
});
|
|
194
|
-
|
|
195
380
|
}
|
|
196
|
-
|
|
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
|
+
*/
|
|
197
389
|
async moveDirectory($from, $to, $overwrite = false) {
|
|
198
390
|
if ($overwrite && await this.isDirectory($to) && !await this.deleteDirectory($to)) {
|
|
199
391
|
return false;
|
|
200
392
|
}
|
|
201
|
-
|
|
202
|
-
|
|
393
|
+
try {
|
|
394
|
+
await fs_extra_1.default.rename($from, $to);
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
catch (e) {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
203
400
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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)) {
|
|
207
411
|
return false;
|
|
208
412
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
for (let $item of $items) {
|
|
217
|
-
$item = await fs.stat();
|
|
218
|
-
|
|
219
|
-
$target = path.join($destination, $item.getBasename())
|
|
220
|
-
|
|
221
|
-
if ($item.isDirectory()) {
|
|
222
|
-
$path = $item.getPathname();
|
|
223
|
-
|
|
224
|
-
if (!await this.copyDirectory($path, $target, $options)) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
} else {
|
|
228
|
-
if (!await this.copy($item.getPathname(), $target)) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
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;
|
|
232
420
|
}
|
|
233
|
-
|
|
234
|
-
return true;
|
|
235
421
|
}
|
|
236
|
-
|
|
422
|
+
/**
|
|
423
|
+
* deleteDirectory method.
|
|
424
|
+
*
|
|
425
|
+
* @param $directory - Directory path.
|
|
426
|
+
* @param $preserve - Preserve directory flag.
|
|
427
|
+
* @returns Boolean success.
|
|
428
|
+
*/
|
|
237
429
|
async deleteDirectory($directory, $preserve = false) {
|
|
238
430
|
if (!await this.isDirectory($directory)) {
|
|
239
431
|
return false;
|
|
240
432
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
for (let $item of $items) {
|
|
245
|
-
$item = await fs.stat();
|
|
246
|
-
|
|
247
|
-
if ($item.isDirectory() && !$item.isSymbolicLink()) {
|
|
248
|
-
await this.deleteDirectory($item.getPathname());
|
|
249
|
-
} else {
|
|
250
|
-
await this.delete($item.getPathname());
|
|
251
|
-
}
|
|
433
|
+
if ($preserve) {
|
|
434
|
+
await fs_extra_1.default.emptyDir($directory);
|
|
252
435
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
await this.delete($directory, true);
|
|
436
|
+
else {
|
|
437
|
+
await fs_extra_1.default.remove($directory);
|
|
256
438
|
}
|
|
257
|
-
|
|
258
439
|
return true;
|
|
259
440
|
}
|
|
260
|
-
|
|
441
|
+
/**
|
|
442
|
+
* deleteDirectories method.
|
|
443
|
+
*
|
|
444
|
+
* @param $directory - Directory path.
|
|
445
|
+
* @returns Boolean success.
|
|
446
|
+
*/
|
|
261
447
|
async deleteDirectories($directory) {
|
|
262
|
-
$allDirectories = await this.directories($directory);
|
|
263
|
-
|
|
264
|
-
if (!empty($allDirectories)) {
|
|
448
|
+
let $allDirectories = await this.directories($directory);
|
|
449
|
+
if ($allDirectories && $allDirectories.length > 0) {
|
|
265
450
|
for (let $directoryName of $allDirectories) {
|
|
266
451
|
await this.deleteDirectory($directoryName);
|
|
267
452
|
}
|
|
268
|
-
|
|
269
453
|
return true;
|
|
270
454
|
}
|
|
271
|
-
|
|
272
455
|
return false;
|
|
273
456
|
}
|
|
274
|
-
|
|
457
|
+
/**
|
|
458
|
+
* cleanDirectory method.
|
|
459
|
+
*
|
|
460
|
+
* @param $directory - Directory path.
|
|
461
|
+
* @returns Boolean success.
|
|
462
|
+
*/
|
|
275
463
|
cleanDirectory($directory) {
|
|
276
464
|
return this.deleteDirectory($directory, true);
|
|
277
465
|
}
|
|
278
466
|
}
|
|
279
|
-
|
|
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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"}
|