necessary 11.9.4 → 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
@@ -151,7 +151,7 @@ Note that the `headers` argument is not optional this time.
151
151
 
152
152
  Functions that can be used for Node applications running in a shell window.
153
153
 
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 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:
155
155
 
156
156
  ```
157
157
  const offEXT = onEXT(process.exit);
@@ -358,11 +358,13 @@ const packageJSON = getPackageJSON(); // Returns the contents of the package.jso
358
358
  - `readDirectory()`
359
359
  - `readFile()`
360
360
  - `writeFile()`
361
- - `createFile()`
362
361
  - `appendToFile()`
363
362
  - `createDirectory()`
364
363
  - `renameDirectory()`
364
+ - `moveDirectory()`
365
+ - `createFile()`
365
366
  - `renameFile()`
367
+ - `moveFile()`
366
368
  - `removeEntry()`
367
369
  - `getStats()`
368
370
 
@@ -402,12 +404,6 @@ readFile("root/etc/init.conf"); // returns the content of the 'root/etc/init.con
402
404
  writeFile("root/etc/init.conf", ""); // writes '' to the 'root/etc/init.conf' file
403
405
  ```
404
406
 
405
- * The `createFile()` creates an empty file. It does not return anything upon success:
406
-
407
- ```
408
- createFile("root/etc/init.conf"); // writes '' to the 'root/etc/init.conf' file
409
- ```
410
-
411
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:
412
408
 
413
409
  ```
@@ -426,12 +422,34 @@ createDirectory("root/etc/init"); // Creates the 'root/etc/init' directory
426
422
  renameDirectory("/root/usr", "/root/lib"); // Renames the '/root/usr' directory to '/root/lib'
427
423
  ```
428
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
+
429
439
  * The `renameFile()` function renames a file:
430
440
 
431
441
  ```
432
442
  renameFile("hosts", "host"); // Renames the 'hosts' file to 'host'
433
443
  ```
434
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
+
435
453
  * The `removeEntry()` function removes a file or directory:
436
454
 
437
455
  ```
@@ -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.4",
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
+ }