necessary 11.9.3 → 11.10.2

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/README.md CHANGED
@@ -52,12 +52,24 @@ const { first, last } = arrayUtilities,
52
52
 
53
53
  ...
54
54
  ```
55
+
56
+ Or the `require()` function can be used where appropriate:
57
+
58
+ ```
59
+ const { arrayUtilities, asynchronousUtilities, fileSystemUtilities } = require("necessary");
60
+
61
+ const { first, last } = arrayUtilities,
62
+ { isDirectory } = fileSystemUtilities;
63
+
64
+ ...
65
+ ```
66
+
55
67
  The miscellaneous functions are a special case. They can be treated as above but may well have other functions assigned to them. See below.
56
68
 
57
69
  ## Ajax utilities
58
70
 
59
71
  - `get()`
60
- - `post()`
72
+ - `post()`cp
61
73
  - `request()`
62
74
 
63
75
  The first two `get()` and `post()` functions make use of the third `request()` function, which is more generic and can be used for arbitrary HTTP requests.
@@ -139,7 +151,7 @@ Note that the `headers` argument is not optional this time.
139
151
 
140
152
  Functions that can be used for Node applications running in a shell window.
141
153
 
142
- * The `onETX()` function takes a handler which is invoked whenever the `ETX` character code is encountered in the `stdin` stream, which typically happens when the user presses `Ctrl-C`. This method is therefore useful for exiting a console application immediately upon the user's behest, if it is passed `process.exit`. It also returns a function that can be called to remove the listener at some later point in time:
154
+ * The `onETX()` function takes a handler which is invoked whenever the `ETX` character code is encountered in the `stdin` stream, which typically happens when the user presses `Ctrl-C`. This function is therefore useful for exiting a console application immediately upon the user's behest, if it is passed `process.exit`. It also returns a function that can be called to remove the listener at some later point in time:
143
155
 
144
156
  ```
145
157
  const offEXT = onEXT(process.exit);
@@ -346,11 +358,13 @@ const packageJSON = getPackageJSON(); // Returns the contents of the package.jso
346
358
  - `readDirectory()`
347
359
  - `readFile()`
348
360
  - `writeFile()`
349
- - `createFile()`
350
361
  - `appendToFile()`
351
362
  - `createDirectory()`
352
363
  - `renameDirectory()`
364
+ - `moveDirectory()`
365
+ - `createFile()`
353
366
  - `renameFile()`
367
+ - `moveFile()`
354
368
  - `removeEntry()`
355
369
  - `getStats()`
356
370
 
@@ -390,12 +404,6 @@ readFile("root/etc/init.conf"); // returns the content of the 'root/etc/init.con
390
404
  writeFile("root/etc/init.conf", ""); // writes '' to the 'root/etc/init.conf' file
391
405
  ```
392
406
 
393
- * The `createFile()` creates an empty file. It does not return anything upon success:
394
-
395
- ```
396
- createFile("root/etc/init.conf"); // writes '' to the 'root/etc/init.conf' file
397
- ```
398
-
399
407
  * The `appendToFile()` function takes the content to append file as a second string argument. It will create teh file if necessary and does not return anything upon success:
400
408
 
401
409
  ```
@@ -414,12 +422,34 @@ createDirectory("root/etc/init"); // Creates the 'root/etc/init' directory
414
422
  renameDirectory("/root/usr", "/root/lib"); // Renames the '/root/usr' directory to '/root/lib'
415
423
  ```
416
424
 
425
+ Note that if the parent directory of the newly named directory does not exist then this function will fail. Instead use the `moveDirectory()` function.
426
+
427
+ * The `moveDirectory()` function moves a directory:
428
+
429
+ ```
430
+ moveDirectory("/root/usr", "/etc/lib"); // Moves the '/root/usr' directory to '/etc/lib'
431
+ ```
432
+
433
+ * The `createFile()` creates an empty file. It does not return anything upon success:
434
+
435
+ ```
436
+ createFile("root/etc/init.conf"); // writes '' to the 'root/etc/init.conf' file
437
+ ```
438
+
417
439
  * The `renameFile()` function renames a file:
418
440
 
419
441
  ```
420
442
  renameFile("hosts", "host"); // Renames the 'hosts' file to 'host'
421
443
  ```
422
444
 
445
+ Note that if the parent directory of the newly named file does not exist then this function will fail. Instead use the `moveFile()` function.
446
+
447
+ * The `moveFile()` function moves a file:
448
+
449
+ ```
450
+ moveFile("/root/usr/init.conf", "/etc/lib/init.conf"); // Moves the '/root/usr/init.conf' file to '/etc/lib/init.conf'
451
+ ```
452
+
423
453
  * The `removeEntry()` function removes a file or directory:
424
454
 
425
455
  ```
