monkeypatchlist 0.0.0-stage → 0.1.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.
Files changed (221) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +61 -0
  3. package/README.md +183 -2
  4. package/catalog/catalog.json +552211 -0
  5. package/catalog/catalog.schema.json +787 -0
  6. package/catalog/changelog.json +3 -0
  7. package/dist/bin/monkeypatchlist.d.ts +2 -0
  8. package/dist/bin/monkeypatchlist.js +3 -0
  9. package/dist/catalog.d.ts +561 -0
  10. package/dist/catalog.js +58 -0
  11. package/dist/cli.d.ts +84 -0
  12. package/dist/cli.js +470 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +1 -0
  15. package/dist/lockfile-input.d.ts +9 -0
  16. package/dist/lockfile-input.js +91 -0
  17. package/dist/packages/analysis/binding.d.ts +2 -0
  18. package/dist/packages/analysis/binding.js +5 -0
  19. package/dist/packages/analysis/index.d.ts +10 -0
  20. package/dist/packages/analysis/index.js +13 -0
  21. package/dist/packages/analysis/job.d.ts +33 -0
  22. package/dist/packages/analysis/job.js +85 -0
  23. package/dist/packages/analysis/lib/absence-tags.d.ts +34 -0
  24. package/dist/packages/analysis/lib/absence-tags.js +340 -0
  25. package/dist/packages/analysis/lib/ast.d.ts +28 -0
  26. package/dist/packages/analysis/lib/ast.js +64 -0
  27. package/dist/packages/analysis/lib/binding.d.ts +36 -0
  28. package/dist/packages/analysis/lib/binding.js +66 -0
  29. package/dist/packages/analysis/lib/budget.d.ts +80 -0
  30. package/dist/packages/analysis/lib/budget.js +31 -0
  31. package/dist/packages/analysis/lib/catch-arms.d.ts +19 -0
  32. package/dist/packages/analysis/lib/catch-arms.js +351 -0
  33. package/dist/packages/analysis/lib/chunk-loads.d.ts +160 -0
  34. package/dist/packages/analysis/lib/chunk-loads.js +882 -0
  35. package/dist/packages/analysis/lib/chunk-registry.d.ts +45 -0
  36. package/dist/packages/analysis/lib/chunk-registry.js +334 -0
  37. package/dist/packages/analysis/lib/code-routes.d.ts +52 -0
  38. package/dist/packages/analysis/lib/code-routes.js +921 -0
  39. package/dist/packages/analysis/lib/collisions.d.ts +22 -0
  40. package/dist/packages/analysis/lib/collisions.js +103 -0
  41. package/dist/packages/analysis/lib/definitions.d.ts +76 -0
  42. package/dist/packages/analysis/lib/definitions.js +782 -0
  43. package/dist/packages/analysis/lib/early-exits.d.ts +39 -0
  44. package/dist/packages/analysis/lib/early-exits.js +161 -0
  45. package/dist/packages/analysis/lib/effect.d.ts +138 -0
  46. package/dist/packages/analysis/lib/effect.js +800 -0
  47. package/dist/packages/analysis/lib/global-object.d.ts +581 -0
  48. package/dist/packages/analysis/lib/global-object.js +8240 -0
  49. package/dist/packages/analysis/lib/keys.d.ts +33 -0
  50. package/dist/packages/analysis/lib/keys.js +82 -0
  51. package/dist/packages/analysis/lib/line-starts.d.ts +41 -0
  52. package/dist/packages/analysis/lib/line-starts.js +79 -0
  53. package/dist/packages/analysis/lib/link-group.d.ts +51 -0
  54. package/dist/packages/analysis/lib/link-group.js +487 -0
  55. package/dist/packages/analysis/lib/module-links.d.ts +117 -0
  56. package/dist/packages/analysis/lib/module-links.js +1060 -0
  57. package/dist/packages/analysis/lib/nested-code.d.ts +38 -0
  58. package/dist/packages/analysis/lib/nested-code.js +200 -0
  59. package/dist/packages/analysis/lib/numeric.d.ts +16 -0
  60. package/dist/packages/analysis/lib/numeric.js +216 -0
  61. package/dist/packages/analysis/lib/once-flags.d.ts +12 -0
  62. package/dist/packages/analysis/lib/once-flags.js +190 -0
  63. package/dist/packages/analysis/lib/parameter-arguments.d.ts +12 -0
  64. package/dist/packages/analysis/lib/parameter-arguments.js +34 -0
  65. package/dist/packages/analysis/lib/parse.d.ts +10 -0
  66. package/dist/packages/analysis/lib/parse.js +39 -0
  67. package/dist/packages/analysis/lib/partial.d.ts +60 -0
  68. package/dist/packages/analysis/lib/partial.js +518 -0
  69. package/dist/packages/analysis/lib/print.d.ts +3 -0
  70. package/dist/packages/analysis/lib/print.js +150 -0
  71. package/dist/packages/analysis/lib/reachability.d.ts +137 -0
  72. package/dist/packages/analysis/lib/reachability.js +1295 -0
  73. package/dist/packages/analysis/lib/resolver.d.ts +13 -0
  74. package/dist/packages/analysis/lib/resolver.js +2886 -0
  75. package/dist/packages/analysis/lib/restores.d.ts +42 -0
  76. package/dist/packages/analysis/lib/restores.js +482 -0
  77. package/dist/packages/analysis/lib/rewritten-deletes.d.ts +6 -0
  78. package/dist/packages/analysis/lib/rewritten-deletes.js +142 -0
  79. package/dist/packages/analysis/lib/scope.d.ts +110 -0
  80. package/dist/packages/analysis/lib/scope.js +443 -0
  81. package/dist/packages/analysis/lib/script-loads.d.ts +56 -0
  82. package/dist/packages/analysis/lib/script-loads.js +359 -0
  83. package/dist/packages/analysis/lib/summaries.d.ts +177 -0
  84. package/dist/packages/analysis/lib/summaries.js +498 -0
  85. package/dist/packages/analysis/lib/types.d.ts +632 -0
  86. package/dist/packages/analysis/lib/types.js +128 -0
  87. package/dist/packages/analysis/lib/wrap.d.ts +34 -0
  88. package/dist/packages/analysis/lib/wrap.js +407 -0
  89. package/dist/packages/analysis/lib/writes.d.ts +358 -0
  90. package/dist/packages/analysis/lib/writes.js +1612 -0
  91. package/dist/packages/analysis/visit-order.d.ts +3 -0
  92. package/dist/packages/analysis/visit-order.js +23 -0
  93. package/dist/packages/attribution/index.d.ts +233 -0
  94. package/dist/packages/attribution/index.js +444 -0
  95. package/dist/packages/attribution/lib/containing-package.d.ts +76 -0
  96. package/dist/packages/attribution/lib/containing-package.js +304 -0
  97. package/dist/packages/attribution/lib/first-party.d.ts +37 -0
  98. package/dist/packages/attribution/lib/first-party.js +153 -0
  99. package/dist/packages/attribution/lib/lockfile-graph.d.ts +99 -0
  100. package/dist/packages/attribution/lib/lockfile-graph.js +158 -0
  101. package/dist/packages/attribution/lib/lockfile.d.ts +33 -0
  102. package/dist/packages/attribution/lib/lockfile.js +330 -0
  103. package/dist/packages/attribution/lib/path-rules.d.ts +29 -0
  104. package/dist/packages/attribution/lib/path-rules.js +84 -0
  105. package/dist/packages/attribution/lib/pnpm.d.ts +4 -0
  106. package/dist/packages/attribution/lib/pnpm.js +133 -0
  107. package/dist/packages/attribution/lib/remote-url.d.ts +7 -0
  108. package/dist/packages/attribution/lib/remote-url.js +24 -0
  109. package/dist/packages/attribution/lib/source-map.d.ts +51 -0
  110. package/dist/packages/attribution/lib/source-map.js +125 -0
  111. package/dist/packages/attribution/lib/yaml.d.ts +9 -0
  112. package/dist/packages/attribution/lib/yaml.js +277 -0
  113. package/dist/packages/attribution/lib/yarn.d.ts +7 -0
  114. package/dist/packages/attribution/lib/yarn.js +227 -0
  115. package/dist/packages/baseline/index.d.ts +45 -0
  116. package/dist/packages/baseline/index.js +41 -0
  117. package/dist/packages/baseline/lib/error.d.ts +15 -0
  118. package/dist/packages/baseline/lib/error.js +25 -0
  119. package/dist/packages/baseline/lib/format.d.ts +49 -0
  120. package/dist/packages/baseline/lib/format.js +22 -0
  121. package/dist/packages/baseline/lib/migrations.d.ts +19 -0
  122. package/dist/packages/baseline/lib/migrations.js +7 -0
  123. package/dist/packages/baseline/lib/previous.d.ts +23 -0
  124. package/dist/packages/baseline/lib/previous.js +64 -0
  125. package/dist/packages/baseline/lib/read.d.ts +39 -0
  126. package/dist/packages/baseline/lib/read.js +219 -0
  127. package/dist/packages/baseline/lib/report.d.ts +25 -0
  128. package/dist/packages/baseline/lib/report.js +104 -0
  129. package/dist/packages/baseline/lib/skew.d.ts +51 -0
  130. package/dist/packages/baseline/lib/skew.js +75 -0
  131. package/dist/packages/compare/index.d.ts +120 -0
  132. package/dist/packages/compare/index.js +274 -0
  133. package/dist/packages/compare/lib/catalog-notes.d.ts +73 -0
  134. package/dist/packages/compare/lib/catalog-notes.js +224 -0
  135. package/dist/packages/completeness/index.d.ts +246 -0
  136. package/dist/packages/completeness/index.js +249 -0
  137. package/dist/packages/confidence/index.d.ts +54 -0
  138. package/dist/packages/confidence/index.js +71 -0
  139. package/dist/packages/config/index.d.ts +107 -0
  140. package/dist/packages/config/index.js +95 -0
  141. package/dist/packages/config/lib/command-line.d.ts +23 -0
  142. package/dist/packages/config/lib/command-line.js +239 -0
  143. package/dist/packages/config/lib/config-file.d.ts +11 -0
  144. package/dist/packages/config/lib/config-file.js +119 -0
  145. package/dist/packages/config/lib/scan-config-id.d.ts +28 -0
  146. package/dist/packages/config/lib/scan-config-id.js +54 -0
  147. package/dist/packages/config/lib/schema.d.ts +2 -0
  148. package/dist/packages/config/lib/schema.js +31 -0
  149. package/dist/packages/config/lib/types.d.ts +64 -0
  150. package/dist/packages/config/lib/types.js +6 -0
  151. package/dist/packages/config/lib/urls.d.ts +6 -0
  152. package/dist/packages/config/lib/urls.js +9 -0
  153. package/dist/packages/discovery/index.d.ts +277 -0
  154. package/dist/packages/discovery/index.js +1950 -0
  155. package/dist/packages/discovery/lib/import-map.d.ts +68 -0
  156. package/dist/packages/discovery/lib/import-map.js +180 -0
  157. package/dist/packages/discovery/lib/requests.d.ts +58 -0
  158. package/dist/packages/discovery/lib/requests.js +591 -0
  159. package/dist/packages/discovery/lib/scopes.d.ts +6 -0
  160. package/dist/packages/discovery/lib/scopes.js +286 -0
  161. package/dist/packages/discovery/lib/source-maps.d.ts +56 -0
  162. package/dist/packages/discovery/lib/source-maps.js +209 -0
  163. package/dist/packages/discovery/lib/swept-code.d.ts +27 -0
  164. package/dist/packages/discovery/lib/swept-code.js +107 -0
  165. package/dist/packages/discovery/lib/syntax.d.ts +17 -0
  166. package/dist/packages/discovery/lib/syntax.js +39 -0
  167. package/dist/packages/findings/index.d.ts +106 -0
  168. package/dist/packages/findings/index.js +254 -0
  169. package/dist/packages/findings/lib/scope.d.ts +38 -0
  170. package/dist/packages/findings/lib/scope.js +110 -0
  171. package/dist/packages/parallel/index.d.ts +2 -0
  172. package/dist/packages/parallel/index.js +5 -0
  173. package/dist/packages/parallel/lib/protocol.d.ts +15 -0
  174. package/dist/packages/parallel/lib/protocol.js +2 -0
  175. package/dist/packages/parallel/lib/runner.d.ts +36 -0
  176. package/dist/packages/parallel/lib/runner.js +96 -0
  177. package/dist/packages/parallel/lib/schedule.d.ts +16 -0
  178. package/dist/packages/parallel/lib/schedule.js +52 -0
  179. package/dist/packages/parallel/lib/worker.d.ts +1 -0
  180. package/dist/packages/parallel/lib/worker.js +18 -0
  181. package/dist/packages/policy/index.d.ts +36 -0
  182. package/dist/packages/policy/index.js +22 -0
  183. package/dist/packages/report/explain.d.ts +26 -0
  184. package/dist/packages/report/explain.js +99 -0
  185. package/dist/packages/report/index.d.ts +210 -0
  186. package/dist/packages/report/index.js +388 -0
  187. package/dist/packages/report/terminal.d.ts +11 -0
  188. package/dist/packages/report/terminal.js +331 -0
  189. package/dist/packages/source-store/fixture.d.ts +22 -0
  190. package/dist/packages/source-store/fixture.js +58 -0
  191. package/dist/packages/source-store/index.d.ts +278 -0
  192. package/dist/packages/source-store/index.js +322 -0
  193. package/dist/packages/source-store/lib/addresses.d.ts +6 -0
  194. package/dist/packages/source-store/lib/addresses.js +91 -0
  195. package/dist/packages/source-store/lib/connection.d.ts +15 -0
  196. package/dist/packages/source-store/lib/connection.js +135 -0
  197. package/dist/packages/source-store/lib/content-types.d.ts +16 -0
  198. package/dist/packages/source-store/lib/content-types.js +75 -0
  199. package/dist/packages/source-store/lib/data-urls.d.ts +10 -0
  200. package/dist/packages/source-store/lib/data-urls.js +85 -0
  201. package/dist/packages/source-store/lib/deadline.d.ts +18 -0
  202. package/dist/packages/source-store/lib/deadline.js +44 -0
  203. package/dist/packages/source-store/lib/exchange.d.ts +29 -0
  204. package/dist/packages/source-store/lib/exchange.js +112 -0
  205. package/dist/packages/source-store/lib/integrity.d.ts +19 -0
  206. package/dist/packages/source-store/lib/integrity.js +86 -0
  207. package/dist/packages/source-store/lib/outcomes.d.ts +12 -0
  208. package/dist/packages/source-store/lib/outcomes.js +22 -0
  209. package/dist/packages/source-store/lib/proxy.d.ts +11 -0
  210. package/dist/packages/source-store/lib/proxy.js +53 -0
  211. package/dist/packages/source-store/lib/session.d.ts +12 -0
  212. package/dist/packages/source-store/lib/session.js +139 -0
  213. package/dist/packages/source-store/lib/urls.d.ts +6 -0
  214. package/dist/packages/source-store/lib/urls.js +15 -0
  215. package/dist/packages/source-store/resolve.d.ts +59 -0
  216. package/dist/packages/source-store/resolve.js +45 -0
  217. package/dist/scan.d.ts +65 -0
  218. package/dist/scan.js +592 -0
  219. package/package.json +95 -4
  220. package/schema/config.schema.json +133 -0
  221. package/schema/report.schema.json +1905 -0
