ts-repo-utils 7.0.4 → 7.1.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 +146 -0
- package/dist/cmd/assert-repo-is-clean.mjs +1 -1
- package/dist/cmd/check-should-run-type-checks.mjs +1 -1
- package/dist/cmd/format-diff-from.mjs +1 -1
- package/dist/cmd/format-uncommitted.mjs +1 -1
- package/dist/cmd/gen-index-ts.mjs +1 -1
- package/dist/functions/format.d.mts +1 -0
- package/dist/functions/format.d.mts.map +1 -1
- package/dist/functions/format.mjs +48 -1
- package/dist/functions/format.mjs.map +1 -1
- package/package.json +7 -7
- package/src/cmd/assert-repo-is-clean.mts +1 -1
- package/src/cmd/check-should-run-type-checks.mts +1 -1
- package/src/cmd/format-diff-from.mts +1 -1
- package/src/cmd/format-uncommitted.mts +1 -1
- package/src/cmd/gen-index-ts.mts +1 -1
- package/src/functions/format.mts +61 -2
package/README.md
CHANGED
|
@@ -323,6 +323,52 @@ type Ret = Result<
|
|
|
323
323
|
>;
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
+
### Build Optimization Utilities
|
|
327
|
+
|
|
328
|
+
#### `checkShouldRunTypeChecks(options?): Promise<boolean>`
|
|
329
|
+
|
|
330
|
+
Checks if TypeScript type checks should run based on the diff from a base branch. Optimizes CI/CD pipelines by skipping type checks when only non-TypeScript files are changed.
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
import { checkShouldRunTypeChecks } from 'ts-repo-utils';
|
|
334
|
+
|
|
335
|
+
// Use default settings (compare against origin/main)
|
|
336
|
+
const shouldRun = await checkShouldRunTypeChecks();
|
|
337
|
+
|
|
338
|
+
if (shouldRun) {
|
|
339
|
+
await $('npm run type-check');
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Custom ignore patterns and base branch
|
|
343
|
+
const shouldRun = await checkShouldRunTypeChecks({
|
|
344
|
+
pathsIgnore: ['.eslintrc.json', 'docs/', '**.md', 'scripts/'],
|
|
345
|
+
baseBranch: 'origin/develop',
|
|
346
|
+
});
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Options:**
|
|
350
|
+
|
|
351
|
+
- `pathsIgnore?` - Patterns to ignore when checking if type checks should run:
|
|
352
|
+
- Exact file matches: `.cspell.json`
|
|
353
|
+
- Directory prefixes: `docs/` (matches any file in docs directory)
|
|
354
|
+
- File extensions: `**.md` (matches any markdown file)
|
|
355
|
+
- Default: `['LICENSE', '.editorconfig', '.gitignore', '.cspell.json', '.markdownlint-cli2.mjs', '.npmignore', '.prettierignore', '.prettierrc', 'docs/', '**.md', '**.txt']`
|
|
356
|
+
- `baseBranch?` - Base branch to compare against (default: `origin/main`)
|
|
357
|
+
|
|
358
|
+
**GitHub Actions Integration:**
|
|
359
|
+
|
|
360
|
+
When running in GitHub Actions, sets `GITHUB_OUTPUT` with `should_run=true/false`:
|
|
361
|
+
|
|
362
|
+
```yaml
|
|
363
|
+
- name: Check if type checks should run
|
|
364
|
+
id: check_diff
|
|
365
|
+
run: npx check-should-run-type-checks
|
|
366
|
+
|
|
367
|
+
- name: Run type checks
|
|
368
|
+
if: steps.check_diff.outputs.should_run == 'true'
|
|
369
|
+
run: npm run type-check
|
|
370
|
+
```
|
|
371
|
+
|
|
326
372
|
### Command Execution
|
|
327
373
|
|
|
328
374
|
#### `$(command: string, options?: ExecOptions): Promise<ExecResult>`
|
|
@@ -438,6 +484,106 @@ type Ret = Promise<
|
|
|
438
484
|
>;
|
|
439
485
|
```
|
|
440
486
|
|
|
487
|
+
### Workspace Management Utilities
|
|
488
|
+
|
|
489
|
+
#### `runCmdInStagesAcrossWorkspaces(options): Promise<void>`
|
|
490
|
+
|
|
491
|
+
Executes a npm script command across all workspace packages in dependency order stages. Packages are grouped into stages where each stage contains packages whose dependencies have been completed in previous stages. Uses fail-fast behavior.
|
|
492
|
+
|
|
493
|
+
```typescript
|
|
494
|
+
import { runCmdInStagesAcrossWorkspaces } from 'ts-repo-utils';
|
|
495
|
+
|
|
496
|
+
// Run build in dependency order
|
|
497
|
+
await runCmdInStagesAcrossWorkspaces({
|
|
498
|
+
rootPackageJsonDir: '.',
|
|
499
|
+
cmd: 'build',
|
|
500
|
+
concurrency: 3,
|
|
501
|
+
filterWorkspacePattern: (name) => !name.includes('deprecated'),
|
|
502
|
+
});
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Options:**
|
|
506
|
+
|
|
507
|
+
- `rootPackageJsonDir` - Directory containing the root package.json file
|
|
508
|
+
- `cmd` - The npm script command to execute in each package
|
|
509
|
+
- `concurrency?` - Maximum packages to process simultaneously within each stage (default: 3)
|
|
510
|
+
- `filterWorkspacePattern?` - Optional function to filter packages by name
|
|
511
|
+
|
|
512
|
+
#### `runCmdInParallelAcrossWorkspaces(options): Promise<void>`
|
|
513
|
+
|
|
514
|
+
Executes a npm script command across all workspace packages in parallel. Uses fail-fast behavior - stops execution immediately when any package fails.
|
|
515
|
+
|
|
516
|
+
```typescript
|
|
517
|
+
import { runCmdInParallelAcrossWorkspaces } from 'ts-repo-utils';
|
|
518
|
+
|
|
519
|
+
// Run tests in parallel across all packages
|
|
520
|
+
await runCmdInParallelAcrossWorkspaces({
|
|
521
|
+
rootPackageJsonDir: '.',
|
|
522
|
+
cmd: 'test',
|
|
523
|
+
concurrency: 5,
|
|
524
|
+
});
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**Options:**
|
|
528
|
+
|
|
529
|
+
- `rootPackageJsonDir` - Directory containing the root package.json file
|
|
530
|
+
- `cmd` - The npm script command to execute in each package
|
|
531
|
+
- `concurrency?` - Maximum packages to process simultaneously (default: 3)
|
|
532
|
+
- `filterWorkspacePattern?` - Optional function to filter packages by name
|
|
533
|
+
|
|
534
|
+
#### `getWorkspacePackages(rootPackageJsonDir): Promise<readonly Package[]>`
|
|
535
|
+
|
|
536
|
+
Retrieves all workspace packages from a monorepo based on the workspace patterns defined in the root package.json file.
|
|
537
|
+
|
|
538
|
+
```typescript
|
|
539
|
+
import { getWorkspacePackages } from 'ts-repo-utils';
|
|
540
|
+
|
|
541
|
+
const packages = await getWorkspacePackages('.');
|
|
542
|
+
console.log(packages.map((pkg) => pkg.name));
|
|
543
|
+
// ['@myorg/package-a', '@myorg/package-b', ...]
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**Return Type:**
|
|
547
|
+
|
|
548
|
+
```typescript
|
|
549
|
+
type Package = {
|
|
550
|
+
name: string;
|
|
551
|
+
path: string;
|
|
552
|
+
packageJson: JsonValue;
|
|
553
|
+
dependencies: Record<string, string>;
|
|
554
|
+
};
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
#### `executeParallel(packages, scriptName, concurrency?): Promise<readonly Result[]>`
|
|
558
|
+
|
|
559
|
+
Executes a npm script across multiple packages in parallel with a concurrency limit. Lower-level function used by `runCmdInParallelAcrossWorkspaces`.
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
import { executeParallel, getWorkspacePackages } from 'ts-repo-utils';
|
|
563
|
+
|
|
564
|
+
const packages = await getWorkspacePackages('.');
|
|
565
|
+
await executeParallel(packages, 'lint', 4);
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
#### `executeStages(packages, scriptName, concurrency?): Promise<void>`
|
|
569
|
+
|
|
570
|
+
Executes a npm script across packages in dependency order stages. Lower-level function used by `runCmdInStagesAcrossWorkspaces`.
|
|
571
|
+
|
|
572
|
+
```typescript
|
|
573
|
+
import { executeStages, getWorkspacePackages } from 'ts-repo-utils';
|
|
574
|
+
|
|
575
|
+
const packages = await getWorkspacePackages('.');
|
|
576
|
+
await executeStages(packages, 'build', 3);
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
**Features:**
|
|
580
|
+
|
|
581
|
+
- Automatic dependency graph construction
|
|
582
|
+
- Topological sorting for correct build order
|
|
583
|
+
- Parallel execution within each stage
|
|
584
|
+
- Fail-fast behavior on errors
|
|
585
|
+
- Circular dependency detection
|
|
586
|
+
|
|
441
587
|
### Index File Generation
|
|
442
588
|
|
|
443
589
|
#### `genIndex(config: GenIndexConfig): Promise<Result<undefined, unknown>>`
|
|
@@ -8,6 +8,7 @@ import '../node-global.mjs';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const formatFiles: (files: readonly string[], options?: Readonly<{
|
|
10
10
|
silent?: boolean;
|
|
11
|
+
ignore?: (filePath: string) => boolean;
|
|
11
12
|
}>) => Promise<Result<undefined, readonly unknown[]>>;
|
|
12
13
|
/**
|
|
13
14
|
* Format files matching the given glob pattern using Prettier
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.mts","sourceRoot":"","sources":["../../src/functions/format.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAuB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,MAAM,EAAE,EACxB,UAAU,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.mts","sourceRoot":"","sources":["../../src/functions/format.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAuB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,MAAM,EAAE,EACxB,UAAU,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC,CAAC,KACD,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC,CAwF/C,CAAC;AAuDF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,UAAU,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KACvC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAwBpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC,KACD,OAAO,CACR,MAAM,CACJ,SAAS,EACT,aAAa,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,OAAO,EAAE,CACnE,CAsDF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,UAAU,QAAQ,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC,KACD,OAAO,CACR,MAAM,CACJ,SAAS,EACP,aAAa,GACb,QAAQ,CAAC;IACP,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,GACF,SAAS,OAAO,EAAE,CACrB,CA8EF,CAAC"}
|
|
@@ -38,7 +38,8 @@ const formatFiles = async (files, options) => {
|
|
|
38
38
|
const fileInfo = await prettier.getFileInfo(filePath, {
|
|
39
39
|
ignorePath: '.prettierignore',
|
|
40
40
|
});
|
|
41
|
-
if (fileInfo.ignored
|
|
41
|
+
if (fileInfo.ignored ||
|
|
42
|
+
(options?.ignore ?? defaultIgnoreFn)(filePath)) {
|
|
42
43
|
conditionalEcho(`Skipping ignored file: ${filePath}`);
|
|
43
44
|
return Result.ok(undefined);
|
|
44
45
|
}
|
|
@@ -83,6 +84,52 @@ const formatFiles = async (files, options) => {
|
|
|
83
84
|
return Result.err(errors);
|
|
84
85
|
}
|
|
85
86
|
};
|
|
87
|
+
const defaultIgnoreFn = (filePath) => {
|
|
88
|
+
const filename = path.basename(filePath);
|
|
89
|
+
return (ignoreFiles.has(filename) ||
|
|
90
|
+
filename.startsWith('.env') ||
|
|
91
|
+
ignoreExtensions.some((ext) => filePath.endsWith(ext)) ||
|
|
92
|
+
ignoreDirs.some((dir) => filename.startsWith(dir)));
|
|
93
|
+
};
|
|
94
|
+
const ignoreFiles = new Set([
|
|
95
|
+
'.DS_Store',
|
|
96
|
+
'package-lock.json',
|
|
97
|
+
'LICENSE',
|
|
98
|
+
'.prettierignore',
|
|
99
|
+
'.editorconfig',
|
|
100
|
+
'.gitignore',
|
|
101
|
+
'.npmignore',
|
|
102
|
+
]);
|
|
103
|
+
const ignoreExtensions = [
|
|
104
|
+
'.svg',
|
|
105
|
+
'.png',
|
|
106
|
+
'.jpg',
|
|
107
|
+
'.jpeg',
|
|
108
|
+
'.gif',
|
|
109
|
+
'.bmp',
|
|
110
|
+
'.tiff',
|
|
111
|
+
'.bak',
|
|
112
|
+
'.log',
|
|
113
|
+
'.zip',
|
|
114
|
+
'.tar',
|
|
115
|
+
'.gz',
|
|
116
|
+
'.7z',
|
|
117
|
+
'.mp3',
|
|
118
|
+
'.mp4',
|
|
119
|
+
'.avi',
|
|
120
|
+
'.mkv',
|
|
121
|
+
'.tsbuildinfo',
|
|
122
|
+
];
|
|
123
|
+
const ignoreDirs = [
|
|
124
|
+
'node_modules',
|
|
125
|
+
'.git',
|
|
126
|
+
'dist',
|
|
127
|
+
'build',
|
|
128
|
+
'out',
|
|
129
|
+
'.cache',
|
|
130
|
+
'.vscode',
|
|
131
|
+
'.yarn',
|
|
132
|
+
];
|
|
86
133
|
/**
|
|
87
134
|
* Format files matching the given glob pattern using Prettier
|
|
88
135
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.mjs","sources":["../../src/functions/format.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAWA;;;;AAIG;AACI,MAAM,WAAW,GAAG,OACzB,KAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"format.mjs","sources":["../../src/functions/format.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-repo-utils",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript"
|
|
@@ -81,14 +81,14 @@
|
|
|
81
81
|
"@semantic-release/git": "^10.0.1",
|
|
82
82
|
"@semantic-release/github": "^11.0.5",
|
|
83
83
|
"@semantic-release/npm": "^12.0.2",
|
|
84
|
-
"@semantic-release/release-notes-generator": "^14.0
|
|
84
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
85
85
|
"@types/node": "^24.3.0",
|
|
86
86
|
"@vitest/coverage-v8": "^3.2.4",
|
|
87
87
|
"@vitest/ui": "^3.2.4",
|
|
88
88
|
"conventional-changelog-conventionalcommits": "^9.1.0",
|
|
89
89
|
"cspell": "^9.2.0",
|
|
90
90
|
"dedent": "^1.6.0",
|
|
91
|
-
"eslint": "^9.
|
|
91
|
+
"eslint": "^9.35.0",
|
|
92
92
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
93
93
|
"eslint-plugin-array-func": "5.0.2",
|
|
94
94
|
"eslint-plugin-functional": "9.0.2",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"eslint-plugin-prefer-arrow-functions": "3.6.2",
|
|
97
97
|
"eslint-plugin-promise": "7.2.1",
|
|
98
98
|
"eslint-plugin-security": "3.0.1",
|
|
99
|
-
"eslint-plugin-unicorn": "
|
|
99
|
+
"eslint-plugin-unicorn": "61.0.1",
|
|
100
100
|
"eslint-plugin-vitest": "0.5.4",
|
|
101
101
|
"markdownlint-cli2": "^0.18.1",
|
|
102
102
|
"npm-run-all2": "^8.0.4",
|
|
@@ -104,14 +104,14 @@
|
|
|
104
104
|
"prettier-plugin-jsdoc": "^1.3.3",
|
|
105
105
|
"prettier-plugin-organize-imports": "^4.2.0",
|
|
106
106
|
"prettier-plugin-packagejson": "^2.5.19",
|
|
107
|
-
"rollup": "^4.
|
|
107
|
+
"rollup": "^4.49.0",
|
|
108
108
|
"semantic-release": "^24.2.7",
|
|
109
109
|
"ts-type-forge": "^2.1.1",
|
|
110
110
|
"tslib": "^2.8.1",
|
|
111
|
-
"typedoc": "^0.28.
|
|
111
|
+
"typedoc": "^0.28.12",
|
|
112
112
|
"typedoc-plugin-markdown": "^4.8.1",
|
|
113
113
|
"typescript": "^5.9.2",
|
|
114
|
-
"typescript-eslint": "^8.
|
|
114
|
+
"typescript-eslint": "^8.42.0",
|
|
115
115
|
"vitest": "^3.2.4"
|
|
116
116
|
},
|
|
117
117
|
"peerDependencies": {
|
package/src/cmd/gen-index-ts.mts
CHANGED
package/src/functions/format.mts
CHANGED
|
@@ -16,7 +16,10 @@ import {
|
|
|
16
16
|
*/
|
|
17
17
|
export const formatFiles = async (
|
|
18
18
|
files: readonly string[],
|
|
19
|
-
options?: Readonly<{
|
|
19
|
+
options?: Readonly<{
|
|
20
|
+
silent?: boolean;
|
|
21
|
+
ignore?: (filePath: string) => boolean;
|
|
22
|
+
}>,
|
|
20
23
|
): Promise<Result<undefined, readonly unknown[]>> => {
|
|
21
24
|
const silent = options?.silent ?? false;
|
|
22
25
|
|
|
@@ -55,7 +58,10 @@ export const formatFiles = async (
|
|
|
55
58
|
ignorePath: '.prettierignore',
|
|
56
59
|
});
|
|
57
60
|
|
|
58
|
-
if (
|
|
61
|
+
if (
|
|
62
|
+
fileInfo.ignored ||
|
|
63
|
+
(options?.ignore ?? defaultIgnoreFn)(filePath)
|
|
64
|
+
) {
|
|
59
65
|
conditionalEcho(`Skipping ignored file: ${filePath}`);
|
|
60
66
|
return Result.ok(undefined);
|
|
61
67
|
}
|
|
@@ -104,6 +110,59 @@ export const formatFiles = async (
|
|
|
104
110
|
}
|
|
105
111
|
};
|
|
106
112
|
|
|
113
|
+
const defaultIgnoreFn = (filePath: string): boolean => {
|
|
114
|
+
const filename = path.basename(filePath);
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
ignoreFiles.has(filename) ||
|
|
118
|
+
filename.startsWith('.env') ||
|
|
119
|
+
ignoreExtensions.some((ext) => filePath.endsWith(ext)) ||
|
|
120
|
+
ignoreDirs.some((dir) => filename.startsWith(dir))
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const ignoreFiles: ReadonlySet<string> = new Set([
|
|
125
|
+
'.DS_Store',
|
|
126
|
+
'package-lock.json',
|
|
127
|
+
'LICENSE',
|
|
128
|
+
'.prettierignore',
|
|
129
|
+
'.editorconfig',
|
|
130
|
+
'.gitignore',
|
|
131
|
+
'.npmignore',
|
|
132
|
+
]);
|
|
133
|
+
|
|
134
|
+
const ignoreExtensions: readonly string[] = [
|
|
135
|
+
'.svg',
|
|
136
|
+
'.png',
|
|
137
|
+
'.jpg',
|
|
138
|
+
'.jpeg',
|
|
139
|
+
'.gif',
|
|
140
|
+
'.bmp',
|
|
141
|
+
'.tiff',
|
|
142
|
+
'.bak',
|
|
143
|
+
'.log',
|
|
144
|
+
'.zip',
|
|
145
|
+
'.tar',
|
|
146
|
+
'.gz',
|
|
147
|
+
'.7z',
|
|
148
|
+
'.mp3',
|
|
149
|
+
'.mp4',
|
|
150
|
+
'.avi',
|
|
151
|
+
'.mkv',
|
|
152
|
+
'.tsbuildinfo',
|
|
153
|
+
] as const;
|
|
154
|
+
|
|
155
|
+
const ignoreDirs: readonly string[] = [
|
|
156
|
+
'node_modules',
|
|
157
|
+
'.git',
|
|
158
|
+
'dist',
|
|
159
|
+
'build',
|
|
160
|
+
'out',
|
|
161
|
+
'.cache',
|
|
162
|
+
'.vscode',
|
|
163
|
+
'.yarn',
|
|
164
|
+
] as const;
|
|
165
|
+
|
|
107
166
|
/**
|
|
108
167
|
* Format files matching the given glob pattern using Prettier
|
|
109
168
|
*
|