@antongolub/lockfile 0.0.0-snapshot.11 → 0.0.0-snapshot.13
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 +56 -41
- package/package.json +6 -6
- package/target/es6/common.d.ts +1 -5
- package/target/es6/index.js +32 -18
- package/target/es6/index.js.map +2 -2
- package/target/es6/util.d.ts +4 -1
package/README.md
CHANGED
|
@@ -8,19 +8,19 @@ This lib is a naive attempt to build a pm-independent, generic, extensible and r
|
|
|
8
8
|
|
|
9
9
|
The `package.json` manifest contains its own deps requirements, the `lockfile` holds the deps resolution snapshot<sup>*</sup>,
|
|
10
10
|
so both of them are required to build a dependency graph. We can try to convert this data into a normalized representation for further analysis and processing (for example, to fix vulnerabilities).
|
|
11
|
-
And then, if necessary, try convert it back to the original/
|
|
11
|
+
And then, if necessary, try convert it back to the original/another format.
|
|
12
12
|
|
|
13
13
|
## Status
|
|
14
|
-
|
|
14
|
+
Proof of concept. The API may vary significantly ⚠️
|
|
15
15
|
|
|
16
16
|
## Getting started
|
|
17
17
|
### Install
|
|
18
18
|
```shell
|
|
19
|
-
yarn add @antongolub/lockfile
|
|
19
|
+
yarn add @antongolub/lockfile@snapshot
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## Usage
|
|
23
|
-
|
|
23
|
+
_tl;dr_
|
|
24
24
|
```ts
|
|
25
25
|
import fs from 'fs/promises'
|
|
26
26
|
import {parse, analyze} from '@antongolub/lockfile'
|
|
@@ -28,8 +28,8 @@ import {parse, analyze} from '@antongolub/lockfile'
|
|
|
28
28
|
const lf = await fs.readFile('yarn.lock', 'utf-8')
|
|
29
29
|
const pkg = await fs.readFile('package.json', 'utf-8')
|
|
30
30
|
|
|
31
|
-
const snapshot = parse(lf, pkg)
|
|
32
|
-
const idx = analyze(snapshot)
|
|
31
|
+
const snapshot = parse(lf, pkg) // Holds JSON-friendly TEntries[]
|
|
32
|
+
const idx = analyze(snapshot) // An index to represent repo dep graphs
|
|
33
33
|
|
|
34
34
|
// idx.entries
|
|
35
35
|
// idx.prod
|
|
@@ -73,18 +73,23 @@ idx.edges
|
|
|
73
73
|
| yarn 1 (classic) | 1 | ✓ | ✓ |
|
|
74
74
|
| yarn 2, 3, 4 (berry) | 5, 6, 7 | ✓ | ✓ |
|
|
75
75
|
|
|
76
|
-
###
|
|
77
|
-
| Type | Supported |
|
|
78
|
-
|
|
79
|
-
| semver | ✓ |
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
| github |
|
|
85
|
-
|
|
|
86
|
-
|
|
87
|
-
|
|
76
|
+
### Protocols
|
|
77
|
+
| Type | Supported | Example | Description |
|
|
78
|
+
|-----------|-----------|-----------------------------------------|----------------------------------------------------------------|
|
|
79
|
+
| semver | ✓ | `^1.2.3` | Resolves from the default registry |
|
|
80
|
+
| tag | | `latest` | Resolves from the default registry |
|
|
81
|
+
| npm | ✓ | `npm:name@...` | Resolves from the npm registry |
|
|
82
|
+
| git | | `git@github.com:foo/bar.git` | Downloads a public package from a Git repository |
|
|
83
|
+
| github | | `github:foo/bar` | Downloads a public package from GitHub |
|
|
84
|
+
| github | ✓ | `foo/bar` | Alias for the github: protocol |
|
|
85
|
+
| file | | `file:./my-package` | Copies the target location into the cache |
|
|
86
|
+
| link | | `link:./my-folder` | Creates a link to the ./my-folder folder (ignore dependencies) |
|
|
87
|
+
| patch | | `patch:left-pad@1.0.0#./my-patch.patch` | Creates a patched copy of the original package |
|
|
88
|
+
| portal | | `portal:./my-folder` | Creates a link to the ./my-folder folder (follow dependencies) |
|
|
89
|
+
| workspace | _limited_ | `workspace:*` | Creates a link to a package in another workspace |
|
|
90
|
+
|
|
91
|
+
https://v3.yarnpkg.com/features/protocols
|
|
92
|
+
https://yarnpkg.com/protocols
|
|
88
93
|
|
|
89
94
|
### `TSnapshot`
|
|
90
95
|
```ts
|
|
@@ -107,17 +112,17 @@ export type TEntry = {
|
|
|
107
112
|
registry?: string
|
|
108
113
|
}
|
|
109
114
|
// optional pm-specific lockfile meta
|
|
110
|
-
manifest?:
|
|
111
|
-
conditions?:
|
|
112
|
-
dependencies?:
|
|
113
|
-
dependenciesMeta?:
|
|
114
|
-
devDependencies?:
|
|
115
|
-
optionalDependencies?:
|
|
116
|
-
peerDependencies?:
|
|
117
|
-
peerDependenciesMeta?:
|
|
118
|
-
bin?:
|
|
119
|
-
engines?:
|
|
120
|
-
funding?:
|
|
115
|
+
manifest?: TManifest
|
|
116
|
+
conditions?: string
|
|
117
|
+
dependencies?: TDependencies
|
|
118
|
+
dependenciesMeta?: TDependenciesMeta
|
|
119
|
+
devDependencies?: TDependencies
|
|
120
|
+
optionalDependencies?: TDependencies
|
|
121
|
+
peerDependencies?: TDependencies
|
|
122
|
+
peerDependenciesMeta?: TDependenciesMeta
|
|
123
|
+
bin?: Record<string, string>
|
|
124
|
+
engines?: Record<string, string>
|
|
125
|
+
funding?: Record<string, string>
|
|
121
126
|
}>
|
|
122
127
|
```
|
|
123
128
|
|
|
@@ -125,17 +130,17 @@ export type TEntry = {
|
|
|
125
130
|
```ts
|
|
126
131
|
export interface TSnapshotIndex {
|
|
127
132
|
snapshot: TSnapshot
|
|
128
|
-
entries:
|
|
129
|
-
roots:
|
|
130
|
-
edges:
|
|
131
|
-
tree:
|
|
132
|
-
key:
|
|
133
|
-
chunks:
|
|
134
|
-
parents:
|
|
135
|
-
id:
|
|
136
|
-
name:
|
|
137
|
-
version:
|
|
138
|
-
entry:
|
|
133
|
+
entries: TEntry[]
|
|
134
|
+
roots: TEntry[]
|
|
135
|
+
edges: [string, string][]
|
|
136
|
+
tree: Record<string, {
|
|
137
|
+
key: string
|
|
138
|
+
chunks: string[]
|
|
139
|
+
parents: TEntry[]
|
|
140
|
+
id: string
|
|
141
|
+
name: string
|
|
142
|
+
version: string
|
|
143
|
+
entry: TEntry
|
|
139
144
|
}>
|
|
140
145
|
prod: Set<TEntry>
|
|
141
146
|
getEntryId ({name, version}: TEntry): string
|
|
@@ -151,11 +156,21 @@ export interface TSnapshotIndex {
|
|
|
151
156
|
* yarn berry: no idea how to resolve and inject PnP patches https://github.com/yarnpkg/berry/tree/master/packages/plugin-compat
|
|
152
157
|
* npm2 and npm3 requires `engines` and `funding` data, while yarn* or npm1 does not contain it
|
|
153
158
|
* many `nmtree` projections may correspond to the specified `depgraph`
|
|
154
|
-
*
|
|
159
|
+
* pkg.json `resolutions` directive is completely ignored for now
|
|
160
|
+
* pkg aliases are not supported yet [#2](https://github.com/antongolub/lockfile/issues/2#issuecomment-1786613893)
|
|
155
161
|
|
|
156
162
|
### Inspired by
|
|
157
163
|
* [synp](https://github.com/imsnif/synp)
|
|
158
164
|
* [snyk-nodejs-lockfile-parser](https://github.com/snyk/nodejs-lockfile-parser)
|
|
165
|
+
* [yarn](https://github.com/yarnpkg/yarn/blob/master/src/lockfile/parse.js)
|
|
166
|
+
* [yarn-lockfile](https://github.com/yarnpkg/yarn/tree/master/packages/lockfile)
|
|
167
|
+
|
|
168
|
+
### Refs
|
|
169
|
+
* [yarn.lock](https://classic.yarnpkg.com/en/docs/yarn-lock/)
|
|
170
|
+
* [package-lock-json](https://docs.npmjs.com/cli/v10/configuring-npm/package-lock-json)
|
|
171
|
+
* [what-is-package-lock-json](https://snyk.io/blog/what-is-package-lock-json/)
|
|
172
|
+
* [the-ultimate-guide-to-yarn-lock-lockfiles](https://www.arahansen.com/the-ultimate-guide-to-yarn-lock-lockfiles/)
|
|
173
|
+
* [package-lock-json-the-complete-guide](https://medium.com/helpshift-engineering/package-lock-json-the-complete-guide-2ae40175ebdd)
|
|
159
174
|
|
|
160
175
|
### License
|
|
161
176
|
[MIT](./LICENSE)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antongolub/lockfile",
|
|
3
|
-
"version": "0.0.0-snapshot.
|
|
3
|
+
"version": "0.0.0-snapshot.13",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
"type": "module",
|
|
10
10
|
"exports": "./target/es6/index.js",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@semrel-extra/topo": "^1.
|
|
12
|
+
"@semrel-extra/topo": "^1.14.0",
|
|
13
13
|
"js-yaml": "^4.1.0",
|
|
14
14
|
"semver": "^7.5.4"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@types/js-yaml": "^4.0.5",
|
|
18
|
-
"@types/node": "^20.
|
|
19
|
-
"@types/semver": "^7.5.
|
|
18
|
+
"@types/node": "^20.6.0",
|
|
19
|
+
"@types/semver": "^7.5.1",
|
|
20
20
|
"esbuild": "^0.19.2",
|
|
21
|
-
"esbuild-node-externals": "^1.
|
|
21
|
+
"esbuild-node-externals": "^1.9.0",
|
|
22
22
|
"tsm": "^2.3.0",
|
|
23
|
-
"typescript": "^5.
|
|
23
|
+
"typescript": "^5.2.2",
|
|
24
24
|
"uvu": "^0.5.6"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
package/target/es6/common.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { THashes,
|
|
1
|
+
import { THashes, TSnapshot } from './interface';
|
|
2
2
|
export declare const formatTarballUrl: (name: string, version: string, registry?: string) => string;
|
|
3
3
|
export declare const getSources: (snapshot: TSnapshot) => string[];
|
|
4
|
-
export declare const isProd: (manifest: TManifest, name: string) => boolean;
|
|
5
|
-
export declare const isDev: (manifest: TManifest, name: string) => boolean;
|
|
6
|
-
export declare const isPeer: (manifest: TManifest, name: string) => boolean;
|
|
7
|
-
export declare const isOptional: (manifest: TManifest, name: string) => boolean;
|
|
8
4
|
export declare const parseIntegrity: (integrity?: string) => THashes;
|
|
9
5
|
export declare const formatIntegrity: (hashes: THashes) => string;
|
|
10
6
|
export type IReferenceDeclaration = {
|
package/target/es6/index.js
CHANGED
|
@@ -3,11 +3,6 @@ import semver from "semver";
|
|
|
3
3
|
import { topo, traverseDeps } from "@semrel-extra/topo";
|
|
4
4
|
var formatTarballUrl = (name, version6, registry = "https://registry.npmjs.org") => `${registry}/${name}/-/${name.slice(name.indexOf("/") + 1)}-${version6}.tgz`;
|
|
5
5
|
var getSources = (snapshot) => Object.values(snapshot).map((entry) => entry.source.id).filter(Boolean);
|
|
6
|
-
var checkDepType = (type, manifest, name) => Boolean(manifest[type]?.[name]);
|
|
7
|
-
var isProd = checkDepType.bind(null, "dependencies");
|
|
8
|
-
var isDev = checkDepType.bind(null, "devDependencies");
|
|
9
|
-
var isPeer = checkDepType.bind(null, "peerDependencies");
|
|
10
|
-
var isOptional = checkDepType.bind(null, "optionalDependencies");
|
|
11
6
|
var parseIntegrity = (integrity) => integrity ? integrity.split(" ").reduce((m, item) => {
|
|
12
7
|
const [k, v] = item.split("-");
|
|
13
8
|
if (k === "sha512" || k === "sha256" || k === "sha1" || k === "checksum") {
|
|
@@ -42,7 +37,23 @@ var flushObject = (obj) => {
|
|
|
42
37
|
}
|
|
43
38
|
return obj;
|
|
44
39
|
};
|
|
45
|
-
var
|
|
40
|
+
var debug = Object.assign(function(...chunks) {
|
|
41
|
+
if (!this.enable)
|
|
42
|
+
return;
|
|
43
|
+
console.log(...chunks);
|
|
44
|
+
}, {
|
|
45
|
+
enable: process.env.DEBUG,
|
|
46
|
+
json(data, name = `debug-${Math.random().toString(16).slice(2)}.json`, base = path.resolve(process.cwd(), "temp")) {
|
|
47
|
+
if (!this.enable)
|
|
48
|
+
return;
|
|
49
|
+
if (typeof data === "string") {
|
|
50
|
+
this.json(name, data);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const _data = typeof data === "function" ? data() : data;
|
|
54
|
+
fs.writeFile(path.resolve(base, name), JSON.stringify(_data, null, 2));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
46
57
|
|
|
47
58
|
// src/main/ts/analyze.ts
|
|
48
59
|
var getDeps = (entry) => {
|
|
@@ -141,7 +152,7 @@ var analyze = (snapshot) => {
|
|
|
141
152
|
const now = Date.now();
|
|
142
153
|
roots.forEach((root, i) => walk({ root, idx, id: root.source.id === "." ? "" : void 0 }));
|
|
143
154
|
console.log("analyze duration=", Date.now() - now, "deptree size=", Object.keys(tree).length);
|
|
144
|
-
|
|
155
|
+
debug.json("deptree.json", Object.values(tree).map(({ parents, name }) => [...parents.map((p) => p.name).slice(1), name].join(",")));
|
|
145
156
|
return idx;
|
|
146
157
|
};
|
|
147
158
|
|
|
@@ -151,7 +162,7 @@ var check = (lockfile) => lockfile.includes(' "lockfileVersion": 1');
|
|
|
151
162
|
var parse = (lockfile, pkg) => {
|
|
152
163
|
const lf = JSON.parse(lockfile);
|
|
153
164
|
const manifest = JSON.parse(pkg);
|
|
154
|
-
const
|
|
165
|
+
const snapshot = {
|
|
155
166
|
"": {
|
|
156
167
|
name: manifest.name,
|
|
157
168
|
version: manifest.version,
|
|
@@ -169,10 +180,10 @@ var parse = (lockfile, pkg) => {
|
|
|
169
180
|
const getClosestVersion = (name, ...deps) => deps.find((dep) => dep[name])?.[name]?.version;
|
|
170
181
|
const upsertEntry = (name, version6, data = {}) => {
|
|
171
182
|
const key = `${name}@${version6}`;
|
|
172
|
-
if (!
|
|
173
|
-
|
|
183
|
+
if (!snapshot[key]) {
|
|
184
|
+
snapshot[key] = { name, version: version6, ranges: [] };
|
|
174
185
|
}
|
|
175
|
-
return Object.assign(
|
|
186
|
+
return Object.assign(snapshot[key], data);
|
|
176
187
|
};
|
|
177
188
|
const pushRange = (name, version6, range) => {
|
|
178
189
|
const entry = upsertEntry(name, version6);
|
|
@@ -203,16 +214,17 @@ var parse = (lockfile, pkg) => {
|
|
|
203
214
|
});
|
|
204
215
|
extractEntries(lf.dependencies);
|
|
205
216
|
extractRanges({
|
|
206
|
-
...
|
|
207
|
-
...
|
|
217
|
+
...snapshot[""].dependencies,
|
|
218
|
+
...snapshot[""].devDependencies
|
|
208
219
|
}, lf.dependencies || {});
|
|
209
|
-
|
|
220
|
+
debug.json("npm1-snapshot.json", snapshot);
|
|
221
|
+
return sortObject(snapshot);
|
|
210
222
|
};
|
|
211
223
|
var formatIntegrity2 = (hashes) => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(" ");
|
|
212
224
|
var preformat = (idx) => {
|
|
213
225
|
const root = idx.snapshot[""].manifest;
|
|
214
226
|
const deptree = Object.values(idx.tree).slice(1).map(({ parents, entry }) => [...parents.slice(1), entry]);
|
|
215
|
-
|
|
227
|
+
debug.json("deptree-npm-1.json", deptree.map((entries) => entries.map((e) => e.name).join(",")));
|
|
216
228
|
const formatNpm1LockfileEntry = (entry) => {
|
|
217
229
|
const { name, version: version6, hashes } = entry;
|
|
218
230
|
const _entry = {
|
|
@@ -289,6 +301,7 @@ var parse2 = (lockfile) => {
|
|
|
289
301
|
const lf = JSON.parse(lockfile);
|
|
290
302
|
const snapshot = parsePackages(lf.packages);
|
|
291
303
|
snapshot[""].manifest = lf.packages[""];
|
|
304
|
+
debug.json("npm3-snapshot.json", snapshot);
|
|
292
305
|
return snapshot;
|
|
293
306
|
};
|
|
294
307
|
var formatNmKey = (chunks) => `node_modules/` + chunks.join("/node_modules/");
|
|
@@ -362,8 +375,7 @@ ${variants3.join("\n")}`);
|
|
|
362
375
|
};
|
|
363
376
|
var preformat2 = (idx) => {
|
|
364
377
|
const snap = idx.snapshot;
|
|
365
|
-
const
|
|
366
|
-
const nmtree = mapped.reduce((result, { key, id, chunks }) => {
|
|
378
|
+
const nmtree = Object.values(idx.tree).reduce((result, { key, id, chunks }) => {
|
|
367
379
|
const entry = snap[id];
|
|
368
380
|
if (!entry) {
|
|
369
381
|
throw new Error(`Malformed snapshot: ${id}`);
|
|
@@ -402,7 +414,7 @@ var preformat2 = (idx) => {
|
|
|
402
414
|
}
|
|
403
415
|
return result;
|
|
404
416
|
}, {});
|
|
405
|
-
|
|
417
|
+
debug.json("npm3-nmtree.json", nmtree);
|
|
406
418
|
const manifest = snap[""].manifest;
|
|
407
419
|
const packages = sortObject(
|
|
408
420
|
Object.entries(nmtree).reduce((m, [k, { entry, parent }]) => {
|
|
@@ -529,6 +541,7 @@ var parse3 = (value, pkg) => {
|
|
|
529
541
|
manifest,
|
|
530
542
|
dependencies: manifest.dependencies
|
|
531
543
|
};
|
|
544
|
+
debug.json("yarn-classic-snapshot.json", snapshot);
|
|
532
545
|
return snapshot;
|
|
533
546
|
};
|
|
534
547
|
var preformat4 = (idx) => {
|
|
@@ -659,6 +672,7 @@ var parse4 = (lockfile, pkg) => {
|
|
|
659
672
|
dependencies: manifest.dependencies,
|
|
660
673
|
devDependencies: manifest.devDependencies
|
|
661
674
|
};
|
|
675
|
+
debug.json("yarn-berry-snapshot.json", snapshot);
|
|
662
676
|
return snapshot;
|
|
663
677
|
};
|
|
664
678
|
var preformat5 = (idx) => {
|
package/target/es6/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/main/ts/common.ts", "../../src/main/ts/util.ts", "../../src/main/ts/analyze.ts", "../../src/main/ts/formats/npm-1.ts", "../../src/main/ts/formats/npm-3.ts", "../../src/main/ts/formats/npm-2.ts", "../../src/main/ts/formats/yarn-classic.ts", "../../src/main/ts/formats/yarn-berry.ts", "../../src/main/ts/parse.ts", "../../src/main/ts/format.ts"],
|
|
4
|
-
"sourcesContent": ["import semver from 'semver'\nimport fs from 'node:fs/promises'\nimport {topo, traverseDeps} from '@semrel-extra/topo'\nimport {THashes, TManifest, TSnapshot} from './interface'\n\nexport const formatTarballUrl = (name: string, version: string, registry = 'https://registry.npmjs.org') =>\n `${registry}/${name}/-/${name.slice(name.indexOf('/') + 1)}-${version}.tgz`\n\nexport const getSources = (snapshot: TSnapshot): string[] =>\n Object.values(snapshot)\n .map(entry => entry.source.id)\n .filter(Boolean)\n\nconst checkDepType = (type: keyof TManifest, manifest: TManifest, name: string): boolean => Boolean(manifest[type]?.[name])\n\nexport const isProd = checkDepType.bind(null, 'dependencies')\nexport const isDev = checkDepType.bind(null, 'devDependencies')\nexport const isPeer = checkDepType.bind(null, 'peerDependencies')\nexport const isOptional = checkDepType.bind(null, 'optionalDependencies')\n\nexport const parseIntegrity = (integrity?: string): THashes =>\n integrity\n ? integrity.split(' ').reduce<THashes>((m, item) => {\n const [k, v] = item.split('-')\n if (k === 'sha512' || k === 'sha256' || k === 'sha1' || k === 'checksum') {\n m[k] = v\n } else if (!v){\n m['checksum'] = k\n }\n\n return m\n }, {})\n : {}\n\nexport const formatIntegrity = (hashes: THashes): string => {\n const checksum = hashes['checksum']\n if (checksum) {\n return checksum\n }\n\n return Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n}\n\nexport type IReferenceDeclaration = {\n protocol: string\n raw: string\n version: string | null\n [extra: string]: any\n}\n\nconst buildReference = (protocol: string, raw: string, value: string) => ({\n protocol,\n value,\n raw,\n caret: (value.startsWith('^') || value.startsWith('~')) ? value[0] : '',\n version: semver.valid(raw) || semver.coerce(raw)?.version || null\n})\n\nexport const parseReference = (raw?: any): IReferenceDeclaration => {\n if (raw.startsWith('workspace:')) {\n return buildReference('workspace', raw, raw.slice(10))\n }\n\n if (raw.startsWith('npm:')) {\n return buildReference('npm', raw, raw.slice(4))\n }\n\n return buildReference('semver', raw, raw)\n}\n\nexport const mapReference = (current: string, targetProtocol: string, strategy = 'inherit'): string => {\n const {caret, version, protocol} = parseReference(current)\n const prefix = targetProtocol === 'semver' ? '' : `${targetProtocol}:`\n\n if (protocol === targetProtocol) {\n return current\n }\n\n if (version === null) {\n return prefix + '*'\n }\n\n const _version = strategy === 'pin'\n ? version\n : strategy === 'inherit'\n ? (caret + version)\n : strategy\n\n return prefix + _version\n}\n\n/**\n * Replaces local monorepo cross-refs with the target protocol: workspace or semver\n */\nexport const switchMonorefs = async ({cwd, strategy, protocol = 'semver', dryrun = false}: {\n cwd?: string\n strategy?: string // 'inherit' | 'pin' | 'coerce'\n protocol?: string\n dryrun?: boolean\n}) => {\n const {packages} = await topo({cwd})\n\n await Promise.all(Object.values(packages).map(async pkg => {\n await traverseDeps({pkg, packages, cb({name, version, deps}) {\n deps[name] = mapReference(version, protocol, strategy)\n }})\n\n if (dryrun) {\n return\n }\n\n await fs.writeFile(pkg.manifestAbsPath, JSON.stringify(pkg.manifest), 'utf8')\n }))\n\n return packages\n}\n", "import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport * as process from 'node:process'\n\nexport const sortObject = <T extends Record<string, any>>(\n unordered: T,\n predicate: (a: [string, any], b: [string, any]) => number = ([a], [b]) => a > b ? 1 : -1 // This actually what npm does\n): T =>\n Object.entries({...unordered})\n .sort(predicate)\n .reduce((obj, [key, value]: [keyof T, T[keyof T]]) => {\n obj[key] = value\n return obj\n },\n flushObject(unordered) as T,\n )\n\nexport const flushObject = (obj: Record<string, any>) => {\n for (const key in obj) {\n delete obj[key]\n }\n\n return obj\n}\n\nexport const loadContents = async (value: string): Promise<string> =>\n value.includes('\\n')\n ? value\n : fs.readFile(value, 'utf-8')\n\nexport const debugAsJson = (name: string, data: any, temp = path.resolve(process.cwd(), 'temp')) =>\n process.env.DEBUG && fs.writeFile(path.resolve(temp, name), JSON.stringify(data, null, 2))\n", "import {TEntry, TSnapshot, TSnapshotIndex} from './interface'\nimport {debugAsJson, sortObject} from './util'\n\nexport const getDeps = (entry: TEntry): Record<string, string> => {\n if (!getDeps.cache.has(entry)) {\n getDeps.cache.set(entry, ({\n ...sortObject(entry.dependencies || {}),\n ...sortObject({...entry.devDependencies, ...entry.optionalDependencies})\n }))\n }\n\n return getDeps.cache.get(entry) as Record<string, string>\n}\n\ngetDeps.cache = new WeakMap<TEntry, Record<string, string>>()\n\ntype TWalkCtx = {\n root: TEntry,\n entry?: TEntry\n idx: TSnapshotIndex\n id?: string\n prefix?: string\n depth?: number\n parentId?: string\n parents?: TEntry[]\n}\n\nconst walk = (ctx: TWalkCtx) => {\n const {root, entry = root, prefix, depth = 0, parentId, idx, id = idx.getEntryId(entry), parents = []} = ctx\n const key = (prefix ? prefix + ',' : '') + entry.name\n\n if (id === undefined) {\n throw new TypeError(`Invalid snapshot: ${key}`)\n }\n\n if (!idx.tree[key]) {\n const chunks = key.split(',')\n idx.tree[key] = {\n key,\n chunks,\n id,\n name: entry.name,\n version: entry.version,\n entry,\n parents\n }\n if (root.dependencies?.[chunks[1]]) {\n idx.prod.add(entry)\n }\n if (parentId !== undefined) {\n idx.edges.push([parentId, id])\n return\n }\n if (depth) {\n return\n }\n }\n\n const dependencies = getDeps(entry)\n const stack: any[] = []\n\n Object.entries(dependencies).forEach(([name, range]) => {\n const _entry = idx.getEntryByRange(name, range)\n if (!_entry) {\n throw new Error(`inconsistent snapshot: ${name} ${range}`)\n }\n idx.bound(entry, _entry)\n if (parents.includes(entry)) {\n return\n }\n const _ctx: TWalkCtx = {root, entry: _entry, prefix: key, depth: depth + 1, parentId: id, idx, parents: [...parents, entry]}\n stack.push(_ctx)\n walk(_ctx)\n })\n\n stack.forEach(walk)\n}\n\nexport const getId = (name?: string, version: string = ''): string => name\n ? `${name}@${version}`\n : ''\n\nexport const analyze = (snapshot: TSnapshot): TSnapshotIndex => {\n const entries: TEntry[] = Object.values(snapshot)\n const roots = entries.filter(e => e.source.type === 'workspace')\n const prod = new Set(roots)\n const deps = new Map()\n const edges: [string, string][] = []\n const tree: TSnapshotIndex['tree'] = {}\n const idx: TSnapshotIndex = {\n snapshot,\n roots,\n edges,\n tree,\n prod,\n entries,\n bound(from: TEntry, to: TEntry) {\n const deps = this.getEntryDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getEntryId ({name, version}: TEntry): string {\n return getId(name, version)\n },\n getEntry (name: string, version?: string) {\n return snapshot[name] || snapshot[getId(name, version)]\n },\n getEntryByRange (name: string, range: string) {\n return entries.find(({name: _name, ranges}) => name === _name && ranges.includes(range))\n },\n getEntryDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\n }\n }\n\n const now = Date.now()\n roots.forEach((root, i) => walk({root, idx, id: root.source.id === '.' ? '' : undefined}))\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n console.log('analyze duration=', Date.now() - now, 'deptree size=', Object.keys(tree).length)\n\n debugAsJson('deptree.json', Object.values(tree).map(({parents, name}) => [...parents.map(p=> p.name).slice(1), name].join(',')))\n\n return idx\n}\n", "import {\n ICheck,\n IFormat,\n IParse, IPreformat,\n TDependencies,\n THashes,\n TEntry,\n TManifest,\n TSnapshot,\n} from '../interface'\nimport {debugAsJson, sortObject} from '../util'\nimport {parseIntegrity, formatTarballUrl} from '../common'\nimport {analyze} from '../analyze'\n\nexport const version = 'npm-1'\n\nexport type TNpm1LockfileEntry = {\n version: string\n resolved: string\n integrity: string\n dev?: boolean\n requires?: Record<string, string>\n dependencies?: TNpm1LockfileDeps\n}\n\nexport type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>\n\nexport type TNpm1Lockfile = {\n lockfileVersion: 1\n name: string\n version: string\n requires?: true\n dependencies: TNpm1LockfileDeps\n}\n\ninterface TDepTree {\n dependencies?: Record<string, TDepTree>\n version: string\n requires?: any\n}\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 1')\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const lf: TNpm1Lockfile = JSON.parse(lockfile)\n const manifest: TManifest = JSON.parse(pkg)\n const entries: Record<string, TEntry> = {\n \"\": {\n name: manifest.name,\n version: manifest.version,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n ranges: [],\n manifest,\n }\n }\n const getClosestVersion = (name: string, ...deps: TNpm1LockfileDeps[]): string =>\n deps.find((dep) => dep[name])?.[name]?.version as string\n\n const upsertEntry = (name: string, version: string, data: Partial<TEntry> = {}): TEntry => {\n const key = `${name}@${version}`\n if (!entries[key]) {\n // @ts-ignore\n entries[key] = {name, version, ranges: []}\n }\n return Object.assign(entries[key], data)\n }\n const pushRange = (name: string, version: string, range: string): void => {\n const entry = upsertEntry(name, version)\n\n if (!entry.ranges.includes(range)) {\n entry.ranges.push(range)\n entry.ranges.sort()\n }\n }\n const extractRanges = (deps?: TDependencies, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([_name, range]) => {\n const _version = getClosestVersion(_name, ...parents)\n pushRange(_name, _version, range)\n })\n const extractEntries = (deps?: TNpm1LockfileDeps, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([name, entry]) => {\n const requires = entry.requires || entry.dependencies && Object.entries(entry.dependencies).reduce((m, [name, {version}]) => {\n m[name] = version\n return m\n }, {} as Record<string, string>)\n\n upsertEntry(name, entry.version, {\n hashes: parseIntegrity(entry.integrity),\n dependencies: requires,\n source: {\n type: 'npm',\n id: entry.resolved\n }\n })\n\n extractEntries(entry.dependencies, deps, ...parents)\n extractRanges(requires, entry.dependencies || {}, deps, ...parents)\n })\n\n extractEntries(lf.dependencies)\n extractRanges({\n ...entries[\"\"].dependencies,\n ...entries[\"\"].devDependencies\n }, lf.dependencies || {})\n\n return sortObject(entries)\n}\n\nconst formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\nexport const preformat: IPreformat<TNpm1Lockfile> = (idx): TNpm1Lockfile => {\n const root = idx.snapshot[\"\"].manifest as TManifest\n const deptree = Object.values(idx.tree).slice(1).map(({parents, entry}) => [...parents.slice(1), entry])\n\n debugAsJson('deptree-legacy.json', deptree.map((entries: TEntry[]) => entries.map(e => e.name).join(',')))\n\n const formatNpm1LockfileEntry = (entry: TEntry): TNpm1LockfileEntry => {\n const {name, version, hashes} = entry\n const _entry: TNpm1LockfileDeps[string] = {\n version,\n resolved: formatTarballUrl(name, version),\n integrity: formatIntegrity(hashes)\n }\n\n if (!idx.prod.has(entry)) {\n _entry.dev = true\n }\n\n if (entry.dependencies) {\n _entry.requires = entry.dependencies\n }\n\n return _entry\n }\n\n const lf: TNpm1Lockfile = {\n name: root.name,\n version: root.version,\n lockfileVersion: 1,\n requires: true,\n dependencies: {}\n }\n const nmtree = lf\n const nodes: TDepTree[] = [nmtree]\n const processEntry = (name: string, version: string, parents: TNpm1LockfileEntry[]) => {\n const entry = idx.getEntry(name, version)!\n const deps = idx.getEntryDeps(entry)\n const queue: [string, string, TNpm1LockfileEntry[]][] = []\n\n deps.forEach((e) => {\n const closestIndex = parents.findIndex((p) => p.dependencies?.[e.name])\n const closest = parents[closestIndex]\n if (closest?.dependencies?.[e.name].version === e.version) {\n return\n }\n\n const _entry = formatNpm1LockfileEntry(e)\n const _parents = [_entry, ...parents]\n const parent = closest\n ? _parents[closestIndex]\n : _parents[_parents.length - 1]\n\n if (!parent.dependencies) {\n parent.dependencies = {}\n }\n parent.dependencies[e.name] = _entry\n\n nodes.push(parent)\n queue.push([e.name, e.version, _parents])\n })\n\n queue.forEach(([name, version, parents]) => processEntry(name, version, parents))\n }\n\n deptree.forEach((chain) => {\n const entry = chain[chain.length - 1]\n const {name} = entry\n\n if (!nmtree.dependencies[name]) {\n nmtree.dependencies[name] = formatNpm1LockfileEntry(entry)\n }\n })\n Object.entries(nmtree.dependencies).forEach(([name, entry]) => processEntry(name, entry.version, [entry, nmtree] as TNpm1LockfileEntry[]))\n\n nodes.forEach((node) => {\n sortObject(node.dependencies || {})\n\n if (node.requires) {\n const snap1 = Object.entries(node.requires).map(([name, range]) => `${name}@${range}`).join('')\n const snap2 = Object.entries(node.dependencies || {}).map(([name, {version}]) => `${name}@${version}`).join('')\n\n if (snap1 === snap2) {\n delete node.requires\n }\n }\n })\n\n return lf\n}\n\nexport const format: IFormat = (snap): string =>\n JSON.stringify(preformat(analyze(snap)), null, 2)\n", "import {ICheck, IFormat, IPreformat, TEntry, TManifest, TSnapshot, TSource} from '../interface'\nimport {formatTarballUrl, parseIntegrity, formatIntegrity} from '../common'\nimport {sortObject, debugAsJson} from '../util'\nimport {analyze, getDeps, getId} from '../analyze'\nimport semver from 'semver'\n\nexport type TNpm3LockfileEntry = {\n name?: string\n version?: string\n resolved?: string\n integrity?: string\n dev?: boolean\n link?: boolean\n dependencies?: Record<string, string>,\n engines?: Record<string, string>\n funding?: Record<string, string>\n peerDependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n bin?: any\n license?: string\n}\n\nexport type TNpm3LockfileDeps = Record<string, TNpm3LockfileEntry>\n\nexport type TNpm3Lockfile = {\n lockfileVersion: 3\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n}\n\nexport const version = 'npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 3')\n\nexport const parse = (lockfile: string): TSnapshot => {\n const lf: TNpm3Lockfile = JSON.parse(lockfile)\n const snapshot = parsePackages(lf.packages)\n\n snapshot[\"\"].manifest = lf.packages[\"\"]\n\n // debugAsJson('npm3-snapshot.json', snapshot)\n\n return snapshot\n}\n\nconst formatNmKey = (chunks: string[]) => `node_modules/` + chunks.join('/node_modules/')\n\nconst parsePackages = (packages: TNpm3LockfileDeps): any => {\n const entries: Record<string, TEntry> = {}\n const getClosestPkg = (name: string, chain: string[], entries: Record<string, TNpm3LockfileEntry>, range: string): [string, TNpm3LockfileEntry] => {\n const variants: string[] = []\n\n let s = 0\n let i = 0\n while(s < chain.length) {\n let l = chain.length + 1\n while (l--) {\n const variant = formatNmKey([...chain.slice(s, l), name].filter(Boolean))\n const entry = entries[variant]\n\n if (entry && (!entry.version || semver.satisfies(entry.version as string, range))) { // FIXME later\n return [variant, entry]\n }\n variants.push(variant)\n }\n s++\n }\n throw new Error(`Malformed lockfile: ${name} ${range}\\n${variants.join('\\n')}`)\n }\n\n const processPackage = (path: string, pkg: TNpm3LockfileEntry): TEntry => {\n const sourceType = (pkg.link || path === \"\") ? 'workspace' : 'semver'\n\n if (sourceType === 'workspace' && !pkg.name){\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\n }\n const source: TSource = {\n id: (pkg.resolved || '.') as string,\n type: sourceType\n }\n\n const chain: string[] = path ? ('/' + path).split('/node_modules/').filter(Boolean) : [\"\"]\n const name = pkg.name || chain[chain.length - 1]\n const version = pkg.version as string\n const id = path === \"\" ? path : getId(name, version)\n\n if (entries[id]) {\n return entries[id]\n }\n\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source,\n dependencies: pkg.dependencies,\n engines: pkg.engines,\n funding: pkg.funding,\n bin: pkg.bin,\n devDependencies: pkg.devDependencies,\n peerDependencies: pkg.peerDependencies,\n optionalDependencies: pkg.optionalDependencies,\n license: pkg.license\n }\n\n Object.entries<string>(getDeps(entries[id])).forEach(([_name, range]) => {\n const [_path, _entry] = getClosestPkg(_name, chain, packages, range)\n const {ranges} = processPackage(_path, _entry)\n\n if (!ranges.includes(range)) {\n ranges.push(range)\n ranges.sort()\n }\n })\n return entries[id]\n }\n\n Object.entries(packages).forEach(([path, entry]) =>\n (path.startsWith('node_modules/') || path === '') && processPackage(path, entry))\n\n return sortObject(entries)\n}\n\nexport const preformat: IPreformat<TNpm3Lockfile> = (idx): TNpm3Lockfile => {\n const snap = idx.snapshot\n const mapped = Object.values(idx.tree)\n\n // debugAsJson(\n // 'mapped.json',\n // mapped//.map(a => a.key + (' ').repeat(40) + a.id + ' ' + a.chunks.length)\n // )\n\n const nmtree = mapped.reduce<Record<string, {entry: TEntry, parent: string}>>((result, {key, id, chunks}) => {\n const entry = snap[id]\n if (!entry) {\n throw new Error(`Malformed snapshot: ${id}`)\n }\n\n const grandparent = chunks[1]\n const cl = chunks.length\n\n let l = 0\n while (l <= cl) {\n const [name, ...parents] = [...chunks].reverse()\n\n let i = 0\n while (i < parents.length) {\n const __key = parents.slice(i, i + l).reverse()\n const _key = [...__key, name]//\n const variant = formatNmKey(_key)\n const found = result[variant]\n if (found) {\n\n if (found.entry === entry) {\n return result\n }\n\n } else {\n const pEntry = result[formatNmKey(__key)]?.entry\n const ppEntry = idx.getEntry(idx.tree[chunks.slice(0, cl - i - l).join(',')]?.id)\n if (__key.length && pEntry !== ppEntry) {\n i++\n continue\n }\n\n result[variant] = {entry, parent: grandparent}\n return result\n }\n i++\n }\n l++\n }\n\n if (entry.source.type === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debugAsJson('tree.json', nmtree)\n\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject(Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.source.type === 'workspace') {\n if (entry.source.id === '.') {\n m[\"\"] = manifest as TNpm3LockfileEntry\n return m\n }\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source.id as string,\n link: true\n }\n\n m[entry.source.id as string] = {\n name: entry.name,\n version: entry.version,\n license: entry.license,\n dependencies: entry.dependencies,\n bin: entry.bin,\n devDependencies: entry.devDependencies,\n }\n return m\n }\n\n m[k] = {\n version: entry.version,\n resolved: formatTarballUrl(entry.name, entry.version),\n integrity: formatIntegrity(entry.hashes)\n }\n if (!idx.prod.has(entry)) {\n m[k].dev = true\n }\n m[k].dependencies = entry.dependencies\n m[k].bin = entry.bin\n m[k].engines = entry.engines\n m[k].funding = entry.funding\n m[k].peerDependencies = entry.peerDependencies\n m[k].optionalDependencies = entry.optionalDependencies\n\n return m\n }, {} as TNpm3LockfileDeps)\n )\n\n return {\n name: manifest.name,\n version: manifest.version,\n lockfileVersion: 3,\n requires: true,\n packages,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n", "import {ICheck, IFormat, IPreformat, TSnapshot} from '../interface'\nimport {preformat as preformatNpm1, TNpm1LockfileDeps, TNpm1Lockfile} from './npm-1'\nimport {preformat as preformatNpm3, TNpm3LockfileDeps, TNpm3Lockfile} from './npm-3'\nimport {analyze} from '../analyze'\n\nexport type TNpm2Lockfile = {\n lockfileVersion: 2\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n dependencies: TNpm1LockfileDeps\n}\n\nexport const version = 'npm-2'\n\nexport {parse} from './npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 2')\n\nexport const preformat: IPreformat<TNpm2Lockfile> = (idx): TNpm2Lockfile => {\n const lfnpm1: TNpm1Lockfile = preformatNpm1(idx)\n const lfnpm3: TNpm3Lockfile = preformatNpm3(idx)\n\n return {\n name: lfnpm1.name,\n version: lfnpm1.version,\n lockfileVersion: 2,\n requires: true,\n packages: lfnpm3.packages,\n dependencies: lfnpm1.dependencies,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n", "import {load, dump} from 'js-yaml'\nimport {TDependencies, TSnapshot, TSnapshotIndex, ICheck, IFormat, IParse, IPreformat, TSource} from '../interface'\nimport {parseIntegrity} from '../common'\n\nconst kvEntryPattern = /^(\\s+)\"?([^\"]+)\"?\\s\"?([^\"]+)\"?$/\n\nexport type TYarn1Lockfile = Record<string, {\n version: string\n resolved: string\n integrity: string\n dependencies?: TDependencies\n optionalDependencies?: TDependencies\n}>\n\nexport const version = 'yarn-1'\n\nexport const check: ICheck = (value: string): boolean => value.includes('# yarn lockfile v1')\n\nexport const preparse = (value: string): TYarn1Lockfile => {\n const lines = value.split('\\n')\n const _value = lines.map((line) => {\n if (line.startsWith('#')) {\n return ''\n }\n\n // \"@babel/code-frame@^7.0.0\", \"@babel/code-frame@^7.12.13\"\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n const [,p,k,v]: string[] = line.match(kvEntryPattern) || []\n if (line.match(kvEntryPattern)) {\n return `${p}\"${k}\": \"${v}\"`\n }\n\n return line\n }, '').join('\\n')\n\n return load(_value) as TYarn1Lockfile\n}\n\nexport const parse: IParse = (value: string, pkg: string): TSnapshot => {\n const manifest = JSON.parse(pkg)\n const raw = preparse(value)\n const snapshot: TSnapshot = {}\n\n Object.entries(raw).forEach((value) => {\n const [_key, _entry] = value\n const chunks = _key.split(', ')\n const ranges = chunks.map(r => r.slice(r.lastIndexOf('@') + 1)).sort()\n const { version, integrity, dependencies, optionalDependencies, resolved } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(integrity)\n const source: TSource = {\n type: 'npm',\n id: resolved\n }\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n optionalDependencies,\n source,\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies\n }\n\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn1Lockfile> = (idx): TYarn1Lockfile => {\n const {snapshot} = idx\n const lf: TYarn1Lockfile = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes, dependencies, optionalDependencies, source } = entry\n const key = ranges.map(r => `${name}@${r}`).join(', ')\n const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n\n lf[key] = {\n version,\n resolved: source.id as string,\n integrity,\n dependencies,\n optionalDependencies,\n }\n })\n\n delete lf[\"\"]\n\n return lf\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => {\n const lf = preformat({snapshot} as TSnapshotIndex)\n const lines: string[] = dump(lf, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: true\n }).split('\\n')\n const _value = lines.map((line) => {\n // \"@babel/code-frame@^7.0.0\", \"@babel/code-frame@^7.12.13\"\n if (line.length !==0 && line.charAt(0) !== ' ') {\n const chunks = line.slice(0, -1).replaceAll('\"', '').split(', ').map(chunk => chunk.startsWith('@') || chunk.includes(' ') ? `\"${chunk}\"` : chunk)\n return `\\n${chunks.join(', ')}:`\n }\n\n if (line.startsWith(' integrity')) {\n const _line = line.replace(':', '')\n\n return line.includes('= ') // multiple hashes\n ? _line.replaceAll('\"integrity\"', 'integrity')\n : _line.replaceAll('\"', '')\n }\n\n if (line.endsWith('ependencies:')) {\n return line\n }\n\n return line.replace(':', '')\n }, '').join('\\n')\n\n return `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n# yarn lockfile v1\n\n${_value}`\n}\n", "// https://github.com/yarnpkg/berry/commit/2f9e8073d15745f9d53e6b8b42fa9c81eb143d54\n\nimport {load, dump} from 'js-yaml'\nimport {\n ICheck,\n IFormat,\n IParse,\n IPreformat,\n TDependencies,\n TDependenciesMeta,\n TSnapshot,\n TSnapshotIndex,\n TSourceType\n} from '../interface'\nimport {parseIntegrity} from '../common'\nimport {sortObject} from '../util'\n\nexport type TYarn5Lockfile = Record<string, {\n version: string\n resolution: string\n conditions?: string\n checksum: string\n languageName: string\n linkType: string\n dependencies?: TDependencies\n dependenciesMeta?: TDependenciesMeta\n optionalDependencies?: TDependencies\n peerDependencies?: TDependencies\n peerDependenciesMeta?: TDependenciesMeta\n bin?: Record<string, string>\n}>\n\nexport const version = 'yarn-berry'\n\nexport const check: ICheck = (value: string): boolean => value.includes(`\n__metadata:\n version:`)\n\nconst parseResolution = (resolution: string): {sourceId: string, sourceType: TSourceType, name: string} => {\n const colonPos = resolution.indexOf(':')\n const atPos = resolution.indexOf('@', 1)\n const name = resolution.slice(0, atPos)\n\n if (colonPos === -1) {\n return {\n name,\n sourceId: resolution.slice(atPos + 1),\n sourceType: 'npm'\n }\n }\n return {\n name,\n sourceId: resolution.slice(colonPos + 1),\n sourceType: resolution.slice(atPos + 1, colonPos) as TSourceType\n }\n}\n\nconst formatResolution = (name: string, source: string, sourceType: TSourceType = 'npm'): string =>\n `${name}@${sourceType === 'semver' ? '' : sourceType + ':'}${source}`\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const manifest = JSON.parse(pkg)\n const snapshot: TSnapshot = {}\n const raw = load(lockfile) as TYarn5Lockfile\n\n delete raw.__metadata\n\n Object.entries(raw).forEach((value) => {\n const [_key, _entry] = value\n const { version, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution, bin, conditions } = _entry\n const chunks = _key.split(', ')\n const refs = chunks.map(parseResolution)\n const name = refs[0].name\n const key = `${name}@${version}`\n\n // seems like a patch\n if (_key.includes('#')) {\n snapshot[key].patch = {\n resolution,\n refs: chunks,\n checksum\n }\n return\n }\n\n const ranges = refs.map(r => r.sourceId).sort()\n const hashes = parseIntegrity(checksum)\n const {sourceType, sourceId} = parseResolution(resolution)\n const source = {\n id: sourceId,\n type: sourceType\n }\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n conditions,\n }\n\n if (sourceType === 'workspace') {}\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies\n }\n\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn5Lockfile> = (idx): TYarn5Lockfile => {\n const {snapshot} = idx\n const lf: TYarn5Lockfile = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes: {checksum}, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry\n const isLocal = version === '0.0.0-use.local'\n const languageName = isLocal ? 'unknown' : 'node'\n const linkType = isLocal ? 'soft' : 'hard'\n const key = ranges.map(r => formatResolution(name, r, source.type === 'workspace' ? ((r === '.' || r.includes('/')) ? 'workspace' : 'semver'): 'npm')).join(', ')\n\n lf[key] = {\n version,\n resolution: formatResolution(name, source.id, source.type),\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n checksum: checksum as string,\n conditions,\n languageName,\n linkType,\n }\n\n if (patch) {\n lf[patch.refs.join(', ')] = {\n ...lf[key],\n resolution: patch.resolution,\n checksum: patch.checksum,\n }\n }\n })\n\n delete lf[\"\"]\n\n return sortObject(lf)\n}\n\nexport const format: IFormat = (snapshot: TSnapshot, {__metadata = {\n version: 5,\n cacheKey: 8,\n}} = {}): string => {\n const lines = dump({\n __metadata,\n ...preformat({snapshot} as TSnapshotIndex)\n }, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: false,\n noRefs: true\n })\n .split('\\n')\n .map(line => {\n if (line === '__metadata:') {\n return `\\n${line}`\n }\n\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\\n\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n if (line.startsWith(' resolution: ')) {\n return line.replaceAll('\"', '').replace(' resolution: ', ' resolution: \"').concat('\"')\n }\n\n return line\n })\n\n const _value = lines.join('\\n')\n\n return `# This file is generated by running \"yarn install\" inside your project.\n# Manual changes might be lost - proceed with caution!\n${_value}`\n}", "import {parse as parseNpm1, check as checkNpm1} from './formats/npm-1'\nimport {parse as parseNpm2, check as checkNpm2} from './formats/npm-2'\nimport {parse as parseNpm3, check as checkNpm3} from './formats/npm-3'\nimport {parse as parseYarnClassic, check as checkYarnClassic} from './formats/yarn-classic'\nimport {parse as parseYarnBerry, check as checkYarnBerry} from './formats/yarn-berry'\nimport {ICheck, IParse, TSnapshot} from './interface'\n\nconst isPkgJson = (input: string) => input.startsWith('{') && input.includes('\"name\":')\nconst variants: [ICheck, IParse][] = [\n [checkNpm1, parseNpm1],\n [checkNpm2, parseNpm2],\n [checkNpm3, parseNpm3],\n [checkYarnClassic, parseYarnClassic],\n [checkYarnBerry, parseYarnBerry],\n]\nexport const parse = (lockfile: string, ...pkgJsons: string[]): TSnapshot => {\n const [,parser] = variants.find(([check]) => check(lockfile)) || []\n\n if (!parser) {\n throw new TypeError('Unsupported lockfile format')\n }\n\n if (!pkgJsons.every(isPkgJson)) {\n throw new TypeError('Invalid package json')\n }\n\n return parser(lockfile, ...pkgJsons)\n}\n", "import {IFormat, IFormatOpts, TSnapshot} from './interface'\n\nimport {version as versionNpm1, format as formatNpm1} from './formats/npm-1'\nimport {version as versionNpm2, format as formatNpm2} from './formats/npm-2'\nimport {version as versionNpm3, format as formatNpm3} from './formats/npm-3'\nimport {version as versionYarnClassic, format as formatYarnClassic} from './formats/yarn-classic'\nimport {version as versionYarnBerry, format as formatYarnBerry} from './formats/yarn-berry'\n\nconst variants: [string, IFormat][] = [\n [versionNpm1, formatNpm1],\n [versionNpm2, formatNpm2],\n [versionNpm3, formatNpm3],\n [versionYarnClassic, formatYarnClassic],\n [versionYarnBerry, formatYarnBerry],\n]\n\nexport const format = (snapshot: TSnapshot, version: string, opts?: IFormatOpts): string => {\n const [,formatter] = variants.find(([_version]) => version === _version) || []\n\n if (!formatter) {\n throw new TypeError(`Unsupported lockfile format: ${version}`)\n }\n\n return formatter(snapshot, opts)\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import semver from 'semver'\nimport fs from 'node:fs/promises'\nimport {topo, traverseDeps} from '@semrel-extra/topo'\nimport {THashes, TManifest, TSnapshot} from './interface'\n\nexport const formatTarballUrl = (name: string, version: string, registry = 'https://registry.npmjs.org') =>\n `${registry}/${name}/-/${name.slice(name.indexOf('/') + 1)}-${version}.tgz`\n\nexport const getSources = (snapshot: TSnapshot): string[] =>\n Object.values(snapshot)\n .map(entry => entry.source.id)\n .filter(Boolean)\n\nexport const parseIntegrity = (integrity?: string): THashes =>\n integrity\n ? integrity.split(' ').reduce<THashes>((m, item) => {\n const [k, v] = item.split('-')\n if (k === 'sha512' || k === 'sha256' || k === 'sha1' || k === 'checksum') {\n m[k] = v\n } else if (!v){\n m['checksum'] = k\n }\n\n return m\n }, {})\n : {}\n\nexport const formatIntegrity = (hashes: THashes): string => {\n const checksum = hashes['checksum']\n if (checksum) {\n return checksum\n }\n\n return Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n}\n\nexport type IReferenceDeclaration = {\n protocol: string\n raw: string\n version: string | null\n [extra: string]: any\n}\n\nconst buildReference = (protocol: string, raw: string, value: string) => ({\n protocol,\n value,\n raw,\n caret: (value.startsWith('^') || value.startsWith('~')) ? value[0] : '',\n version: semver.valid(raw) || semver.coerce(raw)?.version || null\n})\n\nexport const parseReference = (raw?: any): IReferenceDeclaration => {\n if (raw.startsWith('workspace:')) {\n return buildReference('workspace', raw, raw.slice(10))\n }\n\n if (raw.startsWith('npm:')) {\n return buildReference('npm', raw, raw.slice(4))\n }\n\n return buildReference('semver', raw, raw)\n}\n\nexport const mapReference = (current: string, targetProtocol: string, strategy = 'inherit'): string => {\n const {caret, version, protocol} = parseReference(current)\n const prefix = targetProtocol === 'semver' ? '' : `${targetProtocol}:`\n\n if (protocol === targetProtocol) {\n return current\n }\n\n if (version === null) {\n return prefix + '*'\n }\n\n const _version = strategy === 'pin'\n ? version\n : strategy === 'inherit'\n ? (caret + version)\n : strategy\n\n return prefix + _version\n}\n\n/**\n * Replaces local monorepo cross-refs with the target protocol: workspace or semver\n */\nexport const switchMonorefs = async ({cwd, strategy, protocol = 'semver', dryrun = false}: {\n cwd?: string\n strategy?: string // 'inherit' | 'pin' | 'coerce'\n protocol?: string\n dryrun?: boolean\n}) => {\n const {packages} = await topo({cwd})\n\n await Promise.all(Object.values(packages).map(async pkg => {\n await traverseDeps({pkg, packages, cb({name, version, deps}) {\n deps[name] = mapReference(version, protocol, strategy)\n }})\n\n if (dryrun) {\n return\n }\n\n await fs.writeFile(pkg.manifestAbsPath, JSON.stringify(pkg.manifest), 'utf8')\n }))\n\n return packages\n}\n", "import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport * as process from 'node:process'\n\nexport const sortObject = <T extends Record<string, any>>(\n unordered: T,\n predicate: (a: [string, any], b: [string, any]) => number = ([a], [b]) => a > b ? 1 : -1 // This is actually what npm does\n): T =>\n Object.entries({...unordered})\n .sort(predicate)\n .reduce((obj, [key, value]: [keyof T, T[keyof T]]) => {\n obj[key] = value\n return obj\n },\n flushObject(unordered) as T,\n )\n\nexport const flushObject = (obj: Record<string, any>) => {\n for (const key in obj) {\n delete obj[key]\n }\n\n return obj\n}\n\nexport const loadContents = async (value: string): Promise<string> =>\n value.includes('\\n')\n ? value\n : fs.readFile(value, 'utf-8')\n\nexport const debug = Object.assign(function (this: any, ...chunks: any[]) {\n if (!this.enable) return\n\n console.log(...chunks)\n}, {\n enable: process.env.DEBUG,\n json(data: any, name: any = `debug-${Math.random().toString(16).slice(2)}.json`, base = path.resolve(process.cwd(), 'temp')) {\n if (!this.enable) return\n\n if (typeof data === 'string') {\n this.json(name, data)\n return\n }\n\n const _data = typeof data === 'function' ? data() : data\n\n fs.writeFile(path.resolve(base, name), JSON.stringify(_data, null, 2))\n }\n})\n", "import {TEntry, TSnapshot, TSnapshotIndex} from './interface'\nimport {debug, sortObject} from './util'\n\nexport const getDeps = (entry: TEntry): Record<string, string> => {\n if (!getDeps.cache.has(entry)) {\n getDeps.cache.set(entry, ({\n ...sortObject(entry.dependencies || {}),\n ...sortObject({...entry.devDependencies, ...entry.optionalDependencies})\n }))\n }\n\n return getDeps.cache.get(entry) as Record<string, string>\n}\n\ngetDeps.cache = new WeakMap<TEntry, Record<string, string>>()\n\ntype TWalkCtx = {\n root: TEntry,\n entry?: TEntry\n idx: TSnapshotIndex\n id?: string\n prefix?: string\n depth?: number\n parentId?: string\n parents?: TEntry[]\n}\n\nconst walk = (ctx: TWalkCtx) => {\n const {root, entry = root, prefix, depth = 0, parentId, idx, id = idx.getEntryId(entry), parents = []} = ctx\n const key = (prefix ? prefix + ',' : '') + entry.name\n\n if (id === undefined) {\n throw new TypeError(`Invalid snapshot: ${key}`)\n }\n\n if (!idx.tree[key]) {\n const chunks = key.split(',')\n idx.tree[key] = {\n key,\n chunks,\n id,\n name: entry.name,\n version: entry.version,\n entry,\n parents\n }\n if (root.dependencies?.[chunks[1]]) {\n idx.prod.add(entry)\n }\n if (parentId !== undefined) {\n idx.edges.push([parentId, id])\n return\n }\n if (depth) {\n return\n }\n }\n\n const dependencies = getDeps(entry)\n const stack: any[] = []\n\n Object.entries(dependencies).forEach(([name, range]) => {\n const _entry = idx.getEntryByRange(name, range)\n if (!_entry) {\n throw new Error(`inconsistent snapshot: ${name} ${range}`)\n }\n idx.bound(entry, _entry)\n if (parents.includes(entry)) {\n return\n }\n const _ctx: TWalkCtx = {root, entry: _entry, prefix: key, depth: depth + 1, parentId: id, idx, parents: [...parents, entry]}\n stack.push(_ctx)\n walk(_ctx)\n })\n\n stack.forEach(walk)\n}\n\nexport const getId = (name?: string, version: string = ''): string => name\n ? `${name}@${version}`\n : ''\n\nexport const analyze = (snapshot: TSnapshot): TSnapshotIndex => {\n const entries: TEntry[] = Object.values(snapshot)\n const roots = entries.filter(e => e.source.type === 'workspace')\n const prod = new Set(roots)\n const deps = new Map()\n const edges: [string, string][] = []\n const tree: TSnapshotIndex['tree'] = {}\n const idx: TSnapshotIndex = {\n snapshot,\n roots,\n edges,\n tree,\n prod,\n entries,\n bound(from: TEntry, to: TEntry) {\n const deps = this.getEntryDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getEntryId ({name, version}: TEntry): string {\n return getId(name, version)\n },\n getEntry (name: string, version?: string) {\n return snapshot[name] || snapshot[getId(name, version)]\n },\n getEntryByRange (name: string, range: string) {\n return entries.find(({name: _name, ranges}) => name === _name && ranges.includes(range))\n },\n getEntryDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\n }\n }\n\n const now = Date.now()\n roots.forEach((root, i) => walk({root, idx, id: root.source.id === '.' ? '' : undefined}))\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n console.log('analyze duration=', Date.now() - now, 'deptree size=', Object.keys(tree).length)\n\n debug.json('deptree.json', Object.values(tree).map(({parents, name}) => [...parents.map(p=> p.name).slice(1), name].join(',')))\n\n return idx\n}\n", "import {\n ICheck,\n IFormat,\n IParse, IPreformat,\n TDependencies,\n THashes,\n TEntry,\n TManifest,\n TSnapshot,\n} from '../interface'\nimport {debug, sortObject} from '../util'\nimport {parseIntegrity, formatTarballUrl} from '../common'\nimport {analyze} from '../analyze'\n\nexport const version = 'npm-1'\n\nexport type TNpm1LockfileEntry = {\n version: string\n resolved: string\n integrity: string\n dev?: boolean\n requires?: Record<string, string>\n dependencies?: TNpm1LockfileDeps\n}\n\nexport type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>\n\nexport type TNpm1Lockfile = {\n lockfileVersion: 1\n name: string\n version: string\n requires?: true\n dependencies: TNpm1LockfileDeps\n}\n\ninterface TDepTree {\n dependencies?: Record<string, TDepTree>\n version: string\n requires?: any\n}\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 1')\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const lf: TNpm1Lockfile = JSON.parse(lockfile)\n const manifest: TManifest = JSON.parse(pkg)\n const snapshot: Record<string, TEntry> = {\n \"\": {\n name: manifest.name,\n version: manifest.version,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n ranges: [],\n manifest,\n }\n }\n const getClosestVersion = (name: string, ...deps: TNpm1LockfileDeps[]): string =>\n deps.find((dep) => dep[name])?.[name]?.version as string\n\n const upsertEntry = (name: string, version: string, data: Partial<TEntry> = {}): TEntry => {\n const key = `${name}@${version}`\n if (!snapshot[key]) {\n // @ts-ignore\n snapshot[key] = {name, version, ranges: []}\n }\n return Object.assign(snapshot[key], data)\n }\n const pushRange = (name: string, version: string, range: string): void => {\n const entry = upsertEntry(name, version)\n\n if (!entry.ranges.includes(range)) {\n entry.ranges.push(range)\n entry.ranges.sort()\n }\n }\n const extractRanges = (deps?: TDependencies, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([_name, range]) => {\n const _version = getClosestVersion(_name, ...parents)\n pushRange(_name, _version, range)\n })\n const extractEntries = (deps?: TNpm1LockfileDeps, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([name, entry]) => {\n const requires = entry.requires || entry.dependencies && Object.entries(entry.dependencies).reduce((m, [name, {version}]) => {\n m[name] = version\n return m\n }, {} as Record<string, string>)\n\n upsertEntry(name, entry.version, {\n hashes: parseIntegrity(entry.integrity),\n dependencies: requires,\n source: {\n type: 'npm',\n id: entry.resolved\n }\n })\n\n extractEntries(entry.dependencies, deps, ...parents)\n extractRanges(requires, entry.dependencies || {}, deps, ...parents)\n })\n\n extractEntries(lf.dependencies)\n extractRanges({\n ...snapshot[\"\"].dependencies,\n ...snapshot[\"\"].devDependencies\n }, lf.dependencies || {})\n\n debug.json('npm1-snapshot.json', snapshot)\n\n return sortObject(snapshot)\n}\n\nconst formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\nexport const preformat: IPreformat<TNpm1Lockfile> = (idx): TNpm1Lockfile => {\n const root = idx.snapshot[\"\"].manifest as TManifest\n const deptree = Object.values(idx.tree).slice(1).map(({parents, entry}) => [...parents.slice(1), entry])\n\n debug.json('deptree-npm-1.json', deptree.map((entries: TEntry[]) => entries.map(e => e.name).join(',')))\n\n const formatNpm1LockfileEntry = (entry: TEntry): TNpm1LockfileEntry => {\n const {name, version, hashes} = entry\n const _entry: TNpm1LockfileDeps[string] = {\n version,\n resolved: formatTarballUrl(name, version),\n integrity: formatIntegrity(hashes)\n }\n\n if (!idx.prod.has(entry)) {\n _entry.dev = true\n }\n\n if (entry.dependencies) {\n _entry.requires = entry.dependencies\n }\n\n return _entry\n }\n\n const lf: TNpm1Lockfile = {\n name: root.name,\n version: root.version,\n lockfileVersion: 1,\n requires: true,\n dependencies: {}\n }\n const nmtree = lf\n const nodes: TDepTree[] = [nmtree]\n const processEntry = (name: string, version: string, parents: TNpm1LockfileEntry[]) => {\n const entry = idx.getEntry(name, version)!\n const deps = idx.getEntryDeps(entry)\n const queue: [string, string, TNpm1LockfileEntry[]][] = []\n\n deps.forEach((e) => {\n const closestIndex = parents.findIndex((p) => p.dependencies?.[e.name])\n const closest = parents[closestIndex]\n if (closest?.dependencies?.[e.name].version === e.version) {\n return\n }\n\n const _entry = formatNpm1LockfileEntry(e)\n const _parents = [_entry, ...parents]\n const parent = closest\n ? _parents[closestIndex]\n : _parents[_parents.length - 1]\n\n if (!parent.dependencies) {\n parent.dependencies = {}\n }\n parent.dependencies[e.name] = _entry\n\n nodes.push(parent)\n queue.push([e.name, e.version, _parents])\n })\n\n queue.forEach(([name, version, parents]) => processEntry(name, version, parents))\n }\n\n deptree.forEach((chain) => {\n const entry = chain[chain.length - 1]\n const {name} = entry\n\n if (!nmtree.dependencies[name]) {\n nmtree.dependencies[name] = formatNpm1LockfileEntry(entry)\n }\n })\n Object.entries(nmtree.dependencies).forEach(([name, entry]) => processEntry(name, entry.version, [entry, nmtree] as TNpm1LockfileEntry[]))\n\n nodes.forEach((node) => {\n sortObject(node.dependencies || {})\n\n if (node.requires) {\n const snap1 = Object.entries(node.requires).map(([name, range]) => `${name}@${range}`).join('')\n const snap2 = Object.entries(node.dependencies || {}).map(([name, {version}]) => `${name}@${version}`).join('')\n\n if (snap1 === snap2) {\n delete node.requires\n }\n }\n })\n\n return lf\n}\n\nexport const format: IFormat = (snap): string =>\n JSON.stringify(preformat(analyze(snap)), null, 2)\n", "import {ICheck, IFormat, IPreformat, TEntry, TManifest, TSnapshot, TSource} from '../interface'\nimport {formatTarballUrl, parseIntegrity, formatIntegrity} from '../common'\nimport {sortObject, debug} from '../util'\nimport {analyze, getDeps, getId} from '../analyze'\nimport semver from 'semver'\n\nexport type TNpm3LockfileEntry = {\n name?: string\n version?: string\n resolved?: string\n integrity?: string\n dev?: boolean\n link?: boolean\n dependencies?: Record<string, string>,\n engines?: Record<string, string>\n funding?: Record<string, string>\n peerDependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n bin?: any\n license?: string\n}\n\nexport type TNpm3LockfileDeps = Record<string, TNpm3LockfileEntry>\n\nexport type TNpm3Lockfile = {\n lockfileVersion: 3\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n}\n\nexport const version = 'npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 3')\n\nexport const parse = (lockfile: string): TSnapshot => {\n const lf: TNpm3Lockfile = JSON.parse(lockfile)\n const snapshot = parsePackages(lf.packages)\n\n snapshot[\"\"].manifest = lf.packages[\"\"]\n\n debug.json('npm3-snapshot.json', snapshot)\n\n return snapshot\n}\n\nconst formatNmKey = (chunks: string[]) => `node_modules/` + chunks.join('/node_modules/')\n\nconst parsePackages = (packages: TNpm3LockfileDeps): any => {\n const entries: Record<string, TEntry> = {}\n const getClosestPkg = (name: string, chain: string[], entries: Record<string, TNpm3LockfileEntry>, range: string): [string, TNpm3LockfileEntry] => {\n const variants: string[] = []\n\n let s = 0\n let i = 0\n while(s < chain.length) {\n let l = chain.length + 1\n while (l--) {\n const variant = formatNmKey([...chain.slice(s, l), name].filter(Boolean))\n const entry = entries[variant]\n\n if (entry && (!entry.version || semver.satisfies(entry.version as string, range))) { // FIXME later\n return [variant, entry]\n }\n variants.push(variant)\n }\n s++\n }\n throw new Error(`Malformed lockfile: ${name} ${range}\\n${variants.join('\\n')}`)\n }\n\n const processPackage = (path: string, pkg: TNpm3LockfileEntry): TEntry => {\n const sourceType = (pkg.link || path === \"\") ? 'workspace' : 'semver'\n\n if (sourceType === 'workspace' && !pkg.name){\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\n }\n const source: TSource = {\n id: (pkg.resolved || '.') as string,\n type: sourceType\n }\n\n const chain: string[] = path ? ('/' + path).split('/node_modules/').filter(Boolean) : [\"\"]\n const name = pkg.name || chain[chain.length - 1]\n const version = pkg.version as string\n const id = path === \"\" ? path : getId(name, version)\n\n if (entries[id]) {\n return entries[id]\n }\n\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source,\n dependencies: pkg.dependencies,\n engines: pkg.engines,\n funding: pkg.funding,\n bin: pkg.bin,\n devDependencies: pkg.devDependencies,\n peerDependencies: pkg.peerDependencies,\n optionalDependencies: pkg.optionalDependencies,\n license: pkg.license\n }\n\n Object.entries<string>(getDeps(entries[id])).forEach(([_name, range]) => {\n const [_path, _entry] = getClosestPkg(_name, chain, packages, range)\n const {ranges} = processPackage(_path, _entry)\n\n if (!ranges.includes(range)) {\n ranges.push(range)\n ranges.sort()\n }\n })\n return entries[id]\n }\n\n Object.entries(packages).forEach(([path, entry]) =>\n (path.startsWith('node_modules/') || path === '') && processPackage(path, entry))\n\n return sortObject(entries)\n}\n\nexport const preformat: IPreformat<TNpm3Lockfile> = (idx): TNpm3Lockfile => {\n const snap = idx.snapshot\n const nmtree = Object.values(idx.tree).reduce<Record<string, {entry: TEntry, parent: string}>>((result, {key, id, chunks}) => {\n const entry = snap[id]\n if (!entry) {\n throw new Error(`Malformed snapshot: ${id}`)\n }\n\n const grandparent = chunks[1]\n const cl = chunks.length\n\n let l = 0\n while (l <= cl) {\n const [name, ...parents] = [...chunks].reverse()\n\n let i = 0\n while (i < parents.length) {\n const __key = parents.slice(i, i + l).reverse()\n const _key = [...__key, name]//\n const variant = formatNmKey(_key)\n const found = result[variant]\n if (found) {\n\n if (found.entry === entry) {\n return result\n }\n\n } else {\n const pEntry = result[formatNmKey(__key)]?.entry\n const ppEntry = idx.getEntry(idx.tree[chunks.slice(0, cl - i - l).join(',')]?.id)\n if (__key.length && pEntry !== ppEntry) {\n i++\n continue\n }\n\n result[variant] = {entry, parent: grandparent}\n return result\n }\n i++\n }\n l++\n }\n\n if (entry.source.type === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debug.json('npm3-nmtree.json', nmtree)\n\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject(Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.source.type === 'workspace') {\n if (entry.source.id === '.') {\n m[\"\"] = manifest as TNpm3LockfileEntry\n return m\n }\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source.id as string,\n link: true\n }\n\n m[entry.source.id as string] = {\n name: entry.name,\n version: entry.version,\n license: entry.license,\n dependencies: entry.dependencies,\n bin: entry.bin,\n devDependencies: entry.devDependencies,\n }\n return m\n }\n\n m[k] = {\n version: entry.version,\n resolved: formatTarballUrl(entry.name, entry.version),\n integrity: formatIntegrity(entry.hashes)\n }\n if (!idx.prod.has(entry)) {\n m[k].dev = true\n }\n m[k].dependencies = entry.dependencies\n m[k].bin = entry.bin\n m[k].engines = entry.engines\n m[k].funding = entry.funding\n m[k].peerDependencies = entry.peerDependencies\n m[k].optionalDependencies = entry.optionalDependencies\n\n return m\n }, {} as TNpm3LockfileDeps)\n )\n\n return {\n name: manifest.name,\n version: manifest.version,\n lockfileVersion: 3,\n requires: true,\n packages,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n", "import {ICheck, IFormat, IPreformat, TSnapshot} from '../interface'\nimport {preformat as preformatNpm1, TNpm1LockfileDeps, TNpm1Lockfile} from './npm-1'\nimport {preformat as preformatNpm3, TNpm3LockfileDeps, TNpm3Lockfile} from './npm-3'\nimport {analyze} from '../analyze'\n\nexport type TNpm2Lockfile = {\n lockfileVersion: 2\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n dependencies: TNpm1LockfileDeps\n}\n\nexport const version = 'npm-2'\n\nexport {parse} from './npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 2')\n\nexport const preformat: IPreformat<TNpm2Lockfile> = (idx): TNpm2Lockfile => {\n const lfnpm1: TNpm1Lockfile = preformatNpm1(idx)\n const lfnpm3: TNpm3Lockfile = preformatNpm3(idx)\n\n return {\n name: lfnpm1.name,\n version: lfnpm1.version,\n lockfileVersion: 2,\n requires: true,\n packages: lfnpm3.packages,\n dependencies: lfnpm1.dependencies,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n", "import {load, dump} from 'js-yaml'\nimport {TDependencies, TSnapshot, TSnapshotIndex, ICheck, IFormat, IParse, IPreformat, TSource} from '../interface'\nimport {parseIntegrity} from '../common'\nimport {debug} from '../util'\n\nconst kvEntryPattern = /^(\\s+)\"?([^\"]+)\"?\\s\"?([^\"]+)\"?$/\n\nexport type TYarn1Lockfile = Record<string, {\n version: string\n resolved: string\n integrity: string\n dependencies?: TDependencies\n optionalDependencies?: TDependencies\n}>\n\nexport const version = 'yarn-1'\n\nexport const check: ICheck = (value: string): boolean => value.includes('# yarn lockfile v1')\n\nexport const preparse = (value: string): TYarn1Lockfile => {\n const lines = value.split('\\n')\n const _value = lines.map((line) => {\n if (line.startsWith('#')) {\n return ''\n }\n\n // \"@babel/code-frame@^7.0.0\", \"@babel/code-frame@^7.12.13\"\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n const [,p,k,v]: string[] = line.match(kvEntryPattern) || []\n if (line.match(kvEntryPattern)) {\n return `${p}\"${k}\": \"${v}\"`\n }\n\n return line\n }, '').join('\\n')\n\n return load(_value) as TYarn1Lockfile\n}\n\nexport const parse: IParse = (value: string, pkg: string): TSnapshot => {\n const manifest = JSON.parse(pkg)\n const raw = preparse(value)\n const snapshot: TSnapshot = {}\n\n Object.entries(raw).forEach((value) => {\n const [_key, _entry] = value\n const chunks = _key.split(', ')\n const ranges = chunks.map(r => r.slice(r.lastIndexOf('@') + 1)).sort()\n const { version, integrity, dependencies, optionalDependencies, resolved } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(integrity)\n const source: TSource = {\n type: 'npm',\n id: resolved\n }\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n optionalDependencies,\n source,\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies\n }\n\n debug.json('yarn-classic-snapshot.json', snapshot)\n\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn1Lockfile> = (idx): TYarn1Lockfile => {\n const {snapshot} = idx\n const lf: TYarn1Lockfile = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes, dependencies, optionalDependencies, source } = entry\n const key = ranges.map(r => `${name}@${r}`).join(', ')\n const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n\n lf[key] = {\n version,\n resolved: source.id as string,\n integrity,\n dependencies,\n optionalDependencies,\n }\n })\n\n delete lf[\"\"]\n\n return lf\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => {\n const lf = preformat({snapshot} as TSnapshotIndex)\n const lines: string[] = dump(lf, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: true\n }).split('\\n')\n const _value = lines.map((line) => {\n // \"@babel/code-frame@^7.0.0\", \"@babel/code-frame@^7.12.13\"\n if (line.length !==0 && line.charAt(0) !== ' ') {\n const chunks = line.slice(0, -1).replaceAll('\"', '').split(', ').map(chunk => chunk.startsWith('@') || chunk.includes(' ') ? `\"${chunk}\"` : chunk)\n return `\\n${chunks.join(', ')}:`\n }\n\n if (line.startsWith(' integrity')) {\n const _line = line.replace(':', '')\n\n return line.includes('= ') // multiple hashes\n ? _line.replaceAll('\"integrity\"', 'integrity')\n : _line.replaceAll('\"', '')\n }\n\n if (line.endsWith('ependencies:')) {\n return line\n }\n\n return line.replace(':', '')\n }, '').join('\\n')\n\n return `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n# yarn lockfile v1\n\n${_value}`\n}\n", "// https://github.com/yarnpkg/berry/commit/2f9e8073d15745f9d53e6b8b42fa9c81eb143d54\n\nimport {load, dump} from 'js-yaml'\nimport {\n ICheck,\n IFormat,\n IParse,\n IPreformat,\n TDependencies,\n TDependenciesMeta,\n TSnapshot,\n TSnapshotIndex,\n TSourceType\n} from '../interface'\nimport {parseIntegrity} from '../common'\nimport {debug, sortObject} from '../util'\n\nexport type TYarn5Lockfile = Record<string, {\n version: string\n resolution: string\n conditions?: string\n checksum: string\n languageName: string\n linkType: string\n dependencies?: TDependencies\n dependenciesMeta?: TDependenciesMeta\n optionalDependencies?: TDependencies\n peerDependencies?: TDependencies\n peerDependenciesMeta?: TDependenciesMeta\n bin?: Record<string, string>\n}>\n\nexport const version = 'yarn-berry'\n\nexport const check: ICheck = (value: string): boolean => value.includes(`\n__metadata:\n version:`)\n\nconst parseResolution = (resolution: string): {sourceId: string, sourceType: TSourceType, name: string} => {\n const colonPos = resolution.indexOf(':')\n const atPos = resolution.indexOf('@', 1)\n const name = resolution.slice(0, atPos)\n\n if (colonPos === -1) {\n return {\n name,\n sourceId: resolution.slice(atPos + 1),\n sourceType: 'npm'\n }\n }\n return {\n name,\n sourceId: resolution.slice(colonPos + 1),\n sourceType: resolution.slice(atPos + 1, colonPos) as TSourceType\n }\n}\n\nconst formatResolution = (name: string, source: string, sourceType: TSourceType = 'npm'): string =>\n `${name}@${sourceType === 'semver' ? '' : sourceType + ':'}${source}`\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const manifest = JSON.parse(pkg)\n const snapshot: TSnapshot = {}\n const raw = load(lockfile) as TYarn5Lockfile\n\n delete raw.__metadata\n\n Object.entries(raw).forEach((value) => {\n const [_key, _entry] = value\n const { version, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution, bin, conditions } = _entry\n const chunks = _key.split(', ')\n const refs = chunks.map(parseResolution)\n const name = refs[0].name\n const key = `${name}@${version}`\n\n // seems like a patch\n if (_key.includes('#')) {\n snapshot[key].patch = {\n resolution,\n refs: chunks,\n checksum\n }\n return\n }\n\n const ranges = refs.map(r => r.sourceId).sort()\n const hashes = parseIntegrity(checksum)\n const {sourceType, sourceId} = parseResolution(resolution)\n const source = {\n id: sourceId,\n type: sourceType\n }\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n conditions,\n }\n\n if (sourceType === 'workspace') {}\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies\n }\n\n debug.json('yarn-berry-snapshot.json', snapshot)\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn5Lockfile> = (idx): TYarn5Lockfile => {\n const {snapshot} = idx\n const lf: TYarn5Lockfile = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes: {checksum}, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry\n const isLocal = version === '0.0.0-use.local'\n const languageName = isLocal ? 'unknown' : 'node'\n const linkType = isLocal ? 'soft' : 'hard'\n const key = ranges.map(r => formatResolution(name, r, source.type === 'workspace' ? ((r === '.' || r.includes('/')) ? 'workspace' : 'semver'): 'npm')).join(', ')\n\n lf[key] = {\n version,\n resolution: formatResolution(name, source.id, source.type),\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n checksum: checksum as string,\n conditions,\n languageName,\n linkType,\n }\n\n if (patch) {\n lf[patch.refs.join(', ')] = {\n ...lf[key],\n resolution: patch.resolution,\n checksum: patch.checksum,\n }\n }\n })\n\n delete lf[\"\"]\n\n return sortObject(lf)\n}\n\nexport const format: IFormat = (snapshot: TSnapshot, {__metadata = {\n version: 5,\n cacheKey: 8,\n}} = {}): string => {\n const lines = dump({\n __metadata,\n ...preformat({snapshot} as TSnapshotIndex)\n }, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: false,\n noRefs: true\n })\n .split('\\n')\n .map(line => {\n if (line === '__metadata:') {\n return `\\n${line}`\n }\n\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\\n\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n if (line.startsWith(' resolution: ')) {\n return line.replaceAll('\"', '').replace(' resolution: ', ' resolution: \"').concat('\"')\n }\n\n return line\n })\n\n const _value = lines.join('\\n')\n\n return `# This file is generated by running \"yarn install\" inside your project.\n# Manual changes might be lost - proceed with caution!\n${_value}`\n}", "import {parse as parseNpm1, check as checkNpm1} from './formats/npm-1'\nimport {parse as parseNpm2, check as checkNpm2} from './formats/npm-2'\nimport {parse as parseNpm3, check as checkNpm3} from './formats/npm-3'\nimport {parse as parseYarnClassic, check as checkYarnClassic} from './formats/yarn-classic'\nimport {parse as parseYarnBerry, check as checkYarnBerry} from './formats/yarn-berry'\nimport {ICheck, IParse, TSnapshot} from './interface'\n\nconst isPkgJson = (input: string) => input.startsWith('{') && input.includes('\"name\":')\nconst variants: [ICheck, IParse][] = [\n [checkNpm1, parseNpm1],\n [checkNpm2, parseNpm2],\n [checkNpm3, parseNpm3],\n [checkYarnClassic, parseYarnClassic],\n [checkYarnBerry, parseYarnBerry],\n]\nexport const parse = (lockfile: string, ...pkgJsons: string[]): TSnapshot => {\n const [,parser] = variants.find(([check]) => check(lockfile)) || []\n\n if (!parser) {\n throw new TypeError('Unsupported lockfile format')\n }\n\n if (!pkgJsons.every(isPkgJson)) {\n throw new TypeError('Invalid package json')\n }\n\n return parser(lockfile, ...pkgJsons)\n}\n", "import {IFormat, IFormatOpts, TSnapshot} from './interface'\n\nimport {version as versionNpm1, format as formatNpm1} from './formats/npm-1'\nimport {version as versionNpm2, format as formatNpm2} from './formats/npm-2'\nimport {version as versionNpm3, format as formatNpm3} from './formats/npm-3'\nimport {version as versionYarnClassic, format as formatYarnClassic} from './formats/yarn-classic'\nimport {version as versionYarnBerry, format as formatYarnBerry} from './formats/yarn-berry'\n\nconst variants: [string, IFormat][] = [\n [versionNpm1, formatNpm1],\n [versionNpm2, formatNpm2],\n [versionNpm3, formatNpm3],\n [versionYarnClassic, formatYarnClassic],\n [versionYarnBerry, formatYarnBerry],\n]\n\nexport const format = (snapshot: TSnapshot, version: string, opts?: IFormatOpts): string => {\n const [,formatter] = variants.find(([_version]) => version === _version) || []\n\n if (!formatter) {\n throw new TypeError(`Unsupported lockfile format: ${version}`)\n }\n\n return formatter(snapshot, opts)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["version", "version", "deps", "version", "name", "formatIntegrity", "parents", "semver", "version", "check", "parse", "entries", "variants", "path", "preformat", "format", "version", "check", "preformat", "format", "version", "check", "parse", "value", "preformat", "format", "load", "dump", "version", "check", "parse", "load", "preformat", "format", "dump", "check", "parse", "variants", "version", "format"]
|
|
7
7
|
}
|
package/target/es6/util.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare const sortObject: <T extends Record<string, any>>(unordered: T, predicate?: (a: [string, any], b: [string, any]) => number) => T;
|
|
2
2
|
export declare const flushObject: (obj: Record<string, any>) => Record<string, any>;
|
|
3
3
|
export declare const loadContents: (value: string) => Promise<string>;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const debug: ((this: any, ...chunks: any[]) => void) & {
|
|
5
|
+
enable: string | undefined;
|
|
6
|
+
json(data: any, name?: any, base?: string): void;
|
|
7
|
+
};
|