@putout/operator-filesystem 10.4.0 → 10.5.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/README.md CHANGED
@@ -37,23 +37,6 @@ const [dirPath] = findFile(ast, 'hello');
37
37
  const newDirectoryPath = createDirectory(dirPath, 'world');
38
38
  ```
39
39
 
40
- ### `readDirectory(directoryPath: DirectoryPath): (FilePath | DirectoryPath)[]`
41
-
42
- ```js
43
- const {operator} = require('putout');
44
- const {
45
- finedFiles,
46
- findFile,
47
- readDirectory,
48
- } = operator;
49
-
50
- const [dirPath] = findFile(ast, '/bin');
51
-
52
- readDirectory(dirPath);
53
- // returns list of files
54
- [];
55
- ```
56
-
57
40
  ### `createNestedDirectory(path: FilePath|DirectoryPath, name: string): DirectoryPath`
58
41
 
59
42
  ```js
@@ -135,7 +118,7 @@ const {findFile} = operator;
135
118
  const coupleFiles = findFile(ast, ['/home/coderaiser', '/home/coderaiser/putout']);
136
119
  ```
137
120
 
138
- ### `getFile(directoryPath: DirectoryPath, name: string, options?: Options): FilePath | null`
121
+ ### `getFile(directoryPath: DirectoryPath, name: string | string[], options?: Options): FilePath[]`
139
122
 
140
123
  ```ts
141
124
  type Options = {
@@ -149,7 +132,16 @@ Get file named `name` from `directoryPath`
149
132
  const {operator} = require('putout');
150
133
  const {getFile} = operator;
151
134
 
152
- const filePath = getFile(root, 'package.json');
135
+ const [filePath] = getFile(root, 'package.json');
136
+ ```
137
+
138
+ When you need a couple files use:
139
+
140
+ ```js
141
+ import {operator} from 'putout';
142
+
143
+ const {getFile} = operator;
144
+ const [index, indexSpec] = getFile(root, ['index.js', 'index.spec.js']);
153
145
  ```
154
146
 
155
147
  ### `getParentDirectory(path: FilePath | DirectoryPath): FilePath | null`
@@ -171,7 +163,7 @@ dirPath === getParentDirectory(newDirectoryPath);
171
163
  true;
172
164
  ```
173
165
 
174
- ### `getRootDirectory(path: FilePath | DirectoryPath): DrectoryPath`
166
+ ### `getRootDirectory(path: FilePath | DirectoryPath | File): DrectoryPath`
175
167
 
176
168
  ```js
177
169
  const {operator} = require('putout');
package/lib/filesystem.js CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  traverseProperties,
12
12
  } from '@putout/operate';
13
13
  import * as maybeFS from './maybe-fs.js';
14
+ import {getRootFromAst} from './get-root-from-ast.js';
14
15
  import {
15
16
  createTypeProperty,
16
17
  createFilesProperty,
@@ -308,7 +309,7 @@ export function readDirectory(dirPath) {
308
309
  }
309
310
 
310
311
  export function createDirectory(dirPath, name) {
311
- const existed = getFile(dirPath, name);
312
+ const [existed] = getFile(dirPath, name);
312
313
 
313
314
  if (existed) {
314
315
  const fileType = getFileType(existed);
@@ -426,6 +427,9 @@ export const createNestedDirectory = (path, name) => {
426
427
  };
427
428
 
428
429
  export function getRootDirectory(path) {
430
+ if (path.program)
431
+ return getRootFromAst(path);
432
+
429
433
  let currentDirPath = getParentDirectory(path);
430
434
 
431
435
  if (!currentDirPath)
@@ -441,19 +445,32 @@ export function getRootDirectory(path) {
441
445
  }
442
446
 
443
447
  export function getFile(directoryPath, name, {type} = {}) {
448
+ const names = maybeArray(name);
449
+ const files = new Map();
450
+ let count = 0;
451
+
452
+ for (const name of names)
453
+ files.set(name, null);
454
+
444
455
  for (const currentFile of readDirectory(directoryPath)) {
445
456
  const currentName = getFilename(currentFile);
457
+ const base = basename(currentName);
446
458
 
447
- if (!currentName.endsWith(name))
459
+ if (!names.includes(base))
448
460
  continue;
449
461
 
450
462
  if (type && type !== getFileType(currentFile))
451
463
  continue;
452
464
 
453
- return currentFile;
465
+ files.set(base, currentFile);
466
+
467
+ ++count;
468
+
469
+ if (names.length === count)
470
+ break;
454
471
  }
455
472
 
456
- return null;
473
+ return files.values();
457
474
  }
458
475
 
459
476
  export const {
@@ -0,0 +1,14 @@
1
+ import {traverse} from '@putout/traverse';
2
+ import {__filesystem_name} from '@putout/operator-json';
3
+
4
+ export const getRootFromAst = (ast) => {
5
+ let root;
6
+
7
+ traverse(ast, {
8
+ [`${__filesystem_name}(__)`](path) {
9
+ root = path.get('arguments.0');
10
+ },
11
+ });
12
+
13
+ return root;
14
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putout/operator-filesystem",
3
- "version": "10.4.0",
3
+ "version": "10.5.1",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "🐊Putout operator adds ability to filesystem referenced variables that was not defined",
@@ -26,6 +26,8 @@
26
26
  "dependencies": {
27
27
  "@putout/babel": "^5.0.0",
28
28
  "@putout/operate": "^15.0.0",
29
+ "@putout/operator-json": "^3.2.0",
30
+ "@putout/traverse": "^16.0.0",
29
31
  "fullstore": "^4.0.0",
30
32
  "try-catch": "^4.0.0"
31
33
  },
@@ -38,7 +40,6 @@
38
40
  "devDependencies": {
39
41
  "@putout/engine-parser": "^15.0.1",
40
42
  "@putout/eslint-flat": "^4.0.0",
41
- "@putout/operator-json": "^3.0.0",
42
43
  "@putout/test": "^15.0.0",
43
44
  "c8": "^10.0.0",
44
45
  "eslint": "^10.0.0-alpha.0",