@nielspeter/eess-ts 0.8.0 → 0.10.0
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/dist/conditions/dependency.d.ts.map +1 -1
- package/dist/conditions/dependency.js +5 -6
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/core/diagnose.d.ts.map +1 -1
- package/dist/core/diagnose.js +9 -1
- package/dist/core/diagnose.js.map +1 -1
- package/dist/core/disk-set.d.ts +42 -0
- package/dist/core/disk-set.d.ts.map +1 -1
- package/dist/core/disk-set.js +72 -3
- package/dist/core/disk-set.js.map +1 -1
- package/dist/core/glob-evaluator.d.ts.map +1 -1
- package/dist/core/glob-evaluator.js +5 -1
- package/dist/core/glob-evaluator.js.map +1 -1
- package/dist/core/import-candidates.d.ts +43 -0
- package/dist/core/import-candidates.d.ts.map +1 -1
- package/dist/core/import-candidates.js +46 -0
- package/dist/core/import-candidates.js.map +1 -1
- package/dist/core/path-universe.d.ts.map +1 -1
- package/dist/core/path-universe.js +10 -0
- package/dist/core/path-universe.js.map +1 -1
- package/dist/core/project-relative.d.ts +57 -42
- package/dist/core/project-relative.d.ts.map +1 -1
- package/dist/core/project-relative.js +180 -4
- package/dist/core/project-relative.js.map +1 -1
- package/dist/core/vacuity-diagnosis.d.ts.map +1 -1
- package/dist/core/vacuity-diagnosis.js +77 -8
- package/dist/core/vacuity-diagnosis.js.map +1 -1
- package/dist/predicates/identity.d.ts +4 -2
- package/dist/predicates/identity.d.ts.map +1 -1
- package/dist/predicates/identity.js +4 -2
- package/dist/predicates/identity.js.map +1 -1
- package/dist/predicates/module.d.ts.map +1 -1
- package/dist/predicates/module.js +3 -4
- package/dist/predicates/module.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,45 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Make a project-relative glob work, instead of failing loudly — plan 0067 C.
|
|
3
|
-
*
|
|
4
|
-
* Globs are matched against **absolute** file paths, so `'src/domain/**'`
|
|
5
|
-
* matches nothing. That is the single commonest real mistake with this library:
|
|
6
|
-
* it is the shape 0.18.1 was released for, and as of **0.34.0** it is a hard
|
|
7
|
-
* build failure telling the author to prefix `'**\/'`.
|
|
8
|
-
*
|
|
9
|
-
* Prefixing works but says something different. `'**\/src/domain/**'` matches a
|
|
10
|
-
* `src/domain` **anywhere** — including `vendor/thing/src/domain`, and
|
|
11
|
-
* including a second `src/` nested inside a monorepo package. What the author
|
|
12
|
-
* meant was the one at the project root. 0067 called normalization "the root
|
|
13
|
-
* cause" fix for that reason, and 0069 sequenced it directly after R3b.
|
|
14
|
-
*
|
|
15
|
-
* So an unanchored glob is matched against the path **relative to the
|
|
16
|
-
* tsconfig's directory**, in addition to the absolute path. Both spellings keep
|
|
17
|
-
* working and they mean different things:
|
|
18
|
-
*
|
|
19
|
-
* | glob | matches |
|
|
20
|
-
* | --------------------- | ------------------------------------------- |
|
|
21
|
-
* | `'src/domain/**'` | that folder **at the project root** |
|
|
22
|
-
* | `'**\/src/domain/**'` | a `src/domain` **anywhere** in the project |
|
|
23
|
-
* | `'/abs/src/domain/**'`| exactly that absolute path |
|
|
24
|
-
*
|
|
25
|
-
* ## Why the root comes from the element, not from the builder
|
|
26
|
-
*
|
|
27
|
-
* A predicate is constructed two ways that must not diverge:
|
|
28
|
-
* `.that().resideInFolder(g)`, where the builder knows the project, and
|
|
29
|
-
* `.that().satisfy(resideInFolder(g))`, where nothing does.
|
|
30
|
-
* `tests/core/glob-declaration.test.ts` exists to assert the two spellings
|
|
31
|
-
* agree, and threading the root through only the first would break that.
|
|
32
|
-
*
|
|
33
|
-
* Every `Located` element can reach its own `SourceFile`, and ts-morph carries
|
|
34
|
-
* the tsconfig it was loaded from on the project's compiler options. So the
|
|
35
|
-
* root is derived where the match happens, from the element itself, and both
|
|
36
|
-
* spellings get it for free.
|
|
37
|
-
*
|
|
38
|
-
* `configFilePath` is `undefined` for a project built in memory or without a
|
|
39
|
-
* tsconfig. That is a genuine "no root known" and normalization is skipped —
|
|
40
|
-
* the glob keeps its absolute-only meaning rather than being matched against
|
|
41
|
-
* something invented.
|
|
42
|
-
*/
|
|
43
1
|
import picomatch from 'picomatch';
|
|
44
2
|
import type { Project as TsMorphProject, SourceFile } from 'ts-morph';
|
|
45
3
|
/**
|
|
@@ -96,6 +54,62 @@ export declare function rootOf(sourceFile: SourceFile, fallbackTsConfigPath?: st
|
|
|
96
54
|
* `path-universe.ts` documents avoiding for the same reason.
|
|
97
55
|
*/
|
|
98
56
|
export declare function relativeToRoot(sourceFile: SourceFile, absolutePath: string, fallbackTsConfigPath?: string): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* The identity root for a project, from the path of its tsconfig.
|
|
59
|
+
*
|
|
60
|
+
* For the materializer in `path-universe.ts`, which holds the `ArchProject` and
|
|
61
|
+
* no `SourceFile`. It must agree with `matchesPath`'s view or the diagnosis and
|
|
62
|
+
* the runtime disagree about one glob — so both derive it here.
|
|
63
|
+
*/
|
|
64
|
+
export declare function repoRootOf(tsConfigPath: string): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* `absolutePath` named from the identity root — the `.git`/workspace root above
|
|
67
|
+
* the tsconfig — or `undefined` when there is no such root or the path sits
|
|
68
|
+
* outside it.
|
|
69
|
+
*
|
|
70
|
+
* This is the view a monorepo's own addressing needs: `'**\/apps/api/src/**'`
|
|
71
|
+
* names segments BETWEEN the repository root and the tsconfig directory, so the
|
|
72
|
+
* tsconfig-relative view has stripped off the very thing it names.
|
|
73
|
+
*/
|
|
74
|
+
export declare function relativeToRepoRoot(sourceFile: SourceFile, absolutePath: string, fallbackTsConfigPath?: string): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Is this glob matched against the path named from the identity root, as well as
|
|
77
|
+
* the two views above?
|
|
78
|
+
*
|
|
79
|
+
* ## Globstar-led only, and that is the whole ruling — bug 0348
|
|
80
|
+
*
|
|
81
|
+
* `'**\/x'` says **anywhere**. The only reason it fails to match a file under a
|
|
82
|
+
* checkout like `~/.worktrees/repo` is picomatch's default `dot: false` applied
|
|
83
|
+
* to a prefix the author does not own — where the repository happens to sit on
|
|
84
|
+
* this machine. Naming the path from the repository root removes exactly that
|
|
85
|
+
* prefix and nothing else, so the glob gets to mean what it says. It is the same
|
|
86
|
+
* authorship argument [bug 0349](../../../../work/bugs/fixed/0349-a-path-shaped-dependency-ban-passes-silently-under-pnpm-and-yarn.md)
|
|
87
|
+
* makes for a package manager's layout: a verdict must not be decided by where
|
|
88
|
+
* things sit on disk.
|
|
89
|
+
*
|
|
90
|
+
* A **project-relative** glob (`'src/**'`) is deliberately excluded, and this is
|
|
91
|
+
* the exclusion that keeps the fix from being a widening. That spelling MEANS
|
|
92
|
+
* "relative to the project root", and `core/project-relative.ts`'s first job is
|
|
93
|
+
* that the project root is the tsconfig's directory. Offering it an identity-root
|
|
94
|
+
* view would make one spelling name two different directories in a monorepo —
|
|
95
|
+
* `packages/api/src/` and the repository's own `src/` — which is a second meaning
|
|
96
|
+
* for one glob with no bug behind it. Pinned by `a-glob-above-the-tsconfig-root.test.ts`
|
|
97
|
+
* · `it('CONTROL: a glob relative to the package root keeps meaning the package root')`.
|
|
98
|
+
*
|
|
99
|
+
* Project-relative globs need nothing here anyway: their second view is already
|
|
100
|
+
* free of the checkout path, which is why bug 0339 fixed them and left this.
|
|
101
|
+
*
|
|
102
|
+
* ## Why this adds no matches except the broken ones
|
|
103
|
+
*
|
|
104
|
+
* The identity-relative path is a SUFFIX of the absolute path. For a glob led by
|
|
105
|
+
* `'**\/'`, if it matches the suffix it also matches the whole — unless some
|
|
106
|
+
* segment of the stripped prefix begins with `.`, which is precisely the defect.
|
|
107
|
+
* So under a checkout with no dot-segment the third view selects nothing the
|
|
108
|
+
* first did not. Measured rather than argued: `it('adds no match under a
|
|
109
|
+
* checkout with no dot-segment')` compares every file in a fixture with the view
|
|
110
|
+
* on and off.
|
|
111
|
+
*/
|
|
112
|
+
export declare function readsRepoRelativePath(glob: string): boolean;
|
|
99
113
|
/**
|
|
100
114
|
* Is this glob matched against the path named from the project root, as well as
|
|
101
115
|
* the absolute path?
|
|
@@ -163,6 +177,7 @@ export interface PathGlobMatcher {
|
|
|
163
177
|
readonly glob: string;
|
|
164
178
|
readonly isMatch: picomatch.Matcher;
|
|
165
179
|
readonly readsRootRelative: boolean;
|
|
180
|
+
readonly readsRepoRelative: boolean;
|
|
166
181
|
}
|
|
167
182
|
/** Compile one path glob. */
|
|
168
183
|
export declare function pathGlobMatcher(glob: string): PathGlobMatcher;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-relative.d.ts","sourceRoot":"","sources":["../../src/core/project-relative.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-relative.d.ts","sourceRoot":"","sources":["../../src/core/project-relative.ts"],"names":[],"mappings":"AAqDA,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErE;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgCvD;AA+BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,IAAI,CAKN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY7E;AAOD,wBAAgB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqChG;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,oBAAoB,CAAC,EAAE,MAAM,GAC5B,MAAM,GAAG,SAAS,CAKpB;AAwCD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED;;;;;;;;GAQG;AAEH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,oBAAoB,CAAC,EAAE,MAAM,GAC5B,MAAM,GAAG,SAAS,CAKpB;AAqCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;CACpC;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAO7D;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,EAAE,CAE5E;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAeT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAIT"}
|
|
@@ -22,6 +22,16 @@
|
|
|
22
22
|
* | `'**\/src/domain/**'` | a `src/domain` **anywhere** in the project |
|
|
23
23
|
* | `'/abs/src/domain/**'`| exactly that absolute path |
|
|
24
24
|
*
|
|
25
|
+
* ## Three views since bug 0348, not two
|
|
26
|
+
*
|
|
27
|
+
* A `'**\/'`-led glob gets a THIRD naming: the path from the **repository root**
|
|
28
|
+
* (`discoverIdentityRoot`'s `.git`/workspace root). Without it, `'**\/apps/api/src/**'`
|
|
29
|
+
* — how a monorepo addresses its own packages — can be named by neither of the two
|
|
30
|
+
* above: the absolute path carries the checkout's own location, and the
|
|
31
|
+
* tsconfig-relative path has `apps/api/` stripped off the front. A project-relative
|
|
32
|
+
* glob does NOT get it, deliberately; `readsRepoRelativePath` below owns that rule
|
|
33
|
+
* and states why.
|
|
34
|
+
*
|
|
25
35
|
* ## Why the root comes from the element, not from the builder
|
|
26
36
|
*
|
|
27
37
|
* A predicate is constructed two ways that must not diverge:
|
|
@@ -40,7 +50,9 @@
|
|
|
40
50
|
* the glob keeps its absolute-only meaning rather than being matched against
|
|
41
51
|
* something invented.
|
|
42
52
|
*/
|
|
53
|
+
import path from 'node:path';
|
|
43
54
|
import picomatch from 'picomatch';
|
|
55
|
+
import { discoverIdentityRoot, registerCacheReset } from '@nielspeter/eess/internal';
|
|
44
56
|
/**
|
|
45
57
|
* Whether a glob can already match an absolute path, so the `**\/` hint would
|
|
46
58
|
* be a no-op (or worse). Covers POSIX-absolute and Windows drive-absolute
|
|
@@ -249,6 +261,154 @@ export function relativeToRoot(sourceFile, absolutePath, fallbackTsConfigPath) {
|
|
|
249
261
|
const prefix = prefixOf(root);
|
|
250
262
|
return absolutePath.startsWith(prefix) ? absolutePath.slice(prefix.length) : undefined;
|
|
251
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* The identity root above a tsconfig directory, memoized.
|
|
266
|
+
*
|
|
267
|
+
* `discoverIdentityRoot` walks the filesystem with `existsSync`, and this sits
|
|
268
|
+
* on the per-element match path, so it is cached by the directory asked about.
|
|
269
|
+
* The cache is keyed by an absolute directory and holds at most one entry per
|
|
270
|
+
* loaded project, so it is bounded by the rule file rather than by the corpus.
|
|
271
|
+
*
|
|
272
|
+
* The guard is on the INPUT, exactly as `disk-set.ts` does it and for the same
|
|
273
|
+
* reason: `discoverIdentityRoot` calls `path.resolve`, so a relative input —
|
|
274
|
+
* this suite's `'in-memory'` double, an `ArchProject` a user constructed by hand
|
|
275
|
+
* — would walk up from the current working directory and answer with THIS
|
|
276
|
+
* repository's root. That is a plausible-looking wrong answer rather than a
|
|
277
|
+
* missing one, which is the shape ADR-009 rule 2 forbids.
|
|
278
|
+
*/
|
|
279
|
+
const repoRootCache = new Map();
|
|
280
|
+
// Every other module-level cache in this dialect registers (`element-cache.ts`,
|
|
281
|
+
// `module-edges.ts`, `line-index.ts`, `descendant-cache.ts`), and
|
|
282
|
+
// `clearRegisteredCaches()` promises a consumer holding an `ArchProject` they built
|
|
283
|
+
// that a mutation is survivable. This cache is keyed by a STRING, so unlike
|
|
284
|
+
// `disk-set.ts`'s `WeakMap<ArchProject, …>` it outlives every project: in a watch
|
|
285
|
+
// run or an editor session a `git init`, a worktree move or a new
|
|
286
|
+
// `pnpm-workspace.yaml` would otherwise leave the matcher on the old root while
|
|
287
|
+
// `disk-set` walked the new one — the two-derivations disagreement again.
|
|
288
|
+
registerCacheReset(() => {
|
|
289
|
+
repoRootCache.clear();
|
|
290
|
+
});
|
|
291
|
+
function repoRootOfDir(dir) {
|
|
292
|
+
if (dir === undefined)
|
|
293
|
+
return undefined;
|
|
294
|
+
if (repoRootCache.has(dir))
|
|
295
|
+
return repoRootCache.get(dir);
|
|
296
|
+
const discovered = path.isAbsolute(dir)
|
|
297
|
+
? discoverIdentityRoot(dir).replaceAll('\\', '/')
|
|
298
|
+
: undefined;
|
|
299
|
+
repoRootCache.set(dir, discovered);
|
|
300
|
+
return discovered;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The identity root for a project, from the path of its tsconfig.
|
|
304
|
+
*
|
|
305
|
+
* For the materializer in `path-universe.ts`, which holds the `ArchProject` and
|
|
306
|
+
* no `SourceFile`. It must agree with `matchesPath`'s view or the diagnosis and
|
|
307
|
+
* the runtime disagree about one glob — so both derive it here.
|
|
308
|
+
*/
|
|
309
|
+
export function repoRootOf(tsConfigPath) {
|
|
310
|
+
return repoRootOfDir(rootFromTsConfigPath(tsConfigPath));
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* `absolutePath` named from the identity root — the `.git`/workspace root above
|
|
314
|
+
* the tsconfig — or `undefined` when there is no such root or the path sits
|
|
315
|
+
* outside it.
|
|
316
|
+
*
|
|
317
|
+
* This is the view a monorepo's own addressing needs: `'**\/apps/api/src/**'`
|
|
318
|
+
* names segments BETWEEN the repository root and the tsconfig directory, so the
|
|
319
|
+
* tsconfig-relative view has stripped off the very thing it names.
|
|
320
|
+
*/
|
|
321
|
+
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
322
|
+
export function relativeToRepoRoot(sourceFile, absolutePath, fallbackTsConfigPath) {
|
|
323
|
+
const repoRoot = repoRootOfDir(projectTsConfigRoot(sourceFile, fallbackTsConfigPath));
|
|
324
|
+
if (repoRoot === undefined)
|
|
325
|
+
return undefined;
|
|
326
|
+
const prefix = prefixOf(repoRoot);
|
|
327
|
+
return absolutePath.startsWith(prefix) ? absolutePath.slice(prefix.length) : undefined;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* The directory of the tsconfig the PROJECT was built from — not `rootOf`, which
|
|
331
|
+
* answers with the registered package root containing this file.
|
|
332
|
+
*
|
|
333
|
+
* The difference is the whole of review finding 0348/customer-1, and it is not a
|
|
334
|
+
* shortcut. `rootOf` fails CLOSED for a file outside every registered root — a
|
|
335
|
+
* shared root-level `.d.ts`, or anything ts-morph pulls in across a package
|
|
336
|
+
* boundary — because naming such a file from the wrong PACKAGE is a specific,
|
|
337
|
+
* plausible-looking wrong answer. That reasoning does not transfer to the
|
|
338
|
+
* identity root: it is the repository's, not the package's, so every file inside
|
|
339
|
+
* the repository can be named from it whichever package owns it. Deriving it via
|
|
340
|
+
* `rootOf` inherited the fail-closed exit and left the cross-package case exactly
|
|
341
|
+
* as broken as this bug reports. Measured through the real `project()` API before
|
|
342
|
+
* this function existed:
|
|
343
|
+
*
|
|
344
|
+
* | glob | under a dot-directory | beside one |
|
|
345
|
+
* | --------------------- | --------------------- | ------------------- |
|
|
346
|
+
* | `'**\/apps/api/src/**'` | `thing.ts` | `thing.ts` |
|
|
347
|
+
* | `'**\/apps/identity/**'` | **nothing** | `jwt.service.ts` |
|
|
348
|
+
*
|
|
349
|
+
* It is also what makes `path-universe.ts`'s claim true rather than aspirational:
|
|
350
|
+
* the materializer derives the identity root from `project.tsConfigPath`, and
|
|
351
|
+
* `workspace()` sets both that and the ts-morph project's own `configFilePath` to
|
|
352
|
+
* the primary config, so the two now read the same input and cannot disagree
|
|
353
|
+
* about one glob.
|
|
354
|
+
*/
|
|
355
|
+
function projectTsConfigRoot(sourceFile, fallbackTsConfigPath) {
|
|
356
|
+
if (fallbackTsConfigPath !== undefined)
|
|
357
|
+
return rootFromTsConfigPath(fallbackTsConfigPath);
|
|
358
|
+
const configFilePath = sourceFile.getProject().getCompilerOptions().configFilePath;
|
|
359
|
+
return typeof configFilePath === 'string' ? rootFromTsConfigPath(configFilePath) : undefined;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Is this glob matched against the path named from the identity root, as well as
|
|
363
|
+
* the two views above?
|
|
364
|
+
*
|
|
365
|
+
* ## Globstar-led only, and that is the whole ruling — bug 0348
|
|
366
|
+
*
|
|
367
|
+
* `'**\/x'` says **anywhere**. The only reason it fails to match a file under a
|
|
368
|
+
* checkout like `~/.worktrees/repo` is picomatch's default `dot: false` applied
|
|
369
|
+
* to a prefix the author does not own — where the repository happens to sit on
|
|
370
|
+
* this machine. Naming the path from the repository root removes exactly that
|
|
371
|
+
* prefix and nothing else, so the glob gets to mean what it says. It is the same
|
|
372
|
+
* authorship argument [bug 0349](../../../../work/bugs/fixed/0349-a-path-shaped-dependency-ban-passes-silently-under-pnpm-and-yarn.md)
|
|
373
|
+
* makes for a package manager's layout: a verdict must not be decided by where
|
|
374
|
+
* things sit on disk.
|
|
375
|
+
*
|
|
376
|
+
* A **project-relative** glob (`'src/**'`) is deliberately excluded, and this is
|
|
377
|
+
* the exclusion that keeps the fix from being a widening. That spelling MEANS
|
|
378
|
+
* "relative to the project root", and `core/project-relative.ts`'s first job is
|
|
379
|
+
* that the project root is the tsconfig's directory. Offering it an identity-root
|
|
380
|
+
* view would make one spelling name two different directories in a monorepo —
|
|
381
|
+
* `packages/api/src/` and the repository's own `src/` — which is a second meaning
|
|
382
|
+
* for one glob with no bug behind it. Pinned by `a-glob-above-the-tsconfig-root.test.ts`
|
|
383
|
+
* · `it('CONTROL: a glob relative to the package root keeps meaning the package root')`.
|
|
384
|
+
*
|
|
385
|
+
* Project-relative globs need nothing here anyway: their second view is already
|
|
386
|
+
* free of the checkout path, which is why bug 0339 fixed them and left this.
|
|
387
|
+
*
|
|
388
|
+
* ## Why this adds no matches except the broken ones
|
|
389
|
+
*
|
|
390
|
+
* The identity-relative path is a SUFFIX of the absolute path. For a glob led by
|
|
391
|
+
* `'**\/'`, if it matches the suffix it also matches the whole — unless some
|
|
392
|
+
* segment of the stripped prefix begins with `.`, which is precisely the defect.
|
|
393
|
+
* So under a checkout with no dot-segment the third view selects nothing the
|
|
394
|
+
* first did not. Measured rather than argued: `it('adds no match under a
|
|
395
|
+
* checkout with no dot-segment')` compares every file in a fixture with the view
|
|
396
|
+
* on and off.
|
|
397
|
+
*/
|
|
398
|
+
export function readsRepoRelativePath(glob) {
|
|
399
|
+
// Defence in depth, and NOT independently observable — stated the way
|
|
400
|
+
// `registerProjectRoots` states the same thing, so the next reader does not go
|
|
401
|
+
// hunting for a test. `isGlobstarLed` already excludes a leading `./` or `../`
|
|
402
|
+
// (neither is `'**\/'`-led), and a mid-glob `/./` or `/../` is a literal segment
|
|
403
|
+
// picomatch matches against nothing in any view. Measured in review over
|
|
404
|
+
// `'**\/./apps/api/src/**'`, `'**\/../identity/src/**'` and `'**\/apps/./api/src/**'`:
|
|
405
|
+
// dropping this line changes `readsRepoRelative` from false to true and changes
|
|
406
|
+
// no verdict. It is kept because the two gates in this file must agree about what
|
|
407
|
+
// a relative segment is, not because it is reachable today.
|
|
408
|
+
if (hasRelativeSegment(glob))
|
|
409
|
+
return false;
|
|
410
|
+
return isGlobstarLed(glob);
|
|
411
|
+
}
|
|
252
412
|
/**
|
|
253
413
|
* Is this glob matched against the path named from the project root, as well as
|
|
254
414
|
* the absolute path?
|
|
@@ -309,7 +469,12 @@ export function readsRootRelativePath(glob) {
|
|
|
309
469
|
}
|
|
310
470
|
/** Compile one path glob. */
|
|
311
471
|
export function pathGlobMatcher(glob) {
|
|
312
|
-
return {
|
|
472
|
+
return {
|
|
473
|
+
glob,
|
|
474
|
+
isMatch: picomatch(glob),
|
|
475
|
+
readsRootRelative: readsRootRelativePath(glob),
|
|
476
|
+
readsRepoRelative: readsRepoRelativePath(glob),
|
|
477
|
+
};
|
|
313
478
|
}
|
|
314
479
|
/** Compile several path globs, in order. */
|
|
315
480
|
export function pathGlobMatchers(globs) {
|
|
@@ -342,10 +507,21 @@ export function pathGlobMatchers(globs) {
|
|
|
342
507
|
export function matchesPath(matcher, sourceFile, absolutePath, fallbackTsConfigPath) {
|
|
343
508
|
if (matcher.isMatch(absolutePath))
|
|
344
509
|
return true;
|
|
345
|
-
if (
|
|
510
|
+
if (matcher.readsRootRelative) {
|
|
511
|
+
const fromRoot = relativeToRoot(sourceFile, absolutePath, fallbackTsConfigPath);
|
|
512
|
+
if (fromRoot !== undefined && matcher.isMatch(fromRoot))
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
515
|
+
// The third view, and the last one — bug 0348. The ORDER here is not a semantic:
|
|
516
|
+
// this is a boolean disjunction, so trying the repo root first would give the same
|
|
517
|
+
// answer, and review confirmed a row that reorders the branches reds nothing. What
|
|
518
|
+
// narrows the third view is `readsRepoRelativePath` alone — only a glob that says
|
|
519
|
+
// "anywhere" reaches this line, because a glob naming a location relative to the
|
|
520
|
+
// project must be decided by the project.
|
|
521
|
+
if (!matcher.readsRepoRelative)
|
|
346
522
|
return false;
|
|
347
|
-
const
|
|
348
|
-
return
|
|
523
|
+
const fromIdentityRoot = relativeToRepoRoot(sourceFile, absolutePath, fallbackTsConfigPath);
|
|
524
|
+
return fromIdentityRoot !== undefined && matcher.isMatch(fromIdentityRoot);
|
|
349
525
|
}
|
|
350
526
|
/**
|
|
351
527
|
* Does ANY of these globs match this path?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-relative.js","sourceRoot":"","sources":["../../src/core/project-relative.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-relative.js","sourceRoot":"","sources":["../../src/core/project-relative.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vacuity-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAY,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA2B3E;;;;;;;GAOG;AAKH,eAAO,MAAM,cAAc,0GAC8E,CAAA;AAEzG,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,IAAI,eAAe,CAAA;IAC/B,eAAe,IAAI,MAAM,CAAA;IACzB,sBAAsB,IAAI,MAAM,CAAA;IAChC,gBAAgB,IAAI,MAAM,CAAA;IAC1B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,IAAI,WAAW,GAAG,SAAS,CAAA;IACrC,KAAK,IAAI,SAAS,QAAQ,EAAE,CAAA;IAC5B,kBAAkB,IAAI,OAAO,CAAA;IAC7B,aAAa,IAAI,OAAO,CAAA;IACxB,kBAAkB,IAAI,MAAM,CAAA;IAC5B,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAmCtE;
|
|
1
|
+
{"version":3,"file":"vacuity-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAY,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA2B3E;;;;;;;GAOG;AAKH,eAAO,MAAM,cAAc,0GAC8E,CAAA;AAEzG,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,IAAI,eAAe,CAAA;IAC/B,eAAe,IAAI,MAAM,CAAA;IACzB,sBAAsB,IAAI,MAAM,CAAA;IAChC,gBAAgB,IAAI,MAAM,CAAA;IAC1B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,IAAI,WAAW,GAAG,SAAS,CAAA;IACrC,KAAK,IAAI,SAAS,QAAQ,EAAE,CAAA;IAC5B,kBAAkB,IAAI,OAAO,CAAA;IAC7B,aAAa,IAAI,OAAO,CAAA;IACxB,kBAAkB,IAAI,MAAM,CAAA;IAC5B,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAmCtE;AAsHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,GAAG,SAAS,CAsC7B;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CA2C7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG;IACtD,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B,CAsCA;AAyCD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAgC7D;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,aAAa,CA4Bf"}
|
|
@@ -2,7 +2,7 @@ import { DECLARE_INSTEAD, isFaultPosition, UNSUPPRESSABLE } from '@nielspeter/ee
|
|
|
2
2
|
import { diagnoseGlob, FAULT_ADVICE, ON_DISK_ADVICE } from './glob-diagnosis.js';
|
|
3
3
|
import { globSitesOf, isDeadGlobTree, isDeadSite } from './glob-evaluator.js';
|
|
4
4
|
import { pathUniverse } from './path-universe.js';
|
|
5
|
-
import { diskSet } from './disk-set.js';
|
|
5
|
+
import { absenceClaimIsContradicted, diskSet } from './disk-set.js';
|
|
6
6
|
import { emptyProjectAdvice, loadedNothing } from './empty-project-advice.js';
|
|
7
7
|
/**
|
|
8
8
|
* The unit noun, singular when there is one of it — plan 0099.
|
|
@@ -138,12 +138,32 @@ function deadSelectorViolation(facts, site, universe, project) {
|
|
|
138
138
|
// noun alone ships a grammatical sentence that is still false.
|
|
139
139
|
const isDiscovery = site.position === 'discovery';
|
|
140
140
|
const what = isDiscovery ? 'discovery glob' : 'selector';
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
// Cardinality varies BOTH clauses too, for the same reason `discovery` does —
|
|
142
|
+
// and here getting it wrong was worse than a grammatical slip. A rule asserting
|
|
143
|
+
// `.notExist()` is SATISFIED by having no subjects, so "it has no subjects and
|
|
144
|
+
// cannot fail" describes the rule PASSING, and the sentence then offered "or
|
|
145
|
+
// remove the rule" as a co-equal remedy. On a finding that is `bypassFilters`
|
|
146
|
+
// — unsuppressable by `.warn()`, `.excluding()`, a comment, a baseline or
|
|
147
|
+
// diff-aware mode — deletion is the only achievable exit, and the primary
|
|
148
|
+
// consumer is an agent that does not read warnings and takes the achievable
|
|
149
|
+
// branch. So the fix for a silently-passing ratchet shipped an instruction to
|
|
150
|
+
// delete the ratchet, contradicting its own changeset. Three independent
|
|
151
|
+
// review lenses found this before release; no test caught it, because no test
|
|
152
|
+
// asserted the message.
|
|
153
|
+
const isCardinality = facts.assertsCardinality();
|
|
154
|
+
const consequence = isCardinality
|
|
155
|
+
? 'so the absence it asserts was never actually checked'
|
|
156
|
+
: isDiscovery
|
|
157
|
+
? 'so it discovers nothing to check and cannot fail'
|
|
158
|
+
: 'so it has no subjects and cannot fail';
|
|
159
|
+
// Never "remove the rule" for a ratchet: it is the thing that noticed.
|
|
160
|
+
const remedy = isCardinality
|
|
161
|
+
? 'Widen the tsconfig include to cover this path, or correct the selector — ' +
|
|
162
|
+
'do not delete this rule, it is what detected the gap.'
|
|
163
|
+
: 'Correct the glob, or remove the rule.';
|
|
144
164
|
const advice = `This rule's ${what} ${site.origin} can never match anything in this project, ` +
|
|
145
165
|
`${consequence} — ${cause}. ` +
|
|
146
|
-
|
|
166
|
+
`${remedy} ${UNSUPPRESSABLE}`;
|
|
147
167
|
return {
|
|
148
168
|
rule: name,
|
|
149
169
|
ruleId: described.id,
|
|
@@ -153,7 +173,12 @@ function deadSelectorViolation(facts, site, universe, project) {
|
|
|
153
173
|
message: advice,
|
|
154
174
|
// Its own remedy, never the author's (bug 0021): their `suggestion` is
|
|
155
175
|
// for a violation of the rule, and this says the rule cannot produce one.
|
|
156
|
-
|
|
176
|
+
//
|
|
177
|
+
// For a cardinality rule the remedy ALONE, not the whole advice: `format.ts`
|
|
178
|
+
// drops the `Fix:` line when `message` and `suggestion` are equal, so the
|
|
179
|
+
// population most likely to be deleted rather than debugged was shipping with
|
|
180
|
+
// no `Fix:` line at all and its remedy buried mid-sentence.
|
|
181
|
+
suggestion: isCardinality ? remedy : advice,
|
|
157
182
|
bypassFilters: true,
|
|
158
183
|
};
|
|
159
184
|
}
|
|
@@ -213,8 +238,17 @@ export function evidenceFloor(facts, violations, examined) {
|
|
|
213
238
|
// `.notExist()` and friends examine zero BECAUSE that is what they
|
|
214
239
|
// assert. Exempt since 0.34.0, and `diagnose()` exempts it too — the two
|
|
215
240
|
// must agree or `doctor` and `check` disagree about a working rule.
|
|
216
|
-
|
|
217
|
-
|
|
241
|
+
//
|
|
242
|
+
// The exemption is right and it was total, which left this one rule shape with
|
|
243
|
+
// nothing beneath it — exempt here AND in `deadSelectorFindings`, so a
|
|
244
|
+
// `.notExist()` whose selector silently stopped matching reported nothing and
|
|
245
|
+
// exited 0 ([bug 0355](../../../../work/bugs/fixed/0355-a-cardinality-rule-cannot-tell-none-exist-from-my-selector-broke.md)).
|
|
246
|
+
// It is the worst shape to lose: a ratchet is designed never to fire, so a green
|
|
247
|
+
// is unremarkable and nobody looks.
|
|
248
|
+
if (facts.assertsCardinality()) {
|
|
249
|
+
const onDisk = cardinalitySelectorMissedDisk(facts, project);
|
|
250
|
+
return onDisk.length > 0 ? onDisk : violations;
|
|
251
|
+
}
|
|
218
252
|
// The author said empty is the point. `declaresEmpty()` — not
|
|
219
253
|
// `_expectEmpty` — because `CrossProjectBuilder` declares per side and
|
|
220
254
|
// overrides this; asking a fully-declared crossProject to declare would
|
|
@@ -360,6 +394,41 @@ export function deadSelectorFindings(facts) {
|
|
|
360
394
|
return { selector: [emptyProjectViolation(facts, project)], discovery: [] };
|
|
361
395
|
return deadSitesIn(facts, trees, project);
|
|
362
396
|
}
|
|
397
|
+
/**
|
|
398
|
+
* A cardinality rule's selectors that examined zero while the path they name **holds
|
|
399
|
+
* TypeScript on disk**.
|
|
400
|
+
*
|
|
401
|
+
* The discriminator is the filesystem, and it has to be — a holding ratchet and a broken
|
|
402
|
+
* selector are identical from the glob and the path universe. `.notExist()` over
|
|
403
|
+
* `'**\/legacy/**'` matches nothing after you delete `legacy/` BECAUSE the rule is working,
|
|
404
|
+
* so keying on glob satisfiability would fire on every ratchet doing its job. Measured, on a
|
|
405
|
+
* fixture where `apps/legacy/` exists on disk outside the tsconfig's `include`:
|
|
406
|
+
*
|
|
407
|
+
* | case | subjects | `classify` |
|
|
408
|
+
* | ------------------------------------------------ | -------- | ---------- |
|
|
409
|
+
* | files on disk, examined 0 — the selector missed | 0 | `holds-typescript` |
|
|
410
|
+
* | genuinely absent — the ratchet holding | 0 | `absent` |
|
|
411
|
+
*
|
|
412
|
+
* So only `holds-typescript` reports: the code being asserted about is right there and the
|
|
413
|
+
* rule did not see it. `absent` is the ratchet working. `no-typescript` means no modules are
|
|
414
|
+
* there, which is what the rule asserts. `not-determined` means the walk could not answer, and
|
|
415
|
+
* blaming the author for that is the confidently-wrong remedy `disk-set.ts` exists not to give.
|
|
416
|
+
*
|
|
417
|
+
* Reached only from `evidenceFloor`, which runs when `violations` is empty AND `examined` is
|
|
418
|
+
* zero — so the disk walk never sits on the common path, and a live selector never gets here.
|
|
419
|
+
*/
|
|
420
|
+
function cardinalitySelectorMissedDisk(facts, project) {
|
|
421
|
+
if (project === undefined)
|
|
422
|
+
return [];
|
|
423
|
+
const trees = facts.globs();
|
|
424
|
+
if (trees.length === 0)
|
|
425
|
+
return [];
|
|
426
|
+
// `deadSitesIn` rather than a second derivation: the finding a cardinality rule gets must be
|
|
427
|
+
// the same one every other rule gets for the same fault, or two shapes of rule explain one
|
|
428
|
+
// defect differently. `absenceClaimIsContradicted` for the same reason one level up — it is
|
|
429
|
+
// the policy `diagnose()` must apply identically, and it is owned in `disk-set.ts`.
|
|
430
|
+
return deadSitesIn(facts, trees, project).selector.filter((v) => v.element !== undefined && absenceClaimIsContradicted(project, v.element));
|
|
431
|
+
}
|
|
363
432
|
/** The value behind `TerminalBuilder.zeroSubjectsAdvice()`. */
|
|
364
433
|
export function zeroSubjectsAdviceOf(facts) {
|
|
365
434
|
const project = facts.getProject();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vacuity-diagnosis.js","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC5F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"vacuity-diagnosis.js","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,8 +28,10 @@ export declare function haveNameStartingWith<T extends Named>(prefix: string): P
|
|
|
28
28
|
export declare function haveNameEndingWith<T extends Named>(suffix: string): Predicate<T>;
|
|
29
29
|
/**
|
|
30
30
|
* Matches elements that reside in a file matching the given glob.
|
|
31
|
-
* The glob is matched against the absolute file path
|
|
32
|
-
*
|
|
31
|
+
* The glob is matched against the absolute file path, the path named from the
|
|
32
|
+
* project root (bug 0339) and — for a `'**\/'`-led glob only — the path named from
|
|
33
|
+
* the repository root (bug 0348). See `core/project-relative.ts`, which owns which
|
|
34
|
+
* spelling gets which.
|
|
33
35
|
*
|
|
34
36
|
* @example
|
|
35
37
|
* resideInFile('** /routes.ts') // matches /abs/path/src/routes.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,iGAAiG;AACjG,MAAM,WAAW,KAAK;IACpB,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,aAAa,IAAI,UAAU,CAAA;CAC5B;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,UAAU,IAAI,OAAO,CAAA;CACtB;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CASxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQhF;AAID
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,iGAAiG;AACjG,MAAM,WAAW,KAAK;IACpB,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,aAAa,IAAI,UAAU,CAAA;CAC5B;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,UAAU,IAAI,OAAO,CAAA;CACtB;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CASxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQhF;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CA4B1E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAyB5E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAWpE;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAKhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAKnE"}
|
|
@@ -43,8 +43,10 @@ export function haveNameEndingWith(suffix) {
|
|
|
43
43
|
// --- File & Folder predicates ---
|
|
44
44
|
/**
|
|
45
45
|
* Matches elements that reside in a file matching the given glob.
|
|
46
|
-
* The glob is matched against the absolute file path
|
|
47
|
-
*
|
|
46
|
+
* The glob is matched against the absolute file path, the path named from the
|
|
47
|
+
* project root (bug 0339) and — for a `'**\/'`-led glob only — the path named from
|
|
48
|
+
* the repository root (bug 0348). See `core/project-relative.ts`, which owns which
|
|
49
|
+
* spelling gets which.
|
|
48
50
|
*
|
|
49
51
|
* @example
|
|
50
52
|
* resideInFile('** /routes.ts') // matches /abs/path/src/routes.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAiB7F,0BAA0B;AAE1B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAkB,OAAwB;IACxE,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACzE,OAAO;QACL,WAAW,EAAE,sBAAsB,MAAM,CAAC,KAAK,CAAC,EAAE;QAClD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC9B,OAAO,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAkB,MAAc;IAClE,OAAO;QACL,WAAW,EAAE,4BAA4B,MAAM,GAAG;QAClD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC9B,OAAO,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAkB,MAAc;IAChE,OAAO;QACL,WAAW,EAAE,0BAA0B,MAAM,GAAG;QAChD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC9B,OAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;QACxC,CAAC;KACF,CAAA;AACH,CAAC;AAED,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAsD9D;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAC1F,wBAAgB,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAarE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAC7F,wBAAgB,aAAa,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAkBxE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAKrE"}
|