Skip to content

Commit 19de659

Browse files
feat(mono-pub): replace glob with globby to support negative globs (#33)
* feat(mono-pub): replace glob with globby to support negative globs * chore(global): sync lockfile
1 parent ea9c2f6 commit 19de659

File tree

4 files changed

+95
-67
lines changed

4 files changed

+95
-67
lines changed

packages/mono-pub/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"typescript": "^5.0.4"
6767
},
6868
"dependencies": {
69-
"glob": "^10.2.2",
69+
"globby": "^11.1.0",
7070
"lodash": "^4.17.21",
7171
"signale": "^1.4.0"
7272
},

packages/mono-pub/src/utils/path.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ describe('getAllPackages', () => {
3636
expect(packages).toHaveLength(3)
3737
expect(packages).toEqual(expectContainingPackages(['pkg1', 'pkg3', 'lib1'], 'filtering'))
3838
})
39+
it('Should work with negative globs', async () => {
40+
const packages = await getAllPackages(['packages/*', '!packages/pkg3'], cwd)
41+
expect(packages).toHaveLength(1)
42+
expect(packages).toEqual(expectContainingPackages(['pkg1'], 'filtering'))
43+
})
3944
it('Should work with relative and absolute paths to package.json', async () => {
4045
const packages = await getAllPackages(
4146
['packages/pkg1/package.json', path.join(cwd, 'libs/lib1/package.json')],

packages/mono-pub/src/utils/path.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'path'
22
import fs, { promises as fsPromises } from 'fs'
3-
import { glob } from 'glob'
3+
import globby from 'globby'
44
import uniq from 'lodash/uniq'
55
import get from 'lodash/get'
66
import type { BasePackageInfo } from '@/types'
@@ -21,14 +21,20 @@ async function _scanPackage(filePath: string): Promise<PackageScanInfo> {
2121
}
2222

2323
export async function getAllPackages(paths: Array<string>, cwd: string): Promise<Array<BasePackageInfo>> {
24-
const matches = await glob(paths, { cwd, stat: true, withFileTypes: true })
24+
const matches = await globby(paths, {
25+
cwd,
26+
expandDirectories: false,
27+
onlyFiles: false,
28+
absolute: true,
29+
objectMode: true,
30+
})
2531

2632
const fileNames: Array<string> = []
2733
for (const match of matches) {
28-
if (match.isFile() && match.name === 'package.json') {
29-
fileNames.push(match.fullpath())
30-
} else if (match.isDirectory()) {
31-
const fullPath = match.fullpath()
34+
if (match.dirent.isFile() && path.basename(match.name) === 'package.json') {
35+
fileNames.push(match.path)
36+
} else if (match.dirent.isDirectory()) {
37+
const fullPath = match.path
3238
// NOTE: Repo traversal is a part of package logic
3339
// nosemgrep: javascript.lang.security.audit.path-traversal.path-join-resolve-traversal.path-join-resolve-traversal
3440
const pkgPath = path.join(fullPath, 'package.json')

yarn.lock

Lines changed: 77 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,6 +2031,13 @@ __metadata:
20312031
languageName: node
20322032
linkType: hard
20332033

2034+
"array-union@npm:^2.1.0":
2035+
version: 2.1.0
2036+
resolution: "array-union@npm:2.1.0"
2037+
checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d
2038+
languageName: node
2039+
linkType: hard
2040+
20342041
"array.prototype.findlastindex@npm:^1.2.5":
20352042
version: 1.2.5
20362043
resolution: "array.prototype.findlastindex@npm:1.2.5"
@@ -2219,6 +2226,15 @@ __metadata:
22192226
languageName: node
22202227
linkType: hard
22212228

2229+
"braces@npm:^3.0.3":
2230+
version: 3.0.3
2231+
resolution: "braces@npm:3.0.3"
2232+
dependencies:
2233+
fill-range: ^7.1.1
2234+
checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
2235+
languageName: node
2236+
linkType: hard
2237+
22222238
"browserslist@npm:^4.21.3":
22232239
version: 4.21.5
22242240
resolution: "browserslist@npm:4.21.5"
@@ -2735,6 +2751,15 @@ __metadata:
27352751
languageName: node
27362752
linkType: hard
27372753

2754+
"dir-glob@npm:^3.0.1":
2755+
version: 3.0.1
2756+
resolution: "dir-glob@npm:3.0.1"
2757+
dependencies:
2758+
path-type: ^4.0.0
2759+
checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615
2760+
languageName: node
2761+
linkType: hard
2762+
27382763
"doctrine@npm:^2.1.0":
27392764
version: 2.1.0
27402765
resolution: "doctrine@npm:2.1.0"
@@ -3323,6 +3348,19 @@ __metadata:
33233348
languageName: node
33243349
linkType: hard
33253350

3351+
"fast-glob@npm:^3.2.9":
3352+
version: 3.3.3
3353+
resolution: "fast-glob@npm:3.3.3"
3354+
dependencies:
3355+
"@nodelib/fs.stat": ^2.0.2
3356+
"@nodelib/fs.walk": ^1.2.3
3357+
glob-parent: ^5.1.2
3358+
merge2: ^1.3.0
3359+
micromatch: ^4.0.8
3360+
checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd
3361+
languageName: node
3362+
linkType: hard
3363+
33263364
"fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2":
33273365
version: 3.3.2
33283366
resolution: "fast-glob@npm:3.3.2"
@@ -3407,6 +3445,15 @@ __metadata:
34073445
languageName: node
34083446
linkType: hard
34093447

3448+
"fill-range@npm:^7.1.1":
3449+
version: 7.1.1
3450+
resolution: "fill-range@npm:7.1.1"
3451+
dependencies:
3452+
to-regex-range: ^5.0.1
3453+
checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
3454+
languageName: node
3455+
linkType: hard
3456+
34103457
"find-up@npm:^2.0.0":
34113458
version: 2.1.0
34123459
resolution: "find-up@npm:2.1.0"
@@ -3652,21 +3699,6 @@ __metadata:
36523699
languageName: node
36533700
linkType: hard
36543701

3655-
"glob@npm:^10.2.2":
3656-
version: 10.2.2
3657-
resolution: "glob@npm:10.2.2"
3658-
dependencies:
3659-
foreground-child: ^3.1.0
3660-
jackspeak: ^2.0.3
3661-
minimatch: ^9.0.0
3662-
minipass: ^5.0.0
3663-
path-scurry: ^1.7.0
3664-
bin:
3665-
glob: dist/cjs/src/bin.js
3666-
checksum: 33cbbbea74deb605107715f2ee51937953271ff2f6ce712b57d95a714e2f1bf272fa2c2b0c5101097bf98d3e5d40856941af498b05bce07567aca1a6e3cc7ae9
3667-
languageName: node
3668-
linkType: hard
3669-
36703702
"glob@npm:^10.3.10":
36713703
version: 10.4.5
36723704
resolution: "glob@npm:10.4.5"
@@ -3734,6 +3766,20 @@ __metadata:
37343766
languageName: node
37353767
linkType: hard
37363768

3769+
"globby@npm:^11.1.0":
3770+
version: 11.1.0
3771+
resolution: "globby@npm:11.1.0"
3772+
dependencies:
3773+
array-union: ^2.1.0
3774+
dir-glob: ^3.0.1
3775+
fast-glob: ^3.2.9
3776+
ignore: ^5.2.0
3777+
merge2: ^1.4.1
3778+
slash: ^3.0.0
3779+
checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6
3780+
languageName: node
3781+
linkType: hard
3782+
37373783
"gopd@npm:^1.0.1, gopd@npm:^1.1.0, gopd@npm:^1.2.0":
37383784
version: 1.2.0
37393785
resolution: "gopd@npm:1.2.0"
@@ -4382,19 +4428,6 @@ __metadata:
43824428
languageName: node
43834429
linkType: hard
43844430

4385-
"jackspeak@npm:^2.0.3":
4386-
version: 2.1.1
4387-
resolution: "jackspeak@npm:2.1.1"
4388-
dependencies:
4389-
"@pkgjs/parseargs": ^0.11.0
4390-
cliui: ^8.0.1
4391-
dependenciesMeta:
4392-
"@pkgjs/parseargs":
4393-
optional: true
4394-
checksum: ddd1a41c613dd12ec1a3568dd014e42d166f7f007e0d6ea3bf1d1d0f5480147c17ff27606e9131aa23489849e67bd6abf0b8cff90b17fa65271a35cbf74b2b1e
4395-
languageName: node
4396-
linkType: hard
4397-
43984431
"jackspeak@npm:^3.1.2":
43994432
version: 3.4.3
44004433
resolution: "jackspeak@npm:3.4.3"
@@ -5140,13 +5173,6 @@ __metadata:
51405173
languageName: node
51415174
linkType: hard
51425175

5143-
"lru-cache@npm:^9.0.0":
5144-
version: 9.1.1
5145-
resolution: "lru-cache@npm:9.1.1"
5146-
checksum: 4d703bb9b66216bbee55ead82a9682820a2b6acbdfca491b235390b1ef1056000a032d56dfb373fdf9ad4492f1fa9d04cc9a05a77f25bd7ce6901d21ad9b68b7
5147-
languageName: node
5148-
linkType: hard
5149-
51505176
"make-dir@npm:^3.0.0":
51515177
version: 3.1.0
51525178
resolution: "make-dir@npm:3.1.0"
@@ -5236,7 +5262,7 @@ __metadata:
52365262
languageName: node
52375263
linkType: hard
52385264

5239-
"merge2@npm:^1.3.0":
5265+
"merge2@npm:^1.3.0, merge2@npm:^1.4.1":
52405266
version: 1.4.1
52415267
resolution: "merge2@npm:1.4.1"
52425268
checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
@@ -5253,6 +5279,16 @@ __metadata:
52535279
languageName: node
52545280
linkType: hard
52555281

5282+
"micromatch@npm:^4.0.8":
5283+
version: 4.0.8
5284+
resolution: "micromatch@npm:4.0.8"
5285+
dependencies:
5286+
braces: ^3.0.3
5287+
picomatch: ^2.3.1
5288+
checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
5289+
languageName: node
5290+
linkType: hard
5291+
52565292
"mimic-fn@npm:^2.1.0":
52575293
version: 2.1.0
52585294
resolution: "mimic-fn@npm:2.1.0"
@@ -5285,15 +5321,6 @@ __metadata:
52855321
languageName: node
52865322
linkType: hard
52875323

5288-
"minimatch@npm:^9.0.0":
5289-
version: 9.0.0
5290-
resolution: "minimatch@npm:9.0.0"
5291-
dependencies:
5292-
brace-expansion: ^2.0.1
5293-
checksum: 7bd57899edd1d1b0560f50b5b2d1ea4ad2a366c5a2c8e0a943372cf2f200b64c256bae45a87a80915adbce27fa36526264296ace0da57b600481fe5ea3e372e5
5294-
languageName: node
5295-
linkType: hard
5296-
52975324
"minimatch@npm:^9.0.4":
52985325
version: 9.0.5
52995326
resolution: "minimatch@npm:9.0.5"
@@ -5388,13 +5415,6 @@ __metadata:
53885415
languageName: node
53895416
linkType: hard
53905417

5391-
"minipass@npm:^5.0.0":
5392-
version: 5.0.0
5393-
resolution: "minipass@npm:5.0.0"
5394-
checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea
5395-
languageName: node
5396-
linkType: hard
5397-
53985418
"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.1.2":
53995419
version: 7.1.2
54005420
resolution: "minipass@npm:7.1.2"
@@ -5431,7 +5451,7 @@ __metadata:
54315451
"@types/signale": ^1.4.4
54325452
eslint: ^9.16.0
54335453
fix-tsup-cjs: ^1.2.0
5434-
glob: ^10.2.2
5454+
globby: ^11.1.0
54355455
lodash: ^4.17.21
54365456
signale: ^1.4.0
54375457
tmp: ^0.2.1
@@ -5874,13 +5894,10 @@ __metadata:
58745894
languageName: node
58755895
linkType: hard
58765896

5877-
"path-scurry@npm:^1.7.0":
5878-
version: 1.7.0
5879-
resolution: "path-scurry@npm:1.7.0"
5880-
dependencies:
5881-
lru-cache: ^9.0.0
5882-
minipass: ^5.0.0
5883-
checksum: 4e86df0fa6848cef1ba672d4a332b8dbd0297c42d5123bcc419d714c34b25ee6775b0d2e66dd5e698a38e9bcd808f8fc47333e3a3357307cada98e16bfae8b98
5897+
"path-type@npm:^4.0.0":
5898+
version: 4.0.0
5899+
resolution: "path-type@npm:4.0.0"
5900+
checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45
58845901
languageName: node
58855902
linkType: hard
58865903

0 commit comments

Comments
 (0)