ng-checkup 0.5.2 → 0.6.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/README.md +19 -4
- package/dist/cache.d.ts +1 -0
- package/dist/cache.js.map +1 -1
- package/dist/checks/context.d.ts +4 -1
- package/dist/checks/context.js.map +1 -1
- package/dist/checks/dependencies.js +6 -3
- package/dist/checks/dependencies.js.map +1 -1
- package/dist/checks/deprecated-apis.js +13 -6
- package/dist/checks/deprecated-apis.js.map +1 -1
- package/dist/checks/version.js +14 -10
- package/dist/checks/version.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +49 -5
- package/dist/cli.js.map +1 -1
- package/dist/compatibility.d.ts +23 -0
- package/dist/compatibility.js +62 -18
- package/dist/compatibility.js.map +1 -1
- package/dist/deprecations.d.ts +13 -2
- package/dist/deprecations.js +20 -3
- package/dist/deprecations.js.map +1 -1
- package/dist/graph.js +39 -3
- package/dist/graph.js.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/lockfile.d.ts +29 -0
- package/dist/lockfile.js +110 -0
- package/dist/lockfile.js.map +1 -0
- package/dist/package-store.d.ts +29 -0
- package/dist/package-store.js +101 -0
- package/dist/package-store.js.map +1 -0
- package/dist/plan.d.ts +1 -1
- package/dist/plan.js +35 -8
- package/dist/plan.js.map +1 -1
- package/dist/remote.d.ts +34 -0
- package/dist/remote.js +69 -0
- package/dist/remote.js.map +1 -0
- package/dist/scan.d.ts +18 -0
- package/dist/scan.js +121 -3
- package/dist/scan.js.map +1 -1
- package/dist/typings.d.ts +25 -0
- package/dist/typings.js +49 -0
- package/dist/typings.js.map +1 -0
- package/dist/workspace.d.ts +9 -1
- package/dist/workspace.js +18 -4
- package/dist/workspace.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where downloaded package typings are kept between runs: `NG_CHECKUP_CACHE`,
|
|
3
|
+
* else `$XDG_CACHE_HOME/ng-checkup`, else `~/.cache/ng-checkup`. A published
|
|
4
|
+
* version never changes, so an entry is valid forever and is never refreshed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function cacheDirectory(): string;
|
|
7
|
+
/**
|
|
8
|
+
* A directory holding `package.json` and every `.d.ts` file of
|
|
9
|
+
* `name@version` exactly as npm publishes them, for the deprecation index to
|
|
10
|
+
* read as if it were `node_modules/<name>`.
|
|
11
|
+
*
|
|
12
|
+
* Downloads the package tarball from the public registry once and keeps only
|
|
13
|
+
* type definitions and package manifests: `@angular/core` is about 4 MB of
|
|
14
|
+
* tarball, but its typings are a fraction of that, and nothing that could run
|
|
15
|
+
* is written to disk. Nothing is executed either way.
|
|
16
|
+
*
|
|
17
|
+
* Undefined when the download fails (offline, a private package, a timeout of
|
|
18
|
+
* 30 seconds); the caller then indexes what it has and the report says which
|
|
19
|
+
* packages were missing.
|
|
20
|
+
*/
|
|
21
|
+
export declare function packageTypings(name: string, version: string, offline?: boolean): Promise<string | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* The regular files of an uncompressed tar archive, path to content.
|
|
24
|
+
*
|
|
25
|
+
* Handles the ustar `prefix` field and both long-name extensions (pax `path`
|
|
26
|
+
* records and GNU `L` entries), which is everything `npm pack` and the
|
|
27
|
+
* registry produce. Links, directories and devices are skipped.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readTar(archive: Buffer): Map<string, Buffer>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join, normalize, sep } from 'node:path';
|
|
4
|
+
import { gunzipSync } from 'node:zlib';
|
|
5
|
+
/**
|
|
6
|
+
* Where downloaded package typings are kept between runs: `NG_CHECKUP_CACHE`,
|
|
7
|
+
* else `$XDG_CACHE_HOME/ng-checkup`, else `~/.cache/ng-checkup`. A published
|
|
8
|
+
* version never changes, so an entry is valid forever and is never refreshed.
|
|
9
|
+
*/
|
|
10
|
+
export function cacheDirectory() {
|
|
11
|
+
return process.env['NG_CHECKUP_CACHE'] ?? join(process.env['XDG_CACHE_HOME'] ?? join(homedir(), '.cache'), 'ng-checkup');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A directory holding `package.json` and every `.d.ts` file of
|
|
15
|
+
* `name@version` exactly as npm publishes them, for the deprecation index to
|
|
16
|
+
* read as if it were `node_modules/<name>`.
|
|
17
|
+
*
|
|
18
|
+
* Downloads the package tarball from the public registry once and keeps only
|
|
19
|
+
* type definitions and package manifests: `@angular/core` is about 4 MB of
|
|
20
|
+
* tarball, but its typings are a fraction of that, and nothing that could run
|
|
21
|
+
* is written to disk. Nothing is executed either way.
|
|
22
|
+
*
|
|
23
|
+
* Undefined when the download fails (offline, a private package, a timeout of
|
|
24
|
+
* 30 seconds); the caller then indexes what it has and the report says which
|
|
25
|
+
* packages were missing.
|
|
26
|
+
*/
|
|
27
|
+
export async function packageTypings(name, version, offline = false) {
|
|
28
|
+
const directory = join(cacheDirectory(), 'packages', `${name.replace('/', '+')}@${version}`);
|
|
29
|
+
if (existsSync(join(directory, 'package.json')))
|
|
30
|
+
return directory;
|
|
31
|
+
// --offline still uses what an earlier run downloaded; it only never fetches.
|
|
32
|
+
if (offline)
|
|
33
|
+
return undefined;
|
|
34
|
+
try {
|
|
35
|
+
const response = await fetch(`https://registry.npmjs.org/${name}/-/${name.split('/').pop()}-${version}.tgz`, { signal: AbortSignal.timeout(30_000) });
|
|
36
|
+
if (!response.ok)
|
|
37
|
+
return undefined;
|
|
38
|
+
const files = readTar(gunzipSync(Buffer.from(await response.arrayBuffer())));
|
|
39
|
+
// Written to a sibling first and renamed, so an interrupted download never
|
|
40
|
+
// leaves a half-filled directory that a later run would trust.
|
|
41
|
+
const partial = `${directory}.partial-${process.pid}`;
|
|
42
|
+
rmSync(partial, { recursive: true, force: true });
|
|
43
|
+
let kept = 0;
|
|
44
|
+
for (const [path, content] of files) {
|
|
45
|
+
const relative = path.replace(/^[^/]+\//, ''); // npm puts everything under `package/`
|
|
46
|
+
if (!/(^|\/)package\.json$|\.d\.(m|c)?ts$/.test(relative))
|
|
47
|
+
continue;
|
|
48
|
+
const target = normalize(join(partial, relative));
|
|
49
|
+
if (!target.startsWith(partial + sep))
|
|
50
|
+
continue; // never write outside the cache entry
|
|
51
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
52
|
+
writeFileSync(target, content);
|
|
53
|
+
kept++;
|
|
54
|
+
}
|
|
55
|
+
if (kept === 0 || !existsSync(join(partial, 'package.json')))
|
|
56
|
+
return undefined;
|
|
57
|
+
mkdirSync(dirname(directory), { recursive: true });
|
|
58
|
+
rmSync(directory, { recursive: true, force: true });
|
|
59
|
+
renameSync(partial, directory);
|
|
60
|
+
return directory;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The regular files of an uncompressed tar archive, path to content.
|
|
68
|
+
*
|
|
69
|
+
* Handles the ustar `prefix` field and both long-name extensions (pax `path`
|
|
70
|
+
* records and GNU `L` entries), which is everything `npm pack` and the
|
|
71
|
+
* registry produce. Links, directories and devices are skipped.
|
|
72
|
+
*/
|
|
73
|
+
export function readTar(archive) {
|
|
74
|
+
const files = new Map();
|
|
75
|
+
let offset = 0;
|
|
76
|
+
let longName;
|
|
77
|
+
while (offset + 512 <= archive.length) {
|
|
78
|
+
const header = archive.subarray(offset, offset + 512);
|
|
79
|
+
if (header.every((byte) => byte === 0))
|
|
80
|
+
break;
|
|
81
|
+
const field = (start, length) => header.subarray(start, start + length).toString('utf8').replace(/\0.*$/s, '');
|
|
82
|
+
const size = parseInt(field(124, 12).trim() || '0', 8);
|
|
83
|
+
const type = field(156, 1) || '0';
|
|
84
|
+
const prefix = field(345, 155);
|
|
85
|
+
const name = longName ?? (prefix ? `${prefix}/${field(0, 100)}` : field(0, 100));
|
|
86
|
+
const body = archive.subarray(offset + 512, offset + 512 + size);
|
|
87
|
+
longName = undefined;
|
|
88
|
+
if (type === 'x') {
|
|
89
|
+
longName = /(?:^|\n)\d+ path=([^\n]*)\n/.exec(body.toString('utf8'))?.[1];
|
|
90
|
+
}
|
|
91
|
+
else if (type === 'L') {
|
|
92
|
+
longName = body.toString('utf8').replace(/\0.*$/s, '');
|
|
93
|
+
}
|
|
94
|
+
else if (type === '0' || type === '7') {
|
|
95
|
+
files.set(name, Buffer.from(body));
|
|
96
|
+
}
|
|
97
|
+
offset += 512 + Math.ceil(size / 512) * 512;
|
|
98
|
+
}
|
|
99
|
+
return files;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=package-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-store.js","sourceRoot":"","sources":["../src/package-store.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AngularVersionInfo } from './angular-versions.js';
|
|
2
2
|
import type { PackageCompatibility } from './compatibility.js';
|
|
3
3
|
import type { CheckResult } from './types.js';
|
|
4
|
-
import {
|
|
4
|
+
import type { WorkspaceInfo } from './workspace.js';
|
|
5
5
|
/** One requirement of a step, checked against what the project has now. */
|
|
6
6
|
export interface PlanRequirement {
|
|
7
7
|
name: 'Node.js' | 'TypeScript' | 'RxJS' | 'zone.js';
|
package/dist/plan.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ANGULAR_VERSIONS } from './angular-versions.js';
|
|
2
|
-
import { readInstalledVersion } from './workspace.js';
|
|
3
2
|
/**
|
|
4
3
|
* Plans the upgrade from the installed Angular major to `target`, one major
|
|
5
4
|
* at a time as `ng update` requires.
|
|
@@ -30,9 +29,9 @@ export function buildPlan(workspace, checks, target, versions = ANGULAR_VERSIONS
|
|
|
30
29
|
const dependencies = workspace.dependencies;
|
|
31
30
|
const has = (name) => name in dependencies;
|
|
32
31
|
const current = {
|
|
33
|
-
typescript:
|
|
34
|
-
rxjs:
|
|
35
|
-
zoneJs:
|
|
32
|
+
typescript: workspace.versions['typescript'] ?? dependencies['typescript'],
|
|
33
|
+
rxjs: workspace.versions['rxjs'] ?? dependencies['rxjs'],
|
|
34
|
+
zoneJs: workspace.versions['zone.js'] ?? dependencies['zone.js'],
|
|
36
35
|
};
|
|
37
36
|
const before = [];
|
|
38
37
|
const overdue = checks.find((result) => result.id === 'deprecated-apis')?.findings.filter((finding) => finding.severity === 'high') ?? [];
|
|
@@ -169,6 +168,37 @@ function requirement(name, range, current) {
|
|
|
169
168
|
return { name, range, current, satisfied: version ? satisfies(version, range) : undefined };
|
|
170
169
|
}
|
|
171
170
|
/** `[major, minor, patch]` of `1.2.3`, `^1.2`, `~4.3.5`, `>=5`; undefined for anything without a number. */
|
|
171
|
+
/**
|
|
172
|
+
* One `||` alternative as plain comparators, in the forms packages really
|
|
173
|
+
* publish beyond the textbook ones: a space after the operator (`>= 14.x`, as
|
|
174
|
+
* `@sentry/angular` declares), a partial version with an operator (`<= 21.x`
|
|
175
|
+
* means below 22, `> 21` means 22 or later), and a hyphen range
|
|
176
|
+
* (`14 - 21.x`). Misreading `>= 14.x <= 21.x` reported Angular 16 as
|
|
177
|
+
* unsupported by a package that supports it.
|
|
178
|
+
*/
|
|
179
|
+
function normaliseRange(alternative) {
|
|
180
|
+
let text = alternative.trim().replace(/(>=|<=|>|<|=|\^|~)\s+/g, '$1');
|
|
181
|
+
const hyphen = /^(\S+)\s+-\s+(\S+)$/.exec(text);
|
|
182
|
+
if (hyphen)
|
|
183
|
+
text = `>=${hyphen[1]} <=${hyphen[2]}`;
|
|
184
|
+
return text
|
|
185
|
+
.split(/\s+/)
|
|
186
|
+
.filter(Boolean)
|
|
187
|
+
.map((comparator) => {
|
|
188
|
+
const match = /^(<=|>)(\d+)(?:\.(\d+|x|\*))?(?:\.(\d+|x|\*))?$/.exec(comparator);
|
|
189
|
+
if (!match)
|
|
190
|
+
return comparator;
|
|
191
|
+
const parts = [match[2], match[3], match[4]].filter((part) => part !== undefined && part !== 'x' && part !== '*').map(Number);
|
|
192
|
+
if (parts.length === 3)
|
|
193
|
+
return comparator;
|
|
194
|
+
// `<=21.x` is `<22.0.0` and `>21.x` is `>=22.0.0`: bump the last given part.
|
|
195
|
+
const bumped = [...parts];
|
|
196
|
+
bumped[bumped.length - 1] += 1;
|
|
197
|
+
while (bumped.length < 3)
|
|
198
|
+
bumped.push(0);
|
|
199
|
+
return `${match[1] === '<=' ? '<' : '>='}${bumped.join('.')}`;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
172
202
|
function parseVersion(text) {
|
|
173
203
|
const match = /(\d+)(?:\.(\d+|x|\*))?(?:\.(\d+|x|\*))?/.exec(text);
|
|
174
204
|
if (!match)
|
|
@@ -191,10 +221,7 @@ function compare(left, right) {
|
|
|
191
221
|
* the requirement ranges in the snapshot, not a general semver implementation.
|
|
192
222
|
*/
|
|
193
223
|
export function satisfies(version, range) {
|
|
194
|
-
return range.split('||').some((alternative) => alternative
|
|
195
|
-
.trim()
|
|
196
|
-
.split(/\s+/)
|
|
197
|
-
.filter(Boolean)
|
|
224
|
+
return range.split('||').some((alternative) => normaliseRange(alternative)
|
|
198
225
|
.every((comparator) => {
|
|
199
226
|
const operator = /^(\^|~|>=|<=|>|<|=)?/.exec(comparator)[0];
|
|
200
227
|
const bound = parseVersion(comparator.slice(operator.length));
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/remote.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** A repository named on the command line instead of a local path. */
|
|
2
|
+
export interface RemoteRepository {
|
|
3
|
+
/** What `git` clones. */
|
|
4
|
+
url: string;
|
|
5
|
+
/** A branch, tag or commit SHA; undefined for the default branch. */
|
|
6
|
+
ref?: string;
|
|
7
|
+
/** `github.com/owner/repo`, for the report header. */
|
|
8
|
+
label: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Recognises a repository argument: `github:owner/repo`, `gitlab:owner/repo`
|
|
12
|
+
* and `bitbucket:owner/repo` (each with an optional `#ref`), a
|
|
13
|
+
* `https://github.com/owner/repo` page URL (also `/tree/<ref>`), or any
|
|
14
|
+
* `https://…` / `git@…` URL ending in `.git`. Undefined for anything else,
|
|
15
|
+
* which the CLI then treats as a local path.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseRemote(argument: string): RemoteRepository | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Clones the repository shallow into a fresh temporary directory: only the
|
|
20
|
+
* one commit, so a repository with years of history costs no more than its
|
|
21
|
+
* current files. Nothing is installed and nothing in it is run; the analysis
|
|
22
|
+
* reads files, and dependency typings come from the npm registry.
|
|
23
|
+
*
|
|
24
|
+
* A commit SHA is fetched directly (GitHub and GitLab allow it); a branch or
|
|
25
|
+
* tag is cloned with `--branch`. The caller must call `remove` when done,
|
|
26
|
+
* also on failure.
|
|
27
|
+
*
|
|
28
|
+
* @throws When `git` is missing or the clone fails, with git's own message.
|
|
29
|
+
*/
|
|
30
|
+
export declare function cloneRemote(repository: RemoteRepository): {
|
|
31
|
+
directory: string;
|
|
32
|
+
commit: string;
|
|
33
|
+
remove: () => void;
|
|
34
|
+
};
|
package/dist/remote.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
/**
|
|
6
|
+
* Recognises a repository argument: `github:owner/repo`, `gitlab:owner/repo`
|
|
7
|
+
* and `bitbucket:owner/repo` (each with an optional `#ref`), a
|
|
8
|
+
* `https://github.com/owner/repo` page URL (also `/tree/<ref>`), or any
|
|
9
|
+
* `https://…` / `git@…` URL ending in `.git`. Undefined for anything else,
|
|
10
|
+
* which the CLI then treats as a local path.
|
|
11
|
+
*/
|
|
12
|
+
export function parseRemote(argument) {
|
|
13
|
+
const [spec, hashRef] = argument.split('#', 2);
|
|
14
|
+
const shorthand = /^(github|gitlab|bitbucket):([\w.-]+\/[\w.-]+)$/.exec(spec);
|
|
15
|
+
if (shorthand) {
|
|
16
|
+
const host = { github: 'github.com', gitlab: 'gitlab.com', bitbucket: 'bitbucket.org' }[shorthand[1]];
|
|
17
|
+
const path = shorthand[2].replace(/\.git$/, '');
|
|
18
|
+
return { url: `https://${host}/${path}.git`, ...(hashRef ? { ref: hashRef } : {}), label: `${host}/${path}` };
|
|
19
|
+
}
|
|
20
|
+
const page = /^https:\/\/(github\.com|gitlab\.com|bitbucket\.org)\/([\w.-]+\/[\w.-]+?)(?:\.git)?(?:\/(?:-\/)?tree\/([^?#]+))?\/?$/.exec(spec);
|
|
21
|
+
if (page) {
|
|
22
|
+
const ref = hashRef ?? page[3];
|
|
23
|
+
return { url: `https://${page[1]}/${page[2]}.git`, ...(ref ? { ref } : {}), label: `${page[1]}/${page[2]}` };
|
|
24
|
+
}
|
|
25
|
+
if (/^(https:\/\/|git@)\S+\.git$/.test(spec)) {
|
|
26
|
+
const label = spec.replace(/^https:\/\//, '').replace(/^git@([^:]+):/, '$1/').replace(/\.git$/, '');
|
|
27
|
+
return { url: spec, ...(hashRef ? { ref: hashRef } : {}), label };
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Clones the repository shallow into a fresh temporary directory: only the
|
|
33
|
+
* one commit, so a repository with years of history costs no more than its
|
|
34
|
+
* current files. Nothing is installed and nothing in it is run; the analysis
|
|
35
|
+
* reads files, and dependency typings come from the npm registry.
|
|
36
|
+
*
|
|
37
|
+
* A commit SHA is fetched directly (GitHub and GitLab allow it); a branch or
|
|
38
|
+
* tag is cloned with `--branch`. The caller must call `remove` when done,
|
|
39
|
+
* also on failure.
|
|
40
|
+
*
|
|
41
|
+
* @throws When `git` is missing or the clone fails, with git's own message.
|
|
42
|
+
*/
|
|
43
|
+
export function cloneRemote(repository) {
|
|
44
|
+
const directory = mkdtempSync(join(tmpdir(), 'ng-checkup-'));
|
|
45
|
+
const remove = () => rmSync(directory, { recursive: true, force: true });
|
|
46
|
+
// GIT_TERMINAL_PROMPT=0: a private repository fails at once instead of
|
|
47
|
+
// waiting for a username on a terminal nobody is watching.
|
|
48
|
+
const git = (...args) => execFileSync('git', args, { cwd: directory, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], env: { ...process.env, GIT_TERMINAL_PROMPT: '0' } }).trim();
|
|
49
|
+
try {
|
|
50
|
+
if (repository.ref && /^[0-9a-f]{7,40}$/i.test(repository.ref)) {
|
|
51
|
+
git('init', '-q');
|
|
52
|
+
git('remote', 'add', 'origin', repository.url);
|
|
53
|
+
git('fetch', '-q', '--depth', '1', 'origin', repository.ref);
|
|
54
|
+
git('checkout', '-q', 'FETCH_HEAD');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
git('clone', '-q', '--depth', '1', ...(repository.ref ? ['--branch', repository.ref] : []), repository.url, '.');
|
|
58
|
+
}
|
|
59
|
+
return { directory, commit: git('rev-parse', 'HEAD'), remove };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
remove();
|
|
63
|
+
const stderr = error.stderr?.trim();
|
|
64
|
+
if (error.code === 'ENOENT')
|
|
65
|
+
throw new Error('git is not installed, and it is needed to check a remote repository');
|
|
66
|
+
throw new Error(`could not clone ${repository.label}${repository.ref ? ` at ${repository.ref}` : ''}${stderr ? `: ${stderr.split('\n').pop()}` : ''}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
|
package/dist/scan.d.ts
CHANGED
|
@@ -4,7 +4,15 @@ export interface ImportBinding {
|
|
|
4
4
|
imported: string;
|
|
5
5
|
/** The name it is bound to in this file. */
|
|
6
6
|
local: string;
|
|
7
|
+
/** For a re-export, the name it is exported under (`B` in `export { A as B } from`). */
|
|
8
|
+
exported?: string;
|
|
7
9
|
typeOnly: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* False when the file only uses the binding as a type. TypeScript erases
|
|
12
|
+
* such an import even without `import type`, so it is no runtime
|
|
13
|
+
* dependency (see `valueReferences`). Always true for a re-export.
|
|
14
|
+
*/
|
|
15
|
+
valueUsed: boolean;
|
|
8
16
|
}
|
|
9
17
|
/** One `import`, `export … from` or dynamic `import()` in a source file. */
|
|
10
18
|
export interface ImportFact {
|
|
@@ -20,6 +28,8 @@ export interface ImportFact {
|
|
|
20
28
|
dynamic: boolean;
|
|
21
29
|
/** Empty for a side-effect import (`import 'zone.js'`) and for `export * from`. */
|
|
22
30
|
bindings: ImportBinding[];
|
|
31
|
+
/** True for `export … from`: the file passes the names on rather than using them. */
|
|
32
|
+
reexport?: boolean;
|
|
23
33
|
}
|
|
24
34
|
/** One `@Component` class. */
|
|
25
35
|
export interface ComponentFact {
|
|
@@ -145,6 +155,14 @@ export interface SourceFileFacts {
|
|
|
145
155
|
line: number;
|
|
146
156
|
kind: string;
|
|
147
157
|
}>;
|
|
158
|
+
/**
|
|
159
|
+
* Names this file exports only as types: `export type`, `export interface`,
|
|
160
|
+
* `export { type X }`, and `export { X }` of a local type. A name that is
|
|
161
|
+
* also a value (an interface merged with a const) is left out. The graph
|
|
162
|
+
* uses it to drop imports that name nothing but types, which TypeScript
|
|
163
|
+
* erases even without `import type`.
|
|
164
|
+
*/
|
|
165
|
+
typeExports: string[];
|
|
148
166
|
/** `templateUrl`/`template` is resolved by the template scan; inline templates are collected here. */
|
|
149
167
|
inlineTemplates: TemplateFact[];
|
|
150
168
|
}
|
package/dist/scan.js
CHANGED
|
@@ -32,6 +32,7 @@ export function scanSourceFile(root, absolutePath) {
|
|
|
32
32
|
nonNullLines: [],
|
|
33
33
|
definiteAssignments: 0,
|
|
34
34
|
typeSuppressions: (text.match(/@ts-(ignore|expect-error|nocheck)\b/g) ?? []).length,
|
|
35
|
+
typeExports: typeExportsOf(source),
|
|
35
36
|
toPromiseLines: [],
|
|
36
37
|
bypassSecurityLines: [],
|
|
37
38
|
unsafeDomLines: [],
|
|
@@ -51,6 +52,14 @@ export function scanSourceFile(root, absolutePath) {
|
|
|
51
52
|
for (const binding of fact.bindings)
|
|
52
53
|
locals.set(binding.local, { module: fact.specifier, imported: binding.imported });
|
|
53
54
|
}
|
|
55
|
+
// Which imported names the file uses as values; the rest TypeScript erases.
|
|
56
|
+
const valueNames = valueReferences(source, new Set(locals.keys()));
|
|
57
|
+
for (const fact of facts.imports) {
|
|
58
|
+
if (fact.reexport)
|
|
59
|
+
continue;
|
|
60
|
+
for (const binding of fact.bindings)
|
|
61
|
+
binding.valueUsed = valueNames.has(binding.local);
|
|
62
|
+
}
|
|
54
63
|
const lineOf = (node) => source.getLineAndCharacterOfPosition(node.getStart(source)).line + 1;
|
|
55
64
|
/** `module#name` for an identifier bound by an import, undefined for anything local or global. */
|
|
56
65
|
const keyOf = (expression) => {
|
|
@@ -224,6 +233,112 @@ export function scanSourceFile(root, absolutePath) {
|
|
|
224
233
|
visit(source);
|
|
225
234
|
return facts;
|
|
226
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* The names out of `names` that the file references as values: anywhere
|
|
238
|
+
* outside a type annotation, an `implements` clause, an interface or a type
|
|
239
|
+
* alias. That is the rule TypeScript applies when it decides to drop an
|
|
240
|
+
* import: `import { Store } from './store'` used only in `store: Store` is
|
|
241
|
+
* erased, and so is the dependency.
|
|
242
|
+
*
|
|
243
|
+
* One exception makes Angular code a runtime dependency where plain
|
|
244
|
+
* TypeScript would not be: the parameter types of a decorated class's
|
|
245
|
+
* constructor. The Angular compiler turns them into DI tokens
|
|
246
|
+
* (`ɵɵinject(Store)`), so they count as values, which is what keeps a real
|
|
247
|
+
* service cycle visible.
|
|
248
|
+
*/
|
|
249
|
+
function valueReferences(source, names) {
|
|
250
|
+
const used = new Set();
|
|
251
|
+
if (names.size === 0)
|
|
252
|
+
return used;
|
|
253
|
+
const visit = (node, inType) => {
|
|
254
|
+
if (ts.isImportDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node))
|
|
255
|
+
return;
|
|
256
|
+
if (ts.isHeritageClause(node)) {
|
|
257
|
+
const implementsClause = node.token === ts.SyntaxKind.ImplementsKeyword;
|
|
258
|
+
for (const type of node.types) {
|
|
259
|
+
visit(type.expression, inType || implementsClause);
|
|
260
|
+
for (const argument of type.typeArguments ?? [])
|
|
261
|
+
visit(argument, true);
|
|
262
|
+
}
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (ts.isConstructorDeclaration(node) && ts.isClassLike(node.parent) && (ts.getDecorators(node.parent) ?? []).length > 0) {
|
|
266
|
+
for (const parameter of node.parameters) {
|
|
267
|
+
for (const decorator of ts.getDecorators(parameter) ?? [])
|
|
268
|
+
visit(decorator, false);
|
|
269
|
+
// The parameter's own type is the DI token; its type arguments are not.
|
|
270
|
+
if (parameter.type && ts.isTypeReferenceNode(parameter.type))
|
|
271
|
+
visit(parameter.type.typeName, false);
|
|
272
|
+
else if (parameter.type)
|
|
273
|
+
visit(parameter.type, true);
|
|
274
|
+
if (parameter.initializer)
|
|
275
|
+
visit(parameter.initializer, false);
|
|
276
|
+
}
|
|
277
|
+
if (node.body)
|
|
278
|
+
visit(node.body, false);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (ts.isIdentifier(node)) {
|
|
282
|
+
if (!inType && names.has(node.text) && isReference(node))
|
|
283
|
+
used.add(node.text);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const nowInType = inType || ts.isTypeNode(node);
|
|
287
|
+
ts.forEachChild(node, (child) => visit(child, nowInType));
|
|
288
|
+
};
|
|
289
|
+
visit(source, false);
|
|
290
|
+
return used;
|
|
291
|
+
}
|
|
292
|
+
/** False for an identifier that only names something: a property after a dot, an object key, a declared name. */
|
|
293
|
+
function isReference(node) {
|
|
294
|
+
const parent = node.parent;
|
|
295
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
296
|
+
return false;
|
|
297
|
+
if (ts.isQualifiedName(parent) && parent.right === node)
|
|
298
|
+
return false;
|
|
299
|
+
if ((ts.isPropertyAssignment(parent) || ts.isPropertyDeclaration(parent) || ts.isMethodDeclaration(parent) || ts.isGetAccessor(parent) || ts.isSetAccessor(parent) || ts.isPropertySignature(parent)) && parent.name === node)
|
|
300
|
+
return false;
|
|
301
|
+
if ((ts.isVariableDeclaration(parent) || ts.isParameter(parent) || ts.isFunctionDeclaration(parent) || ts.isClassDeclaration(parent) || ts.isEnumMember(parent) || ts.isBindingElement(parent)) && parent.name === node)
|
|
302
|
+
return false;
|
|
303
|
+
if (ts.isExportSpecifier(parent))
|
|
304
|
+
return !parent.isTypeOnly && !parent.parent.parent.isTypeOnly;
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
/** See `SourceFileFacts.typeExports`. Top-level statements only, which is where exports live. */
|
|
308
|
+
function typeExportsOf(source) {
|
|
309
|
+
const exported = (node) => ts.canHaveModifiers(node) && (ts.getModifiers(node) ?? []).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword);
|
|
310
|
+
const types = new Set();
|
|
311
|
+
const values = new Set();
|
|
312
|
+
const exportedTypes = new Set();
|
|
313
|
+
for (const statement of source.statements) {
|
|
314
|
+
if (ts.isTypeAliasDeclaration(statement) || ts.isInterfaceDeclaration(statement)) {
|
|
315
|
+
types.add(statement.name.text);
|
|
316
|
+
if (exported(statement))
|
|
317
|
+
exportedTypes.add(statement.name.text);
|
|
318
|
+
}
|
|
319
|
+
else if ((ts.isClassDeclaration(statement) || ts.isFunctionDeclaration(statement) || ts.isEnumDeclaration(statement)) && statement.name) {
|
|
320
|
+
values.add(statement.name.text);
|
|
321
|
+
}
|
|
322
|
+
else if (ts.isVariableStatement(statement)) {
|
|
323
|
+
for (const declaration of statement.declarationList.declarations)
|
|
324
|
+
if (ts.isIdentifier(declaration.name))
|
|
325
|
+
values.add(declaration.name.text);
|
|
326
|
+
}
|
|
327
|
+
else if (ts.isModuleDeclaration(statement) && ts.isIdentifier(statement.name)) {
|
|
328
|
+
values.add(statement.name.text);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
for (const statement of source.statements) {
|
|
332
|
+
if (!ts.isExportDeclaration(statement) || statement.moduleSpecifier || !statement.exportClause || !ts.isNamedExports(statement.exportClause))
|
|
333
|
+
continue;
|
|
334
|
+
for (const element of statement.exportClause.elements) {
|
|
335
|
+
const local = (element.propertyName ?? element.name).text;
|
|
336
|
+
if (statement.isTypeOnly || element.isTypeOnly || (types.has(local) && !values.has(local)))
|
|
337
|
+
exportedTypes.add(element.name.text);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return [...exportedTypes].filter((name) => !values.has(name));
|
|
341
|
+
}
|
|
227
342
|
/**
|
|
228
343
|
* True for HTML the code wrote itself: a string literal, a template literal
|
|
229
344
|
* without substitutions, or literals joined with `+`. `el.innerHTML = ''` (the
|
|
@@ -252,13 +367,13 @@ function importFactOf(statement, source) {
|
|
|
252
367
|
const bindings = [];
|
|
253
368
|
const clauseTypeOnly = clause?.isTypeOnly ?? false;
|
|
254
369
|
if (clause?.name)
|
|
255
|
-
bindings.push({ imported: 'default', local: clause.name.text, typeOnly: clauseTypeOnly });
|
|
370
|
+
bindings.push({ imported: 'default', local: clause.name.text, typeOnly: clauseTypeOnly, valueUsed: true });
|
|
256
371
|
const named = clause?.namedBindings;
|
|
257
372
|
if (named && ts.isNamespaceImport(named))
|
|
258
|
-
bindings.push({ imported: '*', local: named.name.text, typeOnly: clauseTypeOnly });
|
|
373
|
+
bindings.push({ imported: '*', local: named.name.text, typeOnly: clauseTypeOnly, valueUsed: true });
|
|
259
374
|
if (named && ts.isNamedImports(named)) {
|
|
260
375
|
for (const element of named.elements) {
|
|
261
|
-
bindings.push({ imported: (element.propertyName ?? element.name).text, local: element.name.text, typeOnly: clauseTypeOnly || element.isTypeOnly });
|
|
376
|
+
bindings.push({ imported: (element.propertyName ?? element.name).text, local: element.name.text, typeOnly: clauseTypeOnly || element.isTypeOnly, valueUsed: true });
|
|
262
377
|
}
|
|
263
378
|
}
|
|
264
379
|
return {
|
|
@@ -276,7 +391,9 @@ function importFactOf(statement, source) {
|
|
|
276
391
|
imported: (element.propertyName ?? element.name).text,
|
|
277
392
|
// A re-export binds nothing locally; the empty name keeps it out of the local lookup.
|
|
278
393
|
local: '',
|
|
394
|
+
exported: element.name.text,
|
|
279
395
|
typeOnly: statement.isTypeOnly || element.isTypeOnly,
|
|
396
|
+
valueUsed: true,
|
|
280
397
|
}))
|
|
281
398
|
: [];
|
|
282
399
|
return {
|
|
@@ -285,6 +402,7 @@ function importFactOf(statement, source) {
|
|
|
285
402
|
typeOnly: statement.isTypeOnly || (bindings.length > 0 && bindings.every((binding) => binding.typeOnly)),
|
|
286
403
|
dynamic: false,
|
|
287
404
|
bindings,
|
|
405
|
+
reexport: true,
|
|
288
406
|
};
|
|
289
407
|
}
|
|
290
408
|
return undefined;
|