@@ -490,7 +520,7 @@ rc(); // Provides the first environment in the '.defaultrc' file
490
520
 
491
521
  Note that the `rc()` function can be included in any file but only needs to be called once. But be careful that it is called before it is ever destructured.
492
522
 
493
- Aside from the aforementioned `setRCBaseExtension()` functions, the `checkRCFileExists()`, `createVacuousRCFile()`, `readRCFile()` and `writeRCFile()` functions do as their names suggest. The `updateRCFile()` function, if passed a plain old JavaScript object as the first parameter, will add the properties therein, overwriting any existing properties. Properties to be removed can be given as further arguments. If you do not want to add as well as remove properties, set the first argument to a falsey value.
523
+ Aside from the aforementioned `setRCBaseExtension()` functions, the `checkRCFileExists()`, `createVacuousRCFile()`, `readRCFile()` and `writeRCFile()` functions do as their names suggest. The `updateRCFile()` function, if passed a plain old JavaScript object as the first argument, will add the properties therein, overwriting any existing properties. Properties to be removed can be given as further arguments. If you do not want to add as well as remove properties, set the first argument to a falsey value.
494
524
 
495
525
  ```
496
526
  const { readRCFile, writeRCFile, updateRCFile, checkRCFileExists, createVacuousRCFile } = rc;
@@ -1054,7 +1084,7 @@ eventually(operations, () => {
1054
1084
  /// done
1055
1085
  }, context);
1056
1086
  ```
1057
- * The `repeatedly()` function takes a single operation and a `length` parameter, immediately calling the operation a `length` number of times without waiting for it to invoke the given `next()` function each time. When the operation has invoked the given `next()` function a `length` number of times, it will call the `done()` function. Note that in this case invoking the `done()` function from within the operation will not halt its execution the requisite number of times, it is passed as an argument only for the sake of convention. In the example below the operation is executed ten times:
1087
+ * The `repeatedly()` function takes a single operation and a `length` argument, immediately calling the operation a `length` number of times without waiting for it to invoke the given `next()` function each time. When the operation has invoked the given `next()` function a `length` number of times, it will call the `done()` function. Note that in this case invoking the `done()` function from within the operation will not halt its execution the requisite number of times, it is passed as an argument only for the sake of convention. In the example below the operation is executed ten times:
1058
1088
 