@@ -0,0 +1,160 @@
1
+ import { type AstNode } from './ast.ts';
2
+ import type { BindingResolver } from './binding.ts';
3
+ import { type Definitions } from './definitions.ts';
4
+ import type { GeneratedLocation } from './types.ts';
5
+ /** How a load site loads a chunk's URL. */
6
+ export type ChunkLoad = 'element' | 'import-scripts' | 'import';
7
+ /**
8
+ * A chunk load site: how it loads, where its URL expression is, the URLs it folds to, one per constant alternative, and,
9
+ * when some alternative doesn't fold, the constant prefix every such alternative starts with ('' for none).
10
+ */
11
+ export interface ChunkLoadSite {
12
+ load: ChunkLoad;
13
+ location: GeneratedLocation;
14
+ urls: string[];
15
+ prefix?: string;
16
+ /**
17
+ * The integrity value the code sets on the chunk's script element for each URL, when it folds to one constant for
18
+ * that URL (§17 Integrity): `o.integrity = u[a]`, with `u` a constant table by chunk id. A URL without one has
19
+ * none.
20
+ */
21
+ integrity?: Record<string, string>;
22
+ }
23
+ /** The chunk load sites of an artifact's code (above). None when it doesn't parse, or has no URL function. */
24
+ export declare function chunkLoadSites(text: string, sourceType: 'script' | 'module', bindings: BindingResolver): ChunkLoadSite[];
25
+ /** A cheap test first: a URL function concatenates a script URL, and a load site names one of these. */
26
+ export declare const mayLoadChunks: (text: string) => boolean;
27
+ /** A program's URL functions and the load sites that may call one (`chunkCandidates`). */
28
+ export interface ChunkCandidates {
29
+ functions: Map<AstNode, ReadonlySet<string> | 'any'>;
30
+ sites: {
31
+ load: ChunkLoad;
32
+ url: AstNode;
33
+ object?: AstNode;
34
+ }[];
35
+ }
36
+ /** A program's URL functions, and the load sites whose URL expressions may call one. */
37
+ export declare function chunkCandidates(program: AstNode): ChunkCandidates;
38
+ /** The chunk load sites among a program's candidates, folded with `folder`, located through `starts`. */
39
+ export declare function foldChunkSites({ functions, sites }: ChunkCandidates, folder: Folder, starts: readonly number[]): ChunkLoadSite[];
40
+ /** Whether a call creates a script element: `X.createElement("script")`, the tag name in any ASCII case. */
41
+ export declare function isScriptCreation(call: AstNode): boolean;
42
+ /** A member expression's constant name: `o.x` or `o["x"]`. */
43
+ export declare function propertyName(node: AstNode): string | undefined;
44
+ /**
45
+ * Folds URL expressions in one artifact's program (above), and the URLs code builds for the browser to load (§2 Computed
46
+ * URLs): besides string concatenation, templates, `new URL(x, base)` for a folded `x` and a base the scan knows,
47
+ * with its `.href` and `toString()`, and `import.meta.url`, the artifact's own URL. A base of `location` or
48
+ * `document.baseURI` is the environment's base URL, which the browser resolves a relative URL against anyway, so `x`
49
+ * folds to itself there. A parameter folds to the arguments every call the program shows passes it, when the
50
+ * function is called by a name or member it is bound to, or where it is written.
51
+ */
52
+ export declare class Folder {
53
+ /** The plain assignments to each member name, by the object's variable. */
54
+ private members?;
55
+ /** While a URL is folded, the variables a URL function is given, which hold the chunk id. */
56
+ private idKeys;
57
+ /** While an integrity value is folded, the variables that hold the chunk id. */
58
+ private ids;
59
+ /** Each node's parent. */
60
+ private parents?;
61
+ /** The calls of the program, by the name or member name their callee names. */
62
+ private calls?;
63
+ /** The function declarations of the program, by name. */
64
+ private declarations?;
65
+ private readonly program;
66
+ private readonly definitions;
67
+ private readonly functions;
68
+ private readonly url;
69
+ constructor(program: AstNode, definitions: Definitions, functions: ReadonlyMap<AstNode, ReadonlySet<string> | 'any'>, url?: string);
70
+ /**
71
+ * What a URL expression folds to outside any chunk loader: its constant string alternatives, and whether some
72
+ * alternative is unknown. A chunk id never takes a value here.
73
+ */
74
+ strings(node: AstNode): {
75
+ values: string[];
76
+ unknown: boolean;
77
+ chunk: boolean;
78
+ };
79
+ /** The variable an identifier names, when it is a free name of the global object that no code assigns. */
80
+ private freeGlobal;
81
+ /**
82
+ * Whether an expression is the environment's base URL as a base of `new URL` (§2 Computed URLs): `location`,
83
+ * its `href`, or `document.baseURI`, through the global object's names.
84
+ */
85
+ private isEnvironmentBase;
86
+ /**
87
+ * Whether a base is the environment's base URL (`isEnvironmentBase`), also through the one value a name or member is
88
+ * given, or as the left side of `||`, which is never empty there (webpack's `n.b = document.baseURI || …`).
89
+ */
90
+ private isBase;
91
+ /** Whether an expression is a URL object: `new URL(…)`, or a name whose one definition is one. */
92
+ private isUrlObject;
93
+ /** `new URL(x, base)` (URL Standard § URL constructor): each alternative of `x` against each of `base`. */
94
+ private newUrl;
95
+ /**
96
+ * The arguments the calls of a parameter's function pass it, or undefined when the parameter is none, or no call is
97
+ * shown, or one spreads before it or passes none (`callsOf`).
98
+ */
99
+ private parameterArguments;
100
+ /**
101
+ * The chunk URLs a load site's URL expression folds to, and the folded prefix of its unknown alternatives, or
102
+ * undefined when it calls no URL function, so that it is no chunk load.
103
+ */
104
+ chunkUrls(url: AstNode, element?: AstNode): {
105
+ urls: string[];
106
+ prefix?: string;
107
+ integrity?: Record<string, string>;
108
+ } | undefined;
109
+ /** What each plain `element.integrity = v` assignment to the same variable as `element` assigns. */
110
+ private integrityWrites;
111
+ /** Whether `object` is a script element the code creates: `document.createElement("script")`. */
112
+ isScriptElement(object: AstNode): boolean;
113
+ /**
114
+ * The script elements the code creates (`X.createElement("script")`, each by its call) that an expression may be:
115
+ * the call itself, or a name whose reaching definitions are, through other names, parentheses, comma sequences and
116
+ * assignments.
117
+ */
118
+ elementsOf(node: AstNode, depth?: number): Set<AstNode>;
119
+ /** The constant prefix of a URL expression: its leading `+` operands that fold to one string, joined. */
120
+ private prefix;
121
+ /** A member `o.p` that one plain assignment gives a value, followed to it. */
122
+ private resolveMember;
123
+ /** A name whose one reaching definition is an expression, followed to it: `s` in `var s = n.p + n.u(t)`. */
124
+ private resolveName;
125
+ /**
126
+ * What `node` folds to with the URL functions it calls given the chunk id `id` (none: unknown), adding every URL
127
+ * function it calls to `called`.
128
+ */
129
+ private fold;
130
+ /**
131
+ * `t[k]`, where `t` is a variable whose only definition is an object literal of constant keys and `k` folds to one
132
+ * key: the value the literal has there, or `undefined` (no value) when it has none.
133
+ */
134
+ private tableRead;
135
+ /** `{k: v, …}[param]` in a URL function, for the chunk id the parameter holds. */
136
+ private lookup;
137
+ /**
138
+ * The start value of the variable `key` when it is a plain parameter of its function: the union of the arguments the
139
+ * function's calls pass it (`n.l(s, …, t)`, webpack's script-loading helper). Unknown for any other variable, a
140
+ * function with no call the code shows, or a call that spreads before it.
141
+ */
142
+ private argument;
143
+ /**
144
+ * The calls of a function the code shows: an immediate call of it, or a call of the name or member it is bound to
145
+ * (`n.l = (…) => {…}`, `var f = …`, `function f(…) {…}`) that names it alone.
146
+ */
147
+ private callsOf;
148
+ /** The URL function a callee names: a function bound to a name, or plainly assigned to a member, and nothing else. */
149
+ private urlFunction;
150
+ /** The function a callee names: a function bound to a name, or plainly assigned to a member, and nothing else. */
151
+ private bound;
152
+ /** The function declaration that declares the variable `key`, named `name`, if one does. */
153
+ private declared;
154
+ /**
155
+ * What each assignment to `object.name` assigns, when `object` is a variable: undefined for a write that isn't a plain
156
+ * `=`, or undefined for the whole when the object is no variable.
157
+ */
158
+ private assigned;
159
+ private indexMembers;
160
+ }