@teammy/server 0.1.5 → 0.1.7
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 +2 -2
- package/dist/main.js +10936 -6840
- package/dist/native-pi-entry.js +14 -1
- package/dist/project-pi-entry.js +51 -11
- package/dist/runtime/workflows/task-bootstrap/prompt.md +2 -0
- package/dist/web/assets/Assistant-BeYamS0w.js +1 -0
- package/dist/web/assets/Assistant-C7QfFYLo.css +1 -0
- package/dist/web/assets/Dashboard-BzmrE4Xv.js +1 -0
- package/dist/web/assets/Files-BvCYgjVV.js +1 -0
- package/dist/web/assets/{Markdown-oZagG-wy.js → Markdown-BRPMsc7D.js} +4 -4
- package/dist/web/assets/Materials-CK-mbNmo.css +1 -0
- package/dist/web/assets/Materials-DK3CkLr0.js +6 -0
- package/dist/web/assets/Sessions-D_579m-e.js +1 -0
- package/dist/web/assets/WorkspaceTree-fMDtGIFa.js +1 -0
- package/dist/web/assets/{file-links-CD346_jf.js → file-links-I1K8CwVK.js} +1 -1
- package/dist/web/assets/{index-Be5hGscJ.css → index-CTIAGUGG.css} +1 -1
- package/dist/web/assets/index-DQsx-e5d.js +66 -0
- package/dist/web/downloads/teammy-skill.zip +0 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@isaacs/nonrecursive-glob-match/LICENSE.md +55 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/README.md +333 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.d.ts +114 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.js +762 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.min.js +3 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.d.ts +4 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.d.ts.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.js +142 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.js.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.d.ts +114 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.js +758 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.min.js +3 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.min.js.map +7 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.d.ts +4 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.d.ts.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.js +138 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.js.map +1 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/package.json +56 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/src/index.ts +900 -0
- package/node_modules/@isaacs/nonrecursive-glob-match/src/parse-class.ts +158 -0
- package/node_modules/glob/README.md +388 -214
- package/node_modules/glob/dist/commonjs/glob.d.ts +20 -11
- package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/glob.js +22 -29
- package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
- package/node_modules/glob/dist/commonjs/has-magic.d.ts +1 -1
- package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/has-magic.js +1 -4
- package/node_modules/glob/dist/commonjs/has-magic.js.map +1 -1
- package/node_modules/glob/dist/commonjs/ignore.d.ts +16 -4
- package/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/ignore.js +24 -4
- package/node_modules/glob/dist/commonjs/ignore.js.map +1 -1
- package/node_modules/glob/dist/commonjs/index.d.ts +3 -2
- package/node_modules/glob/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/index.js.map +1 -1
- package/node_modules/glob/dist/commonjs/index.min.js +2 -3
- package/node_modules/glob/dist/commonjs/index.min.js.map +4 -4
- package/node_modules/glob/dist/commonjs/pattern.d.ts +10 -3
- package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/pattern.js +27 -15
- package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
- package/node_modules/glob/dist/commonjs/processor.d.ts +23 -10
- package/node_modules/glob/dist/commonjs/processor.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/processor.js +36 -23
- package/node_modules/glob/dist/commonjs/processor.js.map +1 -1
- package/node_modules/glob/dist/commonjs/walker.d.ts +19 -17
- package/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/walker.js +50 -35
- package/node_modules/glob/dist/commonjs/walker.js.map +1 -1
- package/node_modules/glob/dist/esm/glob.d.ts +20 -11
- package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/glob.js +22 -29
- package/node_modules/glob/dist/esm/glob.js.map +1 -1
- package/node_modules/glob/dist/esm/has-magic.d.ts +1 -1
- package/node_modules/glob/dist/esm/has-magic.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/has-magic.js +1 -4
- package/node_modules/glob/dist/esm/has-magic.js.map +1 -1
- package/node_modules/glob/dist/esm/ignore.d.ts +16 -4
- package/node_modules/glob/dist/esm/ignore.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/ignore.js +25 -5
- package/node_modules/glob/dist/esm/ignore.js.map +1 -1
- package/node_modules/glob/dist/esm/index.d.ts +3 -2
- package/node_modules/glob/dist/esm/index.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/index.js.map +1 -1
- package/node_modules/glob/dist/esm/index.min.js +2 -3
- package/node_modules/glob/dist/esm/index.min.js.map +4 -4
- package/node_modules/glob/dist/esm/pattern.d.ts +10 -3
- package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/pattern.js +27 -15
- package/node_modules/glob/dist/esm/pattern.js.map +1 -1
- package/node_modules/glob/dist/esm/processor.d.ts +23 -10
- package/node_modules/glob/dist/esm/processor.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/processor.js +36 -23
- package/node_modules/glob/dist/esm/processor.js.map +1 -1
- package/node_modules/glob/dist/esm/walker.d.ts +19 -17
- package/node_modules/glob/dist/esm/walker.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/walker.js +51 -36
- package/node_modules/glob/dist/esm/walker.js.map +1 -1
- package/node_modules/glob/package.json +28 -12
- package/node_modules/glob/src/glob.ts +655 -0
- package/node_modules/glob/src/has-magic.ts +23 -0
- package/node_modules/glob/src/ignore.ts +162 -0
- package/node_modules/glob/src/index.ts +225 -0
- package/node_modules/glob/src/pattern.ts +286 -0
- package/node_modules/glob/src/processor.ts +333 -0
- package/node_modules/glob/src/walker.ts +523 -0
- package/node_modules/minimatch/README.md +125 -107
- package/node_modules/minimatch/dist/commonjs/index.d.ts +49 -38
- package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/minimatch/dist/commonjs/index.js +782 -359
- package/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
- package/node_modules/minimatch/dist/esm/index.d.ts +49 -38
- package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
- package/node_modules/minimatch/dist/esm/index.js +781 -356
- package/node_modules/minimatch/dist/esm/index.js.map +1 -1
- package/node_modules/minimatch/package.json +5 -4
- package/node_modules/path-scurry/README.md +0 -1
- package/node_modules/path-scurry/dist/commonjs/index.d.ts +7 -0
- package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/path-scurry/dist/commonjs/index.js +59 -21
- package/node_modules/path-scurry/dist/commonjs/index.js.map +1 -1
- package/node_modules/path-scurry/dist/esm/index.d.ts +7 -0
- package/node_modules/path-scurry/dist/esm/index.d.ts.map +1 -1
- package/node_modules/path-scurry/dist/esm/index.js +42 -14
- package/node_modules/path-scurry/dist/esm/index.js.map +1 -1
- package/node_modules/path-scurry/package.json +4 -4
- package/package.json +2 -1
- package/dist/web/assets/Assistant-B3h2yQF3.css +0 -1
- package/dist/web/assets/Assistant-Dm_p8EZl.js +0 -1
- package/dist/web/assets/Dashboard-fwW9NxcC.js +0 -1
- package/dist/web/assets/Files-D-KCDWmO.js +0 -1
- package/dist/web/assets/Sessions-BQhGiLvz.js +0 -1
- package/dist/web/assets/WorkspaceTree-B9733pV3.js +0 -1
- package/dist/web/assets/index-BiiPuwDi.js +0 -66
- package/node_modules/minimatch/dist/commonjs/ast.d.ts +0 -22
- package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +0 -1
- package/node_modules/minimatch/dist/commonjs/ast.js +0 -845
- package/node_modules/minimatch/dist/commonjs/ast.js.map +0 -1
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +0 -8
- package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +0 -1
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js +0 -150
- package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +0 -1
- package/node_modules/minimatch/dist/esm/ast.d.ts +0 -22
- package/node_modules/minimatch/dist/esm/ast.d.ts.map +0 -1
- package/node_modules/minimatch/dist/esm/ast.js +0 -841
- package/node_modules/minimatch/dist/esm/ast.js.map +0 -1
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +0 -8
- package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +0 -1
- package/node_modules/minimatch/dist/esm/brace-expressions.js +0 -146
- package/node_modules/minimatch/dist/esm/brace-expressions.js.map +0 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// give it a pattern, and it'll be able to tell you if
|
|
2
|
+
// a given path should be ignored.
|
|
3
|
+
// Ignoring a path ignores its children if the pattern ends in /**
|
|
4
|
+
// Ignores are always parsed in dot:true mode
|
|
5
|
+
|
|
6
|
+
import type { MinimatchOptions } from 'minimatch'
|
|
7
|
+
import { escape, Minimatch } from 'minimatch'
|
|
8
|
+
import type { Path } from 'path-scurry'
|
|
9
|
+
import { Pattern } from './pattern.js'
|
|
10
|
+
import type { GlobWalkerOpts } from './walker.js'
|
|
11
|
+
|
|
12
|
+
export interface IgnoreLike {
|
|
13
|
+
ignored?: (p: Path) => boolean
|
|
14
|
+
childrenIgnored?: (p: Path) => boolean
|
|
15
|
+
add?: (ignore: string) => void
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const defaultPlatform: NodeJS.Platform =
|
|
19
|
+
(
|
|
20
|
+
typeof process === 'object' &&
|
|
21
|
+
process &&
|
|
22
|
+
typeof process.platform === 'string'
|
|
23
|
+
) ?
|
|
24
|
+
process.platform
|
|
25
|
+
: 'linux'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Class used to process ignored patterns
|
|
29
|
+
*/
|
|
30
|
+
export class Ignore implements IgnoreLike {
|
|
31
|
+
relative: Minimatch[]
|
|
32
|
+
relativeChildren: Minimatch[]
|
|
33
|
+
absolute: Minimatch[]
|
|
34
|
+
absoluteChildren: Minimatch[]
|
|
35
|
+
platform: NodeJS.Platform
|
|
36
|
+
mmopts: MinimatchOptions
|
|
37
|
+
/**
|
|
38
|
+
* The escaped glob for the directory that a pattern starting with
|
|
39
|
+
* `/` is rooted at, with no trailing `/`.
|
|
40
|
+
*/
|
|
41
|
+
slashRoot: string
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Patterns that start with `/` (but not drive letters or UNC paths
|
|
45
|
+
* on Windows) start at the `root` option if it is set, or else at
|
|
46
|
+
* the root of `cwd`, the same as non-ignored patterns. If `cwd` is
|
|
47
|
+
* not provided, they start at `/`.
|
|
48
|
+
*/
|
|
49
|
+
constructor(
|
|
50
|
+
ignored: string[],
|
|
51
|
+
{
|
|
52
|
+
nobrace,
|
|
53
|
+
nocase,
|
|
54
|
+
noext,
|
|
55
|
+
noglobstar,
|
|
56
|
+
normalize,
|
|
57
|
+
platform = defaultPlatform,
|
|
58
|
+
root,
|
|
59
|
+
windowsPathsNoEscape,
|
|
60
|
+
allowWindowsEscape,
|
|
61
|
+
}: GlobWalkerOpts,
|
|
62
|
+
cwd?: Path,
|
|
63
|
+
) {
|
|
64
|
+
this.relative = []
|
|
65
|
+
this.absolute = []
|
|
66
|
+
this.relativeChildren = []
|
|
67
|
+
this.absoluteChildren = []
|
|
68
|
+
this.platform = platform
|
|
69
|
+
windowsPathsNoEscape =
|
|
70
|
+
!!windowsPathsNoEscape || allowWindowsEscape === false
|
|
71
|
+
this.mmopts = {
|
|
72
|
+
dot: true,
|
|
73
|
+
nobrace,
|
|
74
|
+
nocase,
|
|
75
|
+
noext,
|
|
76
|
+
noglobstar,
|
|
77
|
+
normalize,
|
|
78
|
+
optimizationLevel: 2,
|
|
79
|
+
platform,
|
|
80
|
+
nocomment: true,
|
|
81
|
+
nonegate: true,
|
|
82
|
+
windowsPathsNoEscape,
|
|
83
|
+
}
|
|
84
|
+
const slashRoot = cwd?.resolve(root ?? '/').fullpath() ?? '/'
|
|
85
|
+
this.slashRoot = escape(
|
|
86
|
+
slashRoot.replace(/\\/g, '/').replace(/\/$/, ''),
|
|
87
|
+
{ windowsPathsNoEscape },
|
|
88
|
+
)
|
|
89
|
+
for (const ign of ignored) this.add(ign)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
add(ign: string) {
|
|
93
|
+
// this is a little weird, but it gives us a clean set of optimized
|
|
94
|
+
// minimatch matchers, without getting tripped up if one of them
|
|
95
|
+
// ends in /** inside a brace section, and it's only inefficient at
|
|
96
|
+
// the start of the walk, not along it.
|
|
97
|
+
// It'd be nice if the Pattern class just had a .test() method, but
|
|
98
|
+
// handling globstars is a bit of a pita, and that code already lives
|
|
99
|
+
// in minimatch anyway.
|
|
100
|
+
// Another way would be if maybe Minimatch could take its set/globParts
|
|
101
|
+
// as an option, and then we could at least just use Pattern to test
|
|
102
|
+
// for absolute-ness.
|
|
103
|
+
// Yet another way, Minimatch could take an array of glob strings, and
|
|
104
|
+
// a cwd option, and do the right thing.
|
|
105
|
+
const mm = new Minimatch(ign, this.mmopts)
|
|
106
|
+
for (let i = 0; i < mm.set.length; i++) {
|
|
107
|
+
const parsed = mm.set[i]
|
|
108
|
+
const globParts = mm.globParts[i]
|
|
109
|
+
/* c8 ignore start */
|
|
110
|
+
if (!parsed || !globParts) {
|
|
111
|
+
throw new Error('invalid pattern object')
|
|
112
|
+
}
|
|
113
|
+
// strip off leading ./ portions
|
|
114
|
+
// https://github.com/isaacs/node-glob/issues/570
|
|
115
|
+
while (parsed[0] === '.' && globParts[0] === '.') {
|
|
116
|
+
parsed.shift()
|
|
117
|
+
globParts.shift()
|
|
118
|
+
}
|
|
119
|
+
/* c8 ignore stop */
|
|
120
|
+
const p = new Pattern(parsed, globParts, 0, this.platform)
|
|
121
|
+
const glob =
|
|
122
|
+
p.root() === '/' ?
|
|
123
|
+
`${this.slashRoot}/${p.rest()?.globString() ?? ''}`
|
|
124
|
+
: p.globString()
|
|
125
|
+
const m = new Minimatch(glob, this.mmopts)
|
|
126
|
+
const children = globParts[globParts.length - 1] === '**'
|
|
127
|
+
const absolute = p.isAbsolute()
|
|
128
|
+
if (absolute) this.absolute.push(m)
|
|
129
|
+
else this.relative.push(m)
|
|
130
|
+
if (children) {
|
|
131
|
+
if (absolute) this.absoluteChildren.push(m)
|
|
132
|
+
else this.relativeChildren.push(m)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
ignored(p: Path): boolean {
|
|
138
|
+
const fullpath = p.fullpath()
|
|
139
|
+
const fullpaths = `${fullpath}/`
|
|
140
|
+
const relative = p.relative() || '.'
|
|
141
|
+
const relatives = `${relative}/`
|
|
142
|
+
for (const m of this.relative) {
|
|
143
|
+
if (m.match(relative) || m.match(relatives)) return true
|
|
144
|
+
}
|
|
145
|
+
for (const m of this.absolute) {
|
|
146
|
+
if (m.match(fullpath) || m.match(fullpaths)) return true
|
|
147
|
+
}
|
|
148
|
+
return false
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
childrenIgnored(p: Path): boolean {
|
|
152
|
+
const fullpath = `${p.fullpath()}/`
|
|
153
|
+
const relative = `${p.relative() || '.'}/`
|
|
154
|
+
for (const m of this.relativeChildren) {
|
|
155
|
+
if (m.match(relative)) return true
|
|
156
|
+
}
|
|
157
|
+
for (const m of this.absoluteChildren) {
|
|
158
|
+
if (m.match(fullpath)) return true
|
|
159
|
+
}
|
|
160
|
+
return false
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { escape, unescape } from 'minimatch'
|
|
2
|
+
import type { Minipass } from 'minipass'
|
|
3
|
+
import type { Path } from 'path-scurry'
|
|
4
|
+
import type {
|
|
5
|
+
GlobOptions,
|
|
6
|
+
GlobOptionsWithFileTypesFalse,
|
|
7
|
+
GlobOptionsWithFileTypesTrue,
|
|
8
|
+
GlobOptionsWithFileTypesUnset,
|
|
9
|
+
} from './glob.js'
|
|
10
|
+
import { Glob } from './glob.js'
|
|
11
|
+
import { hasMagic } from './has-magic.js'
|
|
12
|
+
|
|
13
|
+
export { escape, unescape } from 'minimatch'
|
|
14
|
+
export type { Form } from 'minimatch'
|
|
15
|
+
export type {
|
|
16
|
+
FSOption,
|
|
17
|
+
Path,
|
|
18
|
+
WalkOptions,
|
|
19
|
+
WalkOptionsWithFileTypesTrue,
|
|
20
|
+
WalkOptionsWithFileTypesUnset,
|
|
21
|
+
} from 'path-scurry'
|
|
22
|
+
export { Glob } from './glob.js'
|
|
23
|
+
export type {
|
|
24
|
+
GlobOptions,
|
|
25
|
+
GlobOptionsWithFileTypesFalse,
|
|
26
|
+
GlobOptionsWithFileTypesTrue,
|
|
27
|
+
GlobOptionsWithFileTypesUnset,
|
|
28
|
+
} from './glob.js'
|
|
29
|
+
export { hasMagic } from './has-magic.js'
|
|
30
|
+
export { Ignore } from './ignore.js'
|
|
31
|
+
export type { IgnoreLike } from './ignore.js'
|
|
32
|
+
export type { MatchStream } from './walker.js'
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Syncronous form of {@link globStream}. Will read all the matches as fast as
|
|
36
|
+
* you consume them, even all in a single tick if you consume them immediately,
|
|
37
|
+
* but will still respond to backpressure if they're not consumed immediately.
|
|
38
|
+
*/
|
|
39
|
+
export function globStreamSync(
|
|
40
|
+
pattern: string | string[],
|
|
41
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
42
|
+
): Minipass<Path, Path>
|
|
43
|
+
export function globStreamSync(
|
|
44
|
+
pattern: string | string[],
|
|
45
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
46
|
+
): Minipass<string, string>
|
|
47
|
+
export function globStreamSync(
|
|
48
|
+
pattern: string | string[],
|
|
49
|
+
options: GlobOptionsWithFileTypesUnset,
|
|
50
|
+
): Minipass<string, string>
|
|
51
|
+
export function globStreamSync(
|
|
52
|
+
pattern: string | string[],
|
|
53
|
+
options: GlobOptions,
|
|
54
|
+
): Minipass<Path, Path> | Minipass<string, string>
|
|
55
|
+
export function globStreamSync(
|
|
56
|
+
pattern: string | string[],
|
|
57
|
+
options: GlobOptions = {},
|
|
58
|
+
) {
|
|
59
|
+
return new Glob(pattern, options).streamSync()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Return a stream that emits all the strings or `Path` objects and
|
|
64
|
+
* then emits `end` when completed.
|
|
65
|
+
*/
|
|
66
|
+
export function globStream(
|
|
67
|
+
pattern: string | string[],
|
|
68
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
69
|
+
): Minipass<string, string>
|
|
70
|
+
export function globStream(
|
|
71
|
+
pattern: string | string[],
|
|
72
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
73
|
+
): Minipass<Path, Path>
|
|
74
|
+
export function globStream(
|
|
75
|
+
pattern: string | string[],
|
|
76
|
+
options?: GlobOptionsWithFileTypesUnset | undefined,
|
|
77
|
+
): Minipass<string, string>
|
|
78
|
+
export function globStream(
|
|
79
|
+
pattern: string | string[],
|
|
80
|
+
options: GlobOptions,
|
|
81
|
+
): Minipass<Path, Path> | Minipass<string, string>
|
|
82
|
+
export function globStream(
|
|
83
|
+
pattern: string | string[],
|
|
84
|
+
options: GlobOptions = {},
|
|
85
|
+
) {
|
|
86
|
+
return new Glob(pattern, options).stream()
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Synchronous form of {@link glob}
|
|
91
|
+
*/
|
|
92
|
+
export function globSync(
|
|
93
|
+
pattern: string | string[],
|
|
94
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
95
|
+
): string[]
|
|
96
|
+
export function globSync(
|
|
97
|
+
pattern: string | string[],
|
|
98
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
99
|
+
): Path[]
|
|
100
|
+
export function globSync(
|
|
101
|
+
pattern: string | string[],
|
|
102
|
+
options?: GlobOptionsWithFileTypesUnset | undefined,
|
|
103
|
+
): string[]
|
|
104
|
+
export function globSync(
|
|
105
|
+
pattern: string | string[],
|
|
106
|
+
options: GlobOptions,
|
|
107
|
+
): Path[] | string[]
|
|
108
|
+
export function globSync(
|
|
109
|
+
pattern: string | string[],
|
|
110
|
+
options: GlobOptions = {},
|
|
111
|
+
) {
|
|
112
|
+
return new Glob(pattern, options).walkSync()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Perform an asynchronous glob search for the pattern(s) specified. Returns
|
|
117
|
+
* [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the
|
|
118
|
+
* {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for
|
|
119
|
+
* full option descriptions.
|
|
120
|
+
*/
|
|
121
|
+
async function glob_(
|
|
122
|
+
pattern: string | string[],
|
|
123
|
+
options?: GlobOptionsWithFileTypesUnset | undefined,
|
|
124
|
+
): Promise<string[]>
|
|
125
|
+
async function glob_(
|
|
126
|
+
pattern: string | string[],
|
|
127
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
128
|
+
): Promise<Path[]>
|
|
129
|
+
async function glob_(
|
|
130
|
+
pattern: string | string[],
|
|
131
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
132
|
+
): Promise<string[]>
|
|
133
|
+
async function glob_(
|
|
134
|
+
pattern: string | string[],
|
|
135
|
+
options: GlobOptions,
|
|
136
|
+
): Promise<Path[] | string[]>
|
|
137
|
+
async function glob_(
|
|
138
|
+
pattern: string | string[],
|
|
139
|
+
options: GlobOptions = {},
|
|
140
|
+
) {
|
|
141
|
+
return new Glob(pattern, options).walk()
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Return a sync iterator for walking glob pattern matches.
|
|
146
|
+
*/
|
|
147
|
+
export function globIterateSync(
|
|
148
|
+
pattern: string | string[],
|
|
149
|
+
options?: GlobOptionsWithFileTypesUnset | undefined,
|
|
150
|
+
): Generator<string, void, void>
|
|
151
|
+
export function globIterateSync(
|
|
152
|
+
pattern: string | string[],
|
|
153
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
154
|
+
): Generator<Path, void, void>
|
|
155
|
+
export function globIterateSync(
|
|
156
|
+
pattern: string | string[],
|
|
157
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
158
|
+
): Generator<string, void, void>
|
|
159
|
+
export function globIterateSync(
|
|
160
|
+
pattern: string | string[],
|
|
161
|
+
options: GlobOptions,
|
|
162
|
+
): Generator<Path, void, void> | Generator<string, void, void>
|
|
163
|
+
export function globIterateSync(
|
|
164
|
+
pattern: string | string[],
|
|
165
|
+
options: GlobOptions = {},
|
|
166
|
+
) {
|
|
167
|
+
return new Glob(pattern, options).iterateSync()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Return an async iterator for walking glob pattern matches.
|
|
172
|
+
*/
|
|
173
|
+
export function globIterate(
|
|
174
|
+
pattern: string | string[],
|
|
175
|
+
options?: GlobOptionsWithFileTypesUnset | undefined,
|
|
176
|
+
): AsyncGenerator<string, void, void>
|
|
177
|
+
export function globIterate(
|
|
178
|
+
pattern: string | string[],
|
|
179
|
+
options: GlobOptionsWithFileTypesTrue,
|
|
180
|
+
): AsyncGenerator<Path, void, void>
|
|
181
|
+
export function globIterate(
|
|
182
|
+
pattern: string | string[],
|
|
183
|
+
options: GlobOptionsWithFileTypesFalse,
|
|
184
|
+
): AsyncGenerator<string, void, void>
|
|
185
|
+
export function globIterate(
|
|
186
|
+
pattern: string | string[],
|
|
187
|
+
options: GlobOptions,
|
|
188
|
+
): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>
|
|
189
|
+
export function globIterate(
|
|
190
|
+
pattern: string | string[],
|
|
191
|
+
options: GlobOptions = {},
|
|
192
|
+
) {
|
|
193
|
+
return new Glob(pattern, options).iterate()
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc
|
|
197
|
+
export const streamSync = globStreamSync
|
|
198
|
+
export const stream = Object.assign(globStream, { sync: globStreamSync })
|
|
199
|
+
export const iterateSync = globIterateSync
|
|
200
|
+
export const iterate = Object.assign(globIterate, {
|
|
201
|
+
sync: globIterateSync,
|
|
202
|
+
})
|
|
203
|
+
export const sync = Object.assign(globSync, {
|
|
204
|
+
stream: globStreamSync,
|
|
205
|
+
iterate: globIterateSync,
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
export const glob = Object.assign(glob_, {
|
|
209
|
+
glob: glob_,
|
|
210
|
+
globSync,
|
|
211
|
+
sync,
|
|
212
|
+
globStream,
|
|
213
|
+
stream,
|
|
214
|
+
globStreamSync,
|
|
215
|
+
streamSync,
|
|
216
|
+
globIterate,
|
|
217
|
+
iterate,
|
|
218
|
+
globIterateSync,
|
|
219
|
+
iterateSync,
|
|
220
|
+
Glob,
|
|
221
|
+
hasMagic,
|
|
222
|
+
escape,
|
|
223
|
+
unescape,
|
|
224
|
+
})
|
|
225
|
+
glob.glob = glob
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
// this is just a very light wrapper around 2 arrays with an offset index
|
|
2
|
+
|
|
3
|
+
import type { ParseReturnFiltered } from 'minimatch'
|
|
4
|
+
import { GLOBSTAR } from 'minimatch'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One portion of a parsed minimatch pattern: a string, a Matcher for
|
|
8
|
+
* a portion with magic, or GLOBSTAR for `**`.
|
|
9
|
+
*/
|
|
10
|
+
export type MMPattern = ParseReturnFiltered
|
|
11
|
+
|
|
12
|
+
/** The Matcher that minimatch makes for a portion with magic. */
|
|
13
|
+
export type MMMatcher = Exclude<MMPattern, string | typeof GLOBSTAR>
|
|
14
|
+
|
|
15
|
+
// an array of length >= 1
|
|
16
|
+
export type PatternList = [p: MMPattern, ...rest: MMPattern[]]
|
|
17
|
+
export type UNCPatternList = [
|
|
18
|
+
p0: '',
|
|
19
|
+
p1: '',
|
|
20
|
+
p2: string,
|
|
21
|
+
p3: string,
|
|
22
|
+
...rest: MMPattern[],
|
|
23
|
+
]
|
|
24
|
+
export type DrivePatternList = [p0: string, ...rest: MMPattern[]]
|
|
25
|
+
export type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]
|
|
26
|
+
export type GlobList = [p: string, ...rest: string[]]
|
|
27
|
+
|
|
28
|
+
const isPatternList = (pl: MMPattern[]): pl is PatternList =>
|
|
29
|
+
pl.length >= 1
|
|
30
|
+
const isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1
|
|
31
|
+
|
|
32
|
+
const customInspect = Symbol.for('nodejs.util.inspect.custom')
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* An immutable-ish view on an array of glob parts and their parsed
|
|
36
|
+
* results
|
|
37
|
+
*/
|
|
38
|
+
export class Pattern {
|
|
39
|
+
readonly #patternList: PatternList
|
|
40
|
+
readonly #globList: GlobList
|
|
41
|
+
readonly #index: number
|
|
42
|
+
readonly length: number
|
|
43
|
+
readonly #platform: NodeJS.Platform
|
|
44
|
+
#rest?: Pattern | null
|
|
45
|
+
#globString?: string
|
|
46
|
+
#isDrive?: boolean
|
|
47
|
+
#isUNC?: boolean
|
|
48
|
+
#isAbsolute?: boolean
|
|
49
|
+
#followGlobstar: boolean = true
|
|
50
|
+
|
|
51
|
+
constructor(
|
|
52
|
+
patternList: MMPattern[],
|
|
53
|
+
globList: string[],
|
|
54
|
+
index: number,
|
|
55
|
+
platform: NodeJS.Platform,
|
|
56
|
+
) {
|
|
57
|
+
if (!isPatternList(patternList)) {
|
|
58
|
+
throw new TypeError('empty pattern list')
|
|
59
|
+
}
|
|
60
|
+
if (!isGlobList(globList)) {
|
|
61
|
+
throw new TypeError('empty glob list')
|
|
62
|
+
}
|
|
63
|
+
if (globList.length !== patternList.length) {
|
|
64
|
+
throw new TypeError('mismatched pattern list and glob list lengths')
|
|
65
|
+
}
|
|
66
|
+
this.length = patternList.length
|
|
67
|
+
if (index < 0 || index >= this.length) {
|
|
68
|
+
throw new TypeError('index out of range')
|
|
69
|
+
}
|
|
70
|
+
this.#patternList = patternList
|
|
71
|
+
this.#globList = globList
|
|
72
|
+
this.#index = index
|
|
73
|
+
this.#platform = platform
|
|
74
|
+
|
|
75
|
+
// normalize root entries of absolute patterns on initial creation.
|
|
76
|
+
if (this.#index === 0) {
|
|
77
|
+
// c: => ['c:/']
|
|
78
|
+
// C:/ => ['C:/']
|
|
79
|
+
// C:/x => ['C:/', 'x']
|
|
80
|
+
// //host/share => ['//host/share/']
|
|
81
|
+
// //host/share/ => ['//host/share/']
|
|
82
|
+
// //host/share/x => ['//host/share/', 'x']
|
|
83
|
+
// //?/UNC/host/share/x => ['//?/UNC/host/share/', 'x']
|
|
84
|
+
// /etc => ['/', 'etc']
|
|
85
|
+
// / => ['/']
|
|
86
|
+
if (this.isUNC()) {
|
|
87
|
+
// '' / '' / 'host' / 'share', or
|
|
88
|
+
// '' / '' / '?' / 'UNC' / 'host' / 'share'
|
|
89
|
+
const n = this.#isLongUNC() ? 6 : 4
|
|
90
|
+
const proot = this.#patternList.slice(0, n)
|
|
91
|
+
const groot = this.#globList.slice(0, n)
|
|
92
|
+
const prest = this.#patternList.slice(n)
|
|
93
|
+
const grest = this.#globList.slice(n)
|
|
94
|
+
if (prest[0] === '') {
|
|
95
|
+
// ends in /
|
|
96
|
+
prest.shift()
|
|
97
|
+
grest.shift()
|
|
98
|
+
}
|
|
99
|
+
const p = [...proot, ''].join('/')
|
|
100
|
+
const g = [...groot, ''].join('/')
|
|
101
|
+
this.#patternList = [p, ...prest]
|
|
102
|
+
this.#globList = [g, ...grest]
|
|
103
|
+
this.length = this.#patternList.length
|
|
104
|
+
} else if (this.isDrive() || this.isAbsolute()) {
|
|
105
|
+
const [p1, ...prest] = this.#patternList
|
|
106
|
+
const [g1, ...grest] = this.#globList
|
|
107
|
+
if (prest[0] === '') {
|
|
108
|
+
// ends in /
|
|
109
|
+
prest.shift()
|
|
110
|
+
grest.shift()
|
|
111
|
+
}
|
|
112
|
+
const p = `${p1 as string}/`
|
|
113
|
+
const g = `${g1}/`
|
|
114
|
+
this.#patternList = [p, ...prest]
|
|
115
|
+
this.#globList = [g, ...grest]
|
|
116
|
+
this.length = this.#patternList.length
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
[customInspect]() {
|
|
122
|
+
return `Pattern <${this.#globList.slice(this.#index).join('/')}>`
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The first entry in the parsed list of patterns
|
|
127
|
+
*/
|
|
128
|
+
pattern(): MMPattern {
|
|
129
|
+
return this.#patternList[this.#index] as MMPattern
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* true of if pattern() returns a string
|
|
134
|
+
*/
|
|
135
|
+
isString(): boolean {
|
|
136
|
+
return typeof this.#patternList[this.#index] === 'string'
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* true of if pattern() returns GLOBSTAR
|
|
140
|
+
*/
|
|
141
|
+
isGlobstar(): boolean {
|
|
142
|
+
return this.#patternList[this.#index] === GLOBSTAR
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* true if pattern() returns a Matcher, for a portion with magic
|
|
146
|
+
*/
|
|
147
|
+
isMatcher(): boolean {
|
|
148
|
+
return typeof this.#patternList[this.#index] === 'object'
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The /-joined set of glob parts that make up this pattern
|
|
153
|
+
*/
|
|
154
|
+
globString(): string {
|
|
155
|
+
return (this.#globString =
|
|
156
|
+
this.#globString ||
|
|
157
|
+
(this.#index === 0 ?
|
|
158
|
+
this.isAbsolute() ?
|
|
159
|
+
this.#globList[0] + this.#globList.slice(1).join('/')
|
|
160
|
+
: this.#globList.join('/')
|
|
161
|
+
: this.#globList.slice(this.#index).join('/')))
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* true if there are more pattern parts after this one
|
|
166
|
+
*/
|
|
167
|
+
hasMore(): boolean {
|
|
168
|
+
return this.length > this.#index + 1
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The rest of the pattern after this part, or null if this is the end
|
|
173
|
+
*/
|
|
174
|
+
rest(): Pattern | null {
|
|
175
|
+
if (this.#rest !== undefined) return this.#rest
|
|
176
|
+
if (!this.hasMore()) return (this.#rest = null)
|
|
177
|
+
this.#rest = new Pattern(
|
|
178
|
+
this.#patternList,
|
|
179
|
+
this.#globList,
|
|
180
|
+
this.#index + 1,
|
|
181
|
+
this.#platform,
|
|
182
|
+
)
|
|
183
|
+
this.#rest.#isAbsolute = this.#isAbsolute
|
|
184
|
+
this.#rest.#isUNC = this.#isUNC
|
|
185
|
+
this.#rest.#isDrive = this.#isDrive
|
|
186
|
+
return this.#rest
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// the root is //?/UNC/host/share, the same as //host/share
|
|
190
|
+
#isLongUNC(): boolean {
|
|
191
|
+
const pl = this.#patternList
|
|
192
|
+
return (
|
|
193
|
+
pl[2] === '?' && typeof pl[3] === 'string' && /^unc$/i.test(pl[3])
|
|
194
|
+
)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* true if the pattern represents a //unc/path/ on windows
|
|
199
|
+
*/
|
|
200
|
+
isUNC(): boolean {
|
|
201
|
+
const pl = this.#patternList
|
|
202
|
+
// the host and share, after //?/UNC/ in a long UNC path
|
|
203
|
+
const h = this.#isLongUNC() ? 4 : 2
|
|
204
|
+
return this.#isUNC !== undefined ?
|
|
205
|
+
this.#isUNC
|
|
206
|
+
: (this.#isUNC =
|
|
207
|
+
this.#platform === 'win32' &&
|
|
208
|
+
this.#index === 0 &&
|
|
209
|
+
pl[0] === '' &&
|
|
210
|
+
pl[1] === '' &&
|
|
211
|
+
typeof pl[h] === 'string' &&
|
|
212
|
+
!!pl[h] &&
|
|
213
|
+
typeof pl[h + 1] === 'string' &&
|
|
214
|
+
!!pl[h + 1])
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// pattern like C:/...
|
|
218
|
+
// split = ['C:', ...]
|
|
219
|
+
// XXX: would be nice to handle patterns like `c:*` to test the cwd
|
|
220
|
+
// in c: for *, but I don't know of a way to even figure out what that
|
|
221
|
+
// cwd is without actually chdir'ing into it?
|
|
222
|
+
/**
|
|
223
|
+
* True if the pattern starts with a drive letter on Windows
|
|
224
|
+
*/
|
|
225
|
+
isDrive(): boolean {
|
|
226
|
+
const pl = this.#patternList
|
|
227
|
+
return this.#isDrive !== undefined ?
|
|
228
|
+
this.#isDrive
|
|
229
|
+
: (this.#isDrive =
|
|
230
|
+
this.#platform === 'win32' &&
|
|
231
|
+
this.#index === 0 &&
|
|
232
|
+
this.length > 1 &&
|
|
233
|
+
typeof pl[0] === 'string' &&
|
|
234
|
+
/^[a-z]:$/i.test(pl[0]))
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// pattern = '/' or '/...' or '/x/...'
|
|
238
|
+
// split = ['', ''] or ['', ...] or ['', 'x', ...]
|
|
239
|
+
// Drive and UNC both considered absolute on windows
|
|
240
|
+
/**
|
|
241
|
+
* True if the pattern is rooted on an absolute path
|
|
242
|
+
*/
|
|
243
|
+
isAbsolute(): boolean {
|
|
244
|
+
const pl = this.#patternList
|
|
245
|
+
return this.#isAbsolute !== undefined ?
|
|
246
|
+
this.#isAbsolute
|
|
247
|
+
: (this.#isAbsolute =
|
|
248
|
+
(pl[0] === '' && pl.length > 1) ||
|
|
249
|
+
this.isDrive() ||
|
|
250
|
+
this.isUNC())
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* consume the root of the pattern, and return it
|
|
255
|
+
*/
|
|
256
|
+
root(): string {
|
|
257
|
+
const p = this.#patternList[0]
|
|
258
|
+
return (
|
|
259
|
+
typeof p === 'string' && this.isAbsolute() && this.#index === 0
|
|
260
|
+
) ?
|
|
261
|
+
p
|
|
262
|
+
: ''
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Check to see if the current globstar pattern is allowed to follow
|
|
267
|
+
* a symbolic link.
|
|
268
|
+
*/
|
|
269
|
+
checkFollowGlobstar(): boolean {
|
|
270
|
+
return !(
|
|
271
|
+
this.#index === 0 ||
|
|
272
|
+
!this.isGlobstar() ||
|
|
273
|
+
!this.#followGlobstar
|
|
274
|
+
)
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Mark that the current globstar pattern is following a symbolic link
|
|
279
|
+
*/
|
|
280
|
+
markFollowGlobstar(): boolean {
|
|
281
|
+
if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
|
|
282
|
+
return false
|
|
283
|
+
this.#followGlobstar = false
|
|
284
|
+
return true
|
|
285
|
+
}
|
|
286
|
+
}
|