1059
1089
  ```
1060
1090
  const context = {};
@@ -36,9 +36,6 @@ _export(exports, {
36
36
  writeFile: function() {
37
37
  return writeFile;
38
38
  },
39
- createFile: function() {
40
- return createFile;
41
- },
42
39
  appendToFile: function() {
43
40
  return appendToFile;
44
41
  },
@@ -48,9 +45,18 @@ _export(exports, {
48
45
  renameDirectory: function() {
49
46
  return renameDirectory;
50
47
  },
48
+ moveDirectory: function() {
49
+ return moveDirectory;
50
+ },
51
+ createFile: function() {
52
+ return createFile;
53
+ },
51
54
  renameFile: function() {
52
55
  return renameFile;
53
56
  },
57
+ moveFile: function() {
58
+ return moveFile;
59
+ },
54
60
  removeEntry: function() {
55
61
  return removeEntry;
56
62
  },
@@ -62,6 +68,7 @@ _export(exports, {
62
68
  }
63
69
  });
64
70
  var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
71
+ var _path = /*#__PURE__*/ _interop_require_default(require("path"));
65
72
  var _constants = require("../constants");
66
73
  var _defaults = require("../defaults");
67
74
  function _interop_require_default(obj) {
@@ -121,15 +128,12 @@ function readFile(filePath) {
121
128
  function writeFile(filePath, content) {
122
129
  _fs.default.writeFileSync(filePath, content);
123
130
  }
124
- function createFile(filePath) {
125
- var content = _constants.EMPTY_STRING;
126
- _fs.default.writeFileSync(filePath, content);
127
- }
128
131
  function appendToFile(filePath, content) {
129
132
  _fs.default.appendFileSync(filePath, content);
130
133
  }
131
134
  function createDirectory(directoryPath) {
132
- var recursive = true, options = {
135
+ var recursive = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
136
+ var options = {
133
137
  recursive: recursive
134
138
  };
135
139
  _fs.default.mkdirSync(directoryPath, options);
@@ -137,9 +141,21 @@ function createDirectory(directoryPath) {
137
141
  function renameDirectory(oldDirectoryPath, newDirectoryPath) {
138
142
  _fs.default.renameSync(oldDirectoryPath, newDirectoryPath);
139
143
  }
144
+ function moveDirectory(oldDirectoryPath, newDirectoryPath) {
145
+ ensureParentDirectoryExists(newDirectoryPath);
146
+ renameDirectory(oldDirectoryPath, newDirectoryPath);
147
+ }
148
+ function createFile(filePath) {
149
+ var content = _constants.EMPTY_STRING;
150
+ _fs.default.writeFileSync(filePath, content);
151
+ }
140
152
  function renameFile(oldFilePath, newFilePath) {
141
153
  _fs.default.renameSync(oldFilePath, newFilePath);
142
154
  }
155
+ function moveFile(oldFilePath, newFilePath) {
156
+ ensureParentFileExists(newFilePath);
157
+ renameFile(oldFilePath, newFilePath);
158
+ }
143
159
  function removeEntry(entryPath) {
144
160
  var force = true, recursive = true, options = {
145
161
  force: force,
@@ -160,13 +176,21 @@ var _default = {
160
176
  readDirectory: readDirectory,
161
177
  readFile: readFile,
162
178
  writeFile: writeFile,
163
- createFile: createFile,
164
179
  appendToFile: appendToFile,
165
180
  createDirectory: createDirectory,
166
181
  renameDirectory: renameDirectory,
182
+ moveDirectory: moveDirectory,
183
+ createFile: createFile,
167
184
  renameFile: renameFile,
185
+ moveFile: moveFile,
168
186
  removeEntry: removeEntry,
169
187
  getStats: getStats
170
188
  };
189
+ function ensureParentDirectoryExists(filePath) {
190
+ var parentDirectoryPath = _path.default.dirname(filePath), parentDirectoryExists = checkDirectoryExists(parentDirectoryPath);
191
+ if (!parentDirectoryExists) {
192
+ createDirectory(parentDirectoryPath);
193
+ }
194
+ }
171
195
 
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ESU5HIH0gZnJvbSBcIi4uL2RlZmF1bHRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0VudHJ5RXhpc3RzKGVudHJ5UGF0aCkge1xuICBjb25zdCBlbnRyeUV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZW50cnlQYXRoKTtcblxuICByZXR1cm4gZW50cnlFeGlzdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0ZpbGVFeGlzdHMoZmlsZVBhdGgpIHtcbiAgbGV0IGZpbGVFeGlzdHMgPSBmYWxzZTtcbiAgXG4gIGNvbnN0IGVudHJ5UGF0aCA9IGZpbGVQYXRoLCAvLy9cbiAgICAgICAgZW50cnlFeGlzdHMgPSBjaGVja0VudHJ5RXhpc3RzKGVudHJ5UGF0aCk7XG4gIFxuICBpZiAoZW50cnlFeGlzdHMpIHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShlbnRyeVBhdGgpO1xuICAgIFxuICAgIGlmIChlbnRyeUZpbGUpIHtcbiAgICAgIGZpbGVFeGlzdHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGZpbGVFeGlzdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0RpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlQYXRoKSB7XG4gIGxldCBkaXJlY3RvcnlFeGlzdHMgPSBmYWxzZTtcblxuICBjb25zdCBlbnRyeVBhdGggPSBkaXJlY3RvcnlQYXRoLCAvLy9cbiAgICAgICAgZW50cnlFeGlzdHMgPSBjaGVja0VudHJ5RXhpc3RzKGVudHJ5UGF0aCk7XG5cbiAgaWYgKGVudHJ5RXhpc3RzKSB7XG4gICAgY29uc3QgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGVudHJ5UGF0aCk7XG5cbiAgICBpZiAoZW50cnlEaXJlY3RvcnkpIHtcbiAgICAgIGRpcmVjdG9yeUV4aXN0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpcmVjdG9yeUV4aXN0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50cnlGaWxlKGVudHJ5UGF0aCkge1xuICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZW50cnlQYXRoKSxcbiAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBzdGF0LmlzRGlyZWN0b3J5KCksXG4gICAgICAgIGVudHJ5RmlsZSA9ICFlbnRyeURpcmVjdG9yeTtcblxuICByZXR1cm4gZW50cnlGaWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRyeURpcmVjdG9yeShlbnRyeVBhdGgpIHtcbiAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGVudHJ5UGF0aCksXG4gICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gc3RhdC5pc0RpcmVjdG9yeSgpO1xuXG4gIHJldHVybiBlbnRyeURpcmVjdG9yeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlyZWN0b3J5RW1wdHkoZGlyZWN0b3J5UGF0aCkge1xuICBjb25zdCBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShkaXJlY3RvcnlQYXRoKSxcbiAgICAgICAgc3ViRW50cnlOYW1lc0xlbmd0aCA9IHN1YkVudHJ5TmFtZXMubGVuZ3RoLFxuICAgICAgICBkaXJlY3RvcnlFbXB0eSA9IChzdWJFbnRyeU5hbWVzTGVuZ3RoID09PSAwKTtcblxuICByZXR1cm4gZGlyZWN0b3J5RW1wdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGlyZWN0b3J5KGRpcmVjdG9yeVBhdGgpIHtcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IGZzLnJlYWRkaXJTeW5jKGRpcmVjdG9yeVBhdGgpO1xuXG4gIHJldHVybiBzdWJFbnRyeU5hbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUoZmlsZVBhdGgsIGVuY29kaW5nID0gREVGQVVMVF9FTkNPRElORykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIGVuY29kaW5nXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIG9wdGlvbnMpO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGaWxlKGZpbGVQYXRoLCBjb250ZW50KSB7XG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsZShmaWxlUGF0aCkge1xuICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kVG9GaWxlKGZpbGVQYXRoLCBjb250ZW50KSB7XG4gIGZzLmFwcGVuZEZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpcmVjdG9yeShkaXJlY3RvcnlQYXRoKSB7XG4gIGNvbnN0IHJlY3Vyc2l2ZSA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgcmVjdXJzaXZlXG4gICAgICAgIH07XG5cbiAgZnMubWtkaXJTeW5jKGRpcmVjdG9yeVBhdGgsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGlyZWN0b3J5KG9sZERpcmVjdG9yeVBhdGgsIG5ld0RpcmVjdG9yeVBhdGgpIHtcbiAgZnMucmVuYW1lU3luYyhvbGREaXJlY3RvcnlQYXRoLCBuZXdEaXJlY3RvcnlQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGUob2xkRmlsZVBhdGgsIG5ld0ZpbGVQYXRoKSB7XG4gIGZzLnJlbmFtZVN5bmMob2xkRmlsZVBhdGgsIG5ld0ZpbGVQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVudHJ5KGVudHJ5UGF0aCkge1xuICBjb25zdCBmb3JjZSA9IHRydWUsXG4gICAgICAgIHJlY3Vyc2l2ZSA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgZm9yY2UsXG4gICAgICAgICAgcmVjdXJzaXZlXG4gICAgICAgIH07XG5cbiAgZnMucm1TeW5jKGVudHJ5UGF0aCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0cyhmaWxlUGF0aCkge1xuICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZVBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNoZWNrRW50cnlFeGlzdHMsXG4gIGNoZWNrRmlsZUV4aXN0cyxcbiAgY2hlY2tEaXJlY3RvcnlFeGlzdHMsXG4gIGlzRW50cnlGaWxlLFxuICBpc0VudHJ5RGlyZWN0b3J5LFxuICBpc0RpcmVjdG9yeUVtcHR5LFxuICByZWFkRGlyZWN0b3J5LFxuICByZWFkRmlsZSxcbiAgd3JpdGVGaWxlLFxuICBjcmVhdGVGaWxlLFxuICBhcHBlbmRUb0ZpbGUsXG4gIGNyZWF0ZURpcmVjdG9yeSxcbiAgcmVuYW1lRGlyZWN0b3J5LFxuICByZW5hbWVGaWxlLFxuICByZW1vdmVFbnRyeSxcbiAgZ2V0U3RhdHNcbn07XG4iXSwibmFtZXMiOlsiY2hlY2tFbnRyeUV4aXN0cyIsImNoZWNrRmlsZUV4aXN0cyIsImNoZWNrRGlyZWN0b3J5RXhpc3RzIiwiaXNFbnRyeUZpbGUiLCJpc0VudHJ5RGlyZWN0b3J5IiwiaXNEaXJlY3RvcnlFbXB0eSIsInJlYWREaXJlY3RvcnkiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImNyZWF0ZUZpbGUiLCJhcHBlbmRUb0ZpbGUiLCJjcmVhdGVEaXJlY3RvcnkiLCJyZW5hbWVEaXJlY3RvcnkiLCJyZW5hbWVGaWxlIiwicmVtb3ZlRW50cnkiLCJnZXRTdGF0cyIsImVudHJ5UGF0aCIsImVudHJ5RXhpc3RzIiwiZnMiLCJleGlzdHNTeW5jIiwiZmlsZVBhdGgiLCJmaWxlRXhpc3RzIiwiZW50cnlGaWxlIiwiZGlyZWN0b3J5UGF0aCIsImRpcmVjdG9yeUV4aXN0cyIsImVudHJ5RGlyZWN0b3J5Iiwic3RhdCIsInN0YXRTeW5jIiwiaXNEaXJlY3RvcnkiLCJzdWJFbnRyeU5hbWVzIiwic3ViRW50cnlOYW1lc0xlbmd0aCIsImxlbmd0aCIsImRpcmVjdG9yeUVtcHR5IiwicmVhZGRpclN5bmMiLCJlbmNvZGluZyIsIkRFRkFVTFRfRU5DT0RJTkciLCJvcHRpb25zIiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJFTVBUWV9TVFJJTkciLCJhcHBlbmRGaWxlU3luYyIsInJlY3Vyc2l2ZSIsIm1rZGlyU3luYyIsIm9sZERpcmVjdG9yeVBhdGgiLCJuZXdEaXJlY3RvcnlQYXRoIiwicmVuYW1lU3luYyIsIm9sZEZpbGVQYXRoIiwibmV3RmlsZVBhdGgiLCJmb3JjZSIsInJtU3luYyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBT2dCQSxnQkFBZ0I7ZUFBaEJBOztJQU1BQyxlQUFlO2VBQWZBOztJQWlCQUMsb0JBQW9CO2VBQXBCQTs7SUFpQkFDLFdBQVc7ZUFBWEE7O0lBUUFDLGdCQUFnQjtlQUFoQkE7O0lBT0FDLGdCQUFnQjtlQUFoQkE7O0lBUUFDLGFBQWE7ZUFBYkE7O0lBTUFDLFFBQVE7ZUFBUkE7O0lBU0FDLFNBQVM7ZUFBVEE7O0lBSUFDLFVBQVU7ZUFBVkE7O0lBTUFDLFlBQVk7ZUFBWkE7O0lBSUFDLGVBQWU7ZUFBZkE7O0lBU0FDLGVBQWU7ZUFBZkE7O0lBSUFDLFVBQVU7ZUFBVkE7O0lBSUFDLFdBQVc7ZUFBWEE7O0lBV0FDLFFBQVE7ZUFBUkE7O0lBSWhCLE9BaUJFO2VBakJGOzs7eURBakllO3lCQUVjO3dCQUNJOzs7Ozs7QUFFMUIsU0FBU2YsaUJBQWlCZ0IsU0FBUztJQUN4QyxJQUFNQyxjQUFjQyxXQUFFLENBQUNDLFVBQVUsQ0FBQ0g7SUFFbEMsT0FBT0M7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
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FTkNPRElORyB9IGZyb20gXCIuLi9kZWZhdWx0c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tFbnRyeUV4aXN0cyhlbnRyeVBhdGgpIHtcbiAgY29uc3QgZW50cnlFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGVudHJ5UGF0aCk7XG5cbiAgcmV0dXJuIGVudHJ5RXhpc3RzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGaWxlRXhpc3RzKGZpbGVQYXRoKSB7XG4gIGxldCBmaWxlRXhpc3RzID0gZmFsc2U7XG4gIFxuICBjb25zdCBlbnRyeVBhdGggPSBmaWxlUGF0aCwgLy8vXG4gICAgICAgIGVudHJ5RXhpc3RzID0gY2hlY2tFbnRyeUV4aXN0cyhlbnRyeVBhdGgpO1xuICBcbiAgaWYgKGVudHJ5RXhpc3RzKSB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoZW50cnlQYXRoKTtcbiAgICBcbiAgICBpZiAoZW50cnlGaWxlKSB7XG4gICAgICBmaWxlRXhpc3RzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBmaWxlRXhpc3RzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tEaXJlY3RvcnlFeGlzdHMoZGlyZWN0b3J5UGF0aCkge1xuICBsZXQgZGlyZWN0b3J5RXhpc3RzID0gZmFsc2U7XG5cbiAgY29uc3QgZW50cnlQYXRoID0gZGlyZWN0b3J5UGF0aCwgLy8vXG4gICAgICAgIGVudHJ5RXhpc3RzID0gY2hlY2tFbnRyeUV4aXN0cyhlbnRyeVBhdGgpO1xuXG4gIGlmIChlbnRyeUV4aXN0cykge1xuICAgIGNvbnN0IGVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShlbnRyeVBhdGgpO1xuXG4gICAgaWYgKGVudHJ5RGlyZWN0b3J5KSB7XG4gICAgICBkaXJlY3RvcnlFeGlzdHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXJlY3RvcnlFeGlzdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VudHJ5RmlsZShlbnRyeVBhdGgpIHtcbiAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGVudHJ5UGF0aCksXG4gICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gc3RhdC5pc0RpcmVjdG9yeSgpLFxuICAgICAgICBlbnRyeUZpbGUgPSAhZW50cnlEaXJlY3Rvcnk7XG5cbiAgcmV0dXJuIGVudHJ5RmlsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50cnlEaXJlY3RvcnkoZW50cnlQYXRoKSB7XG4gIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhlbnRyeVBhdGgpLFxuICAgICAgICBlbnRyeURpcmVjdG9yeSA9IHN0YXQuaXNEaXJlY3RvcnkoKTtcblxuICByZXR1cm4gZW50cnlEaXJlY3Rvcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpcmVjdG9yeUVtcHR5KGRpcmVjdG9yeVBhdGgpIHtcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkoZGlyZWN0b3J5UGF0aCksXG4gICAgICAgIHN1YkVudHJ5TmFtZXNMZW5ndGggPSBzdWJFbnRyeU5hbWVzLmxlbmd0aCxcbiAgICAgICAgZGlyZWN0b3J5RW1wdHkgPSAoc3ViRW50cnlOYW1lc0xlbmd0aCA9PT0gMCk7XG5cbiAgcmV0dXJuIGRpcmVjdG9yeUVtcHR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERpcmVjdG9yeShkaXJlY3RvcnlQYXRoKSB7XG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJlY3RvcnlQYXRoKTtcblxuICByZXR1cm4gc3ViRW50cnlOYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlKGZpbGVQYXRoLCBlbmNvZGluZyA9IERFRkFVTFRfRU5DT0RJTkcpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBlbmNvZGluZ1xuICAgICAgICB9LFxuICAgICAgICBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBvcHRpb25zKTtcblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRmlsZShmaWxlUGF0aCwgY29udGVudCkge1xuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFRvRmlsZShmaWxlUGF0aCwgY29udGVudCkge1xuICBmcy5hcHBlbmRGaWxlU3luYyhmaWxlUGF0aCwgY29udGVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaXJlY3RvcnkoZGlyZWN0b3J5UGF0aCwgcmVjdXJzaXZlID0gdHJ1ZSkge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHJlY3Vyc2l2ZVxuICB9O1xuXG4gIGZzLm1rZGlyU3luYyhkaXJlY3RvcnlQYXRoLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURpcmVjdG9yeShvbGREaXJlY3RvcnlQYXRoLCBuZXdEaXJlY3RvcnlQYXRoKSB7XG4gIGZzLnJlbmFtZVN5bmMob2xkRGlyZWN0b3J5UGF0aCwgbmV3RGlyZWN0b3J5UGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlRGlyZWN0b3J5KG9sZERpcmVjdG9yeVBhdGgsIG5ld0RpcmVjdG9yeVBhdGgpIHtcbiAgZW5zdXJlUGFyZW50RGlyZWN0b3J5RXhpc3RzKG5ld0RpcmVjdG9yeVBhdGgpO1xuXG4gIHJlbmFtZURpcmVjdG9yeShvbGREaXJlY3RvcnlQYXRoLCBuZXdEaXJlY3RvcnlQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbGUoZmlsZVBhdGgpIHtcbiAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGUob2xkRmlsZVBhdGgsIG5ld0ZpbGVQYXRoKSB7XG4gIGZzLnJlbmFtZVN5bmMob2xkRmlsZVBhdGgsIG5ld0ZpbGVQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmVGaWxlKG9sZEZpbGVQYXRoLCBuZXdGaWxlUGF0aCkge1xuICBlbnN1cmVQYXJlbnRGaWxlRXhpc3RzKG5ld0ZpbGVQYXRoKTtcblxuICByZW5hbWVGaWxlKG9sZEZpbGVQYXRoLCBuZXdGaWxlUGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbnRyeShlbnRyeVBhdGgpIHtcbiAgY29uc3QgZm9yY2UgPSB0cnVlLFxuICAgICAgICByZWN1cnNpdmUgPSB0cnVlLFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIGZvcmNlLFxuICAgICAgICAgIHJlY3Vyc2l2ZVxuICAgICAgICB9O1xuXG4gIGZzLnJtU3luYyhlbnRyeVBhdGgsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHMoZmlsZVBhdGgpIHtcbiAgcmV0dXJuIGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjaGVja0VudHJ5RXhpc3RzLFxuICBjaGVja0ZpbGVFeGlzdHMsXG4gIGNoZWNrRGlyZWN0b3J5RXhpc3RzLFxuICBpc0VudHJ5RmlsZSxcbiAgaXNFbnRyeURpcmVjdG9yeSxcbiAgaXNEaXJlY3RvcnlFbXB0eSxcbiAgcmVhZERpcmVjdG9yeSxcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZSxcbiAgYXBwZW5kVG9GaWxlLFxuICBjcmVhdGVEaXJlY3RvcnksXG4gIHJlbmFtZURpcmVjdG9yeSxcbiAgbW92ZURpcmVjdG9yeSxcbiAgY3JlYXRlRmlsZSxcbiAgcmVuYW1lRmlsZSxcbiAgbW92ZUZpbGUsXG4gIHJlbW92ZUVudHJ5LFxuICBnZXRTdGF0c1xufTtcblxuZnVuY3Rpb24gZW5zdXJlUGFyZW50RGlyZWN0b3J5RXhpc3RzKGZpbGVQYXRoKSB7XG4gIGNvbnN0IHBhcmVudERpcmVjdG9yeVBhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCAvLy9cbiAgICAgICAgcGFyZW50RGlyZWN0b3J5RXhpc3RzID0gY2hlY2tEaXJlY3RvcnlFeGlzdHMocGFyZW50RGlyZWN0b3J5UGF0aCk7XG5cbiAgaWYgKCFwYXJlbnREaXJlY3RvcnlFeGlzdHMpIHtcbiAgICBjcmVhdGVEaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5UGF0aCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjaGVja0VudHJ5RXhpc3RzIiwiY2hlY2tGaWxlRXhpc3RzIiwiY2hlY2tEaXJlY3RvcnlFeGlzdHMiLCJpc0VudHJ5RmlsZSIsImlzRW50cnlEaXJlY3RvcnkiLCJpc0RpcmVjdG9yeUVtcHR5IiwicmVhZERpcmVjdG9yeSIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwiYXBwZW5kVG9GaWxlIiwiY3JlYXRlRGlyZWN0b3J5IiwicmVuYW1lRGlyZWN0b3J5IiwibW92ZURpcmVjdG9yeSIsImNyZWF0ZUZpbGUiLCJyZW5hbWVGaWxlIiwibW92ZUZpbGUiLCJyZW1vdmVFbnRyeSIsImdldFN0YXRzIiwiZW50cnlQYXRoIiwiZW50cnlFeGlzdHMiLCJmcyIsImV4aXN0c1N5bmMiLCJmaWxlUGF0aCIsImZpbGVFeGlzdHMiLCJlbnRyeUZpbGUiLCJkaXJlY3RvcnlQYXRoIiwiZGlyZWN0b3J5RXhpc3RzIiwiZW50cnlEaXJlY3RvcnkiLCJzdGF0Iiwic3RhdFN5bmMiLCJpc0RpcmVjdG9yeSIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWVzTGVuZ3RoIiwibGVuZ3RoIiwiZGlyZWN0b3J5RW1wdHkiLCJyZWFkZGlyU3luYyIsImVuY29kaW5nIiwiREVGQVVMVF9FTkNPRElORyIsIm9wdGlvbnMiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsImFwcGVuZEZpbGVTeW5jIiwicmVjdXJzaXZlIiwibWtkaXJTeW5jIiwib2xkRGlyZWN0b3J5UGF0aCIsIm5ld0RpcmVjdG9yeVBhdGgiLCJyZW5hbWVTeW5jIiwiZW5zdXJlUGFyZW50RGlyZWN0b3J5RXhpc3RzIiwiRU1QVFlfU1RSSU5HIiwib2xkRmlsZVBhdGgiLCJuZXdGaWxlUGF0aCIsImVuc3VyZVBhcmVudEZpbGVFeGlzdHMiLCJmb3JjZSIsInJtU3luYyIsInBhcmVudERpcmVjdG9yeVBhdGgiLCJwYXRoIiwiZGlybmFtZSIsInBhcmVudERpcmVjdG9yeUV4aXN0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBUWdCQSxnQkFBZ0I7ZUFBaEJBOztJQU1BQyxlQUFlO2VBQWZBOztJQWlCQUMsb0JBQW9CO2VBQXBCQTs7SUFpQkFDLFdBQVc7ZUFBWEE7O0lBUUFDLGdCQUFnQjtlQUFoQkE7O0lBT0FDLGdCQUFnQjtlQUFoQkE7O0lBUUFDLGFBQWE7ZUFBYkE7O0lBTUFDLFFBQVE7ZUFBUkE7O0lBU0FDLFNBQVM7ZUFBVEE7O0lBSUFDLFlBQVk7ZUFBWkE7O0lBSUFDLGVBQWU7ZUFBZkE7O0lBUUFDLGVBQWU7ZUFBZkE7O0lBSUFDLGFBQWE7ZUFBYkE7O0lBTUFDLFVBQVU7ZUFBVkE7O0lBTUFDLFVBQVU7ZUFBVkE7O0lBSUFDLFFBQVE7ZUFBUkE7O0lBTUFDLFdBQVc7ZUFBWEE7O0lBV0FDLFFBQVE7ZUFBUkE7O0lBSWhCLE9BbUJFO2VBbkJGOzs7eURBN0llOzJEQUNFO3lCQUVZO3dCQUNJOzs7Ozs7QUFFMUIsU0FBU2pCLGlCQUFpQmtCLFNBQVM7SUFDeEMsSUFBTUMsY0FBY0MsV0FBRSxDQUFDQyxVQUFVLENBQUNIO0lBRWxDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTbEIsZ0JBQWdCcUIsUUFBUTtJQUN0QyxJQUFJQyxhQUFhO0lBRWpCLElBQU1MLFlBQVlJLFVBQ1pILGNBQWNu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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "necessary",
3
3
  "author": "James Smith",
4
- "version": "11.9.3",
4
+ "version": "11.10.2",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/necessary",
7
7
  "description": "A collection of utility functions.",
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import fs from "fs";
4
+ import path from "path";
4
5
 
5
6
  import { EMPTY_STRING } from "../constants";
6
7
  import { DEFAULT_ENCODING } from "../defaults";
@@ -87,21 +88,14 @@ export function writeFile(filePath, content) {
87
88
  fs.writeFileSync(filePath, content);
88
89
  }
89
90
 
90
- export function createFile(filePath) {
91
- const content = EMPTY_STRING;
92
-
93
- fs.writeFileSync(filePath, content);
94
- }
95
-
96
91
  export function appendToFile(filePath, content) {
97
92
  fs.appendFileSync(filePath, content);
98
93
  }
99
94
 
100
- export function createDirectory(directoryPath) {
101
- const recursive = true,
102
- options = {
103
- recursive
104
- };
95
+ export function createDirectory(directoryPath, recursive = true) {
96
+ const options = {
97
+ recursive
98
+ };
105
99
 
106
100
  fs.mkdirSync(directoryPath, options);
107
101
  }
@@ -110,10 +104,28 @@ export function renameDirectory(oldDirectoryPath, newDirectoryPath) {
110
104
  fs.renameSync(oldDirectoryPath, newDirectoryPath);
111
105
  }
112
106
 
107
+ export function moveDirectory(oldDirectoryPath, newDirectoryPath) {
108
+ ensureParentDirectoryExists(newDirectoryPath);
109
+
110
+ renameDirectory(oldDirectoryPath, newDirectoryPath);
111
+ }
112
+
113
+ export function createFile(filePath) {
114
+ const content = EMPTY_STRING;
115
+
116
+ fs.writeFileSync(filePath, content);
117
+ }
118
+
113
119
  export function renameFile(oldFilePath, newFilePath) {
114
120
  fs.renameSync(oldFilePath, newFilePath);
115
121
  }
116
122
 
123
+ export function moveFile(oldFilePath, newFilePath) {
124
+ ensureParentFileExists(newFilePath);
125
+
126
+ renameFile(oldFilePath, newFilePath);
127
+ }
128
+
117
129
  export function removeEntry(entryPath) {
118
130
  const force = true,
119
131
  recursive = true,
@@ -139,11 +151,22 @@ export default {
139
151
  readDirectory,
140
152
  readFile,
141
153
  writeFile,
142
- createFile,
143
154
  appendToFile,
144
155
  createDirectory,
145
156
  renameDirectory,
157
+ moveDirectory,
158
+ createFile,
146
159
  renameFile,
160
+ moveFile,
147
161
  removeEntry,
148
162
  getStats
149
163
  };
164
+
165
+ function ensureParentDirectoryExists(filePath) {
166
+ const parentDirectoryPath = path.dirname(filePath), ///
167
+ parentDirectoryExists = checkDirectoryExists(parentDirectoryPath);
168
+
169
+ if (!parentDirectoryExists) {
170
+ createDirectory(parentDirectoryPath);
171
+ }
172
+ }