@antongolub/lockfile 0.0.0-snapshot.2 → 0.0.0-snapshot.21
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 +165 -90
- package/package.json +17 -13
- package/target/es6/analyze.d.ts +7 -0
- package/target/es6/common.d.ts +27 -2
- package/target/es6/format.d.ts +2 -0
- package/target/es6/formats/npm-1.d.ts +24 -0
- package/target/es6/formats/npm-2.d.ts +16 -0
- package/target/es6/formats/npm-3.d.ts +36 -0
- package/target/es6/formats/yarn-1.d.ts +14 -0
- package/target/es6/formats/yarn-5.d.ts +20 -0
- package/target/es6/formats/yarn-7.d.ts +0 -0
- package/target/es6/formats/yarn-berry.d.ts +22 -0
- package/target/es6/formats/yarn-classic.d.ts +16 -0
- package/target/es6/index.d.ts +5 -7
- package/target/es6/index.js +728 -197
- package/target/es6/index.js.map +4 -4
- package/target/es6/interface.d.ts +58 -32
- package/target/es6/npm-1.d.ts +3 -3
- package/target/es6/packument.d.ts +0 -0
- package/target/es6/parse.d.ts +3 -0
- package/target/es6/util.d.ts +7 -4
- package/target/es6/workspace.d.ts +16 -0
- package/target/es6/yarn-1.d.ts +1 -1
- package/target/es6/yarn-5.d.ts +1 -1
- package/target/es6/index.mjs +0 -408
- /package/target/es6/{manifest.d.ts → formats/yarn-6.d.ts} +0 -0
package/target/es6/index.mjs
DELETED
|
@@ -1,408 +0,0 @@
|
|
|
1
|
-
// src/main/ts/util.ts
|
|
2
|
-
var parseIntegrity = (integrity) => integrity ? integrity.split(" ").reduce((m, item) => {
|
|
3
|
-
const [k, v] = item.split("-");
|
|
4
|
-
if (k === "sha512" || k === "sha256" || k === "sha1" || k === "checksum") {
|
|
5
|
-
m[k] = v;
|
|
6
|
-
} else if (!v) {
|
|
7
|
-
m["checksum"] = k;
|
|
8
|
-
}
|
|
9
|
-
return m;
|
|
10
|
-
}, {}) : {};
|
|
11
|
-
var sortObject = (unordered) => Object.entries({ ...unordered }).sort(([a], [b]) => a > b ? 1 : -1).reduce(
|
|
12
|
-
(obj, [key, value]) => {
|
|
13
|
-
obj[key] = value;
|
|
14
|
-
return obj;
|
|
15
|
-
},
|
|
16
|
-
flushObject(unordered)
|
|
17
|
-
);
|
|
18
|
-
var flushObject = (obj) => {
|
|
19
|
-
for (const key in obj) {
|
|
20
|
-
delete obj[key];
|
|
21
|
-
}
|
|
22
|
-
return obj;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// src/main/ts/npm-1.ts
|
|
26
|
-
import fs from "fs";
|
|
27
|
-
var parse = async (lockfile, pkg) => {
|
|
28
|
-
const lf = await JSON.parse(lockfile);
|
|
29
|
-
const manifest = await JSON.parse(pkg);
|
|
30
|
-
const workspaces = {
|
|
31
|
-
"": {
|
|
32
|
-
name: manifest.name,
|
|
33
|
-
path: ".",
|
|
34
|
-
manifest
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const entries = {
|
|
38
|
-
"": {
|
|
39
|
-
name: manifest.name,
|
|
40
|
-
version: manifest.version,
|
|
41
|
-
dependencies: {
|
|
42
|
-
...manifest.dependencies,
|
|
43
|
-
...manifest.devDependencies
|
|
44
|
-
},
|
|
45
|
-
hashes: {},
|
|
46
|
-
ranges: []
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const getClosestVersion = (name, ...deps) => deps.find((dep) => dep[name])?.[name]?.version;
|
|
50
|
-
const upsertEntry = (name, version, data = {}) => {
|
|
51
|
-
const key = `${name}@${version}`;
|
|
52
|
-
if (!entries[key]) {
|
|
53
|
-
entries[key] = { name, version, ranges: [] };
|
|
54
|
-
}
|
|
55
|
-
return Object.assign(entries[key], data);
|
|
56
|
-
};
|
|
57
|
-
const pushRange = (name, version, range) => {
|
|
58
|
-
const entry = upsertEntry(name, version);
|
|
59
|
-
if (!entry.ranges.includes(range)) {
|
|
60
|
-
entry.ranges.push(range);
|
|
61
|
-
entry.ranges.sort();
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
const extractRanges = (deps, ...parents) => deps && Object.entries(deps).forEach(([_name, range]) => {
|
|
65
|
-
const _version = getClosestVersion(_name, ...parents);
|
|
66
|
-
pushRange(_name, _version, range);
|
|
67
|
-
});
|
|
68
|
-
const extractEntries = (deps, ...parents) => deps && Object.entries(deps).forEach(([name, entry]) => {
|
|
69
|
-
const requires = entry.requires || entry.dependencies && Object.entries(entry.dependencies).reduce((m, [name2, { version }]) => {
|
|
70
|
-
m[name2] = version;
|
|
71
|
-
return m;
|
|
72
|
-
}, {});
|
|
73
|
-
upsertEntry(name, entry.version, {
|
|
74
|
-
hashes: parseIntegrity(entry.integrity),
|
|
75
|
-
dependencies: requires
|
|
76
|
-
});
|
|
77
|
-
extractEntries(entry.dependencies, deps, ...parents);
|
|
78
|
-
extractRanges(requires, entry.dependencies || {}, deps, ...parents);
|
|
79
|
-
});
|
|
80
|
-
extractEntries(lf.dependencies);
|
|
81
|
-
extractRanges(entries[""].dependencies, lf.dependencies || {});
|
|
82
|
-
return {
|
|
83
|
-
format: "npm-1",
|
|
84
|
-
entries: sortObject(entries),
|
|
85
|
-
workspaces
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
var formatIntegrity = (hashes) => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(" ");
|
|
89
|
-
var createIndex = () => {
|
|
90
|
-
const prod = /* @__PURE__ */ new Set();
|
|
91
|
-
const deps = /* @__PURE__ */ new Map();
|
|
92
|
-
return {
|
|
93
|
-
prod,
|
|
94
|
-
deps,
|
|
95
|
-
getDeps(entry) {
|
|
96
|
-
if (!deps.has(entry)) {
|
|
97
|
-
deps.set(entry, []);
|
|
98
|
-
}
|
|
99
|
-
return deps.get(entry);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
var isProd = (manifest, name) => !!manifest.dependencies?.[name];
|
|
104
|
-
var format = async (snap) => {
|
|
105
|
-
const root = snap.workspaces[""].manifest;
|
|
106
|
-
const entries = Object.values(snap.entries);
|
|
107
|
-
const idx = createIndex();
|
|
108
|
-
entries.forEach((entry) => {
|
|
109
|
-
entry.dependencies && Object.entries(entry.dependencies).forEach(([_name, range]) => {
|
|
110
|
-
const target = entries.find(({ name, ranges }) => name === _name && ranges.includes(range));
|
|
111
|
-
if (target) {
|
|
112
|
-
idx.getDeps(entry).push(target);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
const deptree = [];
|
|
117
|
-
const fillTree = (entry, chain = []) => {
|
|
118
|
-
const deps = idx.getDeps(entry);
|
|
119
|
-
deps.forEach((c) => isProd(root, chain[0]?.name || c.name) && idx.prod.add(c));
|
|
120
|
-
deps.sort(
|
|
121
|
-
(a, b) => idx.prod.has(a) && !idx.prod.has(b) ? -1 : idx.prod.has(b) && !idx.prod.has(a) ? 1 : a.name.localeCompare(b.name)
|
|
122
|
-
);
|
|
123
|
-
deps.forEach((dep) => deptree.push([...chain, dep]));
|
|
124
|
-
deps.forEach((dep) => fillTree(dep, [...chain, dep]));
|
|
125
|
-
};
|
|
126
|
-
const getEntry = (name, version) => entries.find((e) => e.name === name && e.version === version);
|
|
127
|
-
fillTree(getEntry(root.name, root.version));
|
|
128
|
-
const formatNpm1LockfileEntry = (entry) => {
|
|
129
|
-
const { name, version, hashes } = entry;
|
|
130
|
-
const _name = name.slice(name.indexOf("/") + 1);
|
|
131
|
-
const _entry = {
|
|
132
|
-
version,
|
|
133
|
-
resolved: `https://registry.npmjs.org/${name}/-/${_name}-${version}.tgz`,
|
|
134
|
-
integrity: formatIntegrity(hashes)
|
|
135
|
-
};
|
|
136
|
-
if (!idx.prod.has(entry)) {
|
|
137
|
-
_entry.dev = true;
|
|
138
|
-
}
|
|
139
|
-
if (entry.dependencies) {
|
|
140
|
-
_entry.requires = entry.dependencies;
|
|
141
|
-
}
|
|
142
|
-
return _entry;
|
|
143
|
-
};
|
|
144
|
-
const lf = {
|
|
145
|
-
name: root.name,
|
|
146
|
-
version: root.version,
|
|
147
|
-
lockfileVersion: 1,
|
|
148
|
-
requires: true,
|
|
149
|
-
dependencies: {}
|
|
150
|
-
};
|
|
151
|
-
const nmtree = lf;
|
|
152
|
-
const nodes = [nmtree];
|
|
153
|
-
const processEntry = (name, version, parents) => {
|
|
154
|
-
const entry = getEntry(name, version);
|
|
155
|
-
const deps = idx.getDeps(entry);
|
|
156
|
-
const queue = [];
|
|
157
|
-
deps.forEach((e) => {
|
|
158
|
-
const closestIndex = parents.findIndex((p) => p.dependencies?.[e.name]);
|
|
159
|
-
const closest = parents[closestIndex];
|
|
160
|
-
if (closest?.dependencies?.[e.name].version === e.version) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const _entry = formatNpm1LockfileEntry(e);
|
|
164
|
-
const _parents = [_entry, ...parents];
|
|
165
|
-
const parent = closest ? _parents[closestIndex] : _parents[_parents.length - 1];
|
|
166
|
-
if (!parent.dependencies) {
|
|
167
|
-
parent.dependencies = {};
|
|
168
|
-
}
|
|
169
|
-
parent.dependencies[e.name] = _entry;
|
|
170
|
-
nodes.push(parent);
|
|
171
|
-
queue.push([e.name, e.version, _parents]);
|
|
172
|
-
});
|
|
173
|
-
queue.forEach(([name2, version2, parents2]) => processEntry(name2, version2, parents2));
|
|
174
|
-
};
|
|
175
|
-
deptree.forEach((chain) => {
|
|
176
|
-
const entry = chain[chain.length - 1];
|
|
177
|
-
const { name } = entry;
|
|
178
|
-
if (!nmtree.dependencies[name]) {
|
|
179
|
-
nmtree.dependencies[name] = formatNpm1LockfileEntry(entry);
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
Object.entries(nmtree.dependencies).forEach(([name, entry]) => processEntry(name, entry.version, [entry, nmtree]));
|
|
183
|
-
nodes.forEach((node) => {
|
|
184
|
-
sortObject(node.dependencies || {});
|
|
185
|
-
if (node.requires) {
|
|
186
|
-
const snap1 = Object.entries(node.requires).map(([name, range]) => `${name}@${range}`).join("");
|
|
187
|
-
const snap2 = Object.entries(node.dependencies || {}).map(([name, { version }]) => `${name}@${version}`).join("");
|
|
188
|
-
if (snap1 === snap2) {
|
|
189
|
-
delete node.requires;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
fs.writeFileSync("temp/test.json", JSON.stringify(lf, null, 2));
|
|
194
|
-
fs.writeFileSync("temp/tree.json", JSON.stringify(
|
|
195
|
-
deptree.map((c) => c.map((e) => `${e.name}@${e.version}`).join(" > ")),
|
|
196
|
-
null,
|
|
197
|
-
2
|
|
198
|
-
));
|
|
199
|
-
return JSON.stringify(lf, null, 2);
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
// src/main/ts/yarn-1.ts
|
|
203
|
-
import { load, dump } from "js-yaml";
|
|
204
|
-
var kvEntryPattern = /^(\s+)"?([^"]+)"?\s"?([^"]+)"?$/;
|
|
205
|
-
var preparse = (value) => {
|
|
206
|
-
const lines = value.split("\n");
|
|
207
|
-
const _value = lines.map((line) => {
|
|
208
|
-
if (line.startsWith("#")) {
|
|
209
|
-
return "";
|
|
210
|
-
}
|
|
211
|
-
if (line.length !== 0 && line.charAt(0) !== " ") {
|
|
212
|
-
return `"${line.replaceAll('"', "").slice(0, -1)}":`;
|
|
213
|
-
}
|
|
214
|
-
const [, p, k, v] = line.match(kvEntryPattern) || [];
|
|
215
|
-
if (line.match(kvEntryPattern)) {
|
|
216
|
-
return `${p}"${k}": "${v}"`;
|
|
217
|
-
}
|
|
218
|
-
return line;
|
|
219
|
-
}, "").join("\n");
|
|
220
|
-
return load(_value);
|
|
221
|
-
};
|
|
222
|
-
var parseIntegrity2 = (integrity) => integrity.split(" ").reduce((m, item) => {
|
|
223
|
-
const [k, v] = item.split("-");
|
|
224
|
-
if (k === "sha512" || k === "sha256" || k === "sha1" || k === "checksum") {
|
|
225
|
-
m[k] = v;
|
|
226
|
-
}
|
|
227
|
-
return m;
|
|
228
|
-
}, {});
|
|
229
|
-
var parse2 = async (value) => {
|
|
230
|
-
const raw = await preparse(value);
|
|
231
|
-
const snapshot = {
|
|
232
|
-
entries: {},
|
|
233
|
-
workspaces: {},
|
|
234
|
-
format: "yarn-1"
|
|
235
|
-
};
|
|
236
|
-
Object.entries(raw).forEach((value2) => {
|
|
237
|
-
const [_key, _entry] = value2;
|
|
238
|
-
const chunks = _key.split(", ");
|
|
239
|
-
const ranges = chunks.map((r) => r.slice(r.lastIndexOf("@") + 1)).sort();
|
|
240
|
-
const { version, integrity, dependencies, optionalDependencies, resolved: source } = _entry;
|
|
241
|
-
const name = chunks[0].slice(0, chunks[0].lastIndexOf("@"));
|
|
242
|
-
const key = `${name}@${version}`;
|
|
243
|
-
const hashes = parseIntegrity2(integrity);
|
|
244
|
-
snapshot.entries[key] = {
|
|
245
|
-
name,
|
|
246
|
-
version,
|
|
247
|
-
ranges,
|
|
248
|
-
hashes,
|
|
249
|
-
dependencies,
|
|
250
|
-
optionalDependencies,
|
|
251
|
-
source
|
|
252
|
-
};
|
|
253
|
-
});
|
|
254
|
-
return snapshot;
|
|
255
|
-
};
|
|
256
|
-
var preformat = (value) => {
|
|
257
|
-
const lf = {};
|
|
258
|
-
Object.values(value.entries).forEach((entry) => {
|
|
259
|
-
const { name, version, ranges, hashes, dependencies, optionalDependencies, source } = entry;
|
|
260
|
-
const key = ranges.map((r) => `${name}@${r}`).join(", ");
|
|
261
|
-
const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(" ");
|
|
262
|
-
lf[key] = {
|
|
263
|
-
version,
|
|
264
|
-
resolved: source,
|
|
265
|
-
integrity,
|
|
266
|
-
dependencies,
|
|
267
|
-
optionalDependencies
|
|
268
|
-
};
|
|
269
|
-
});
|
|
270
|
-
return lf;
|
|
271
|
-
};
|
|
272
|
-
var format2 = (value) => {
|
|
273
|
-
const lf = preformat(value);
|
|
274
|
-
const lines = dump(lf, {
|
|
275
|
-
quotingType: '"',
|
|
276
|
-
flowLevel: -1,
|
|
277
|
-
lineWidth: -1,
|
|
278
|
-
forceQuotes: true
|
|
279
|
-
}).split("\n");
|
|
280
|
-
const _value = lines.map((line) => {
|
|
281
|
-
if (line.length !== 0 && line.charAt(0) !== " ") {
|
|
282
|
-
const chunks = line.slice(0, -1).replaceAll('"', "").split(", ").map((chunk) => chunk.startsWith("@") || chunk.includes(" ") ? `"${chunk}"` : chunk);
|
|
283
|
-
return `
|
|
284
|
-
${chunks.join(", ")}:`;
|
|
285
|
-
}
|
|
286
|
-
if (line.startsWith(" integrity")) {
|
|
287
|
-
const _line = line.replace(":", "");
|
|
288
|
-
return line.includes("= ") ? _line.replaceAll('"integrity"', "integrity") : _line.replaceAll('"', "");
|
|
289
|
-
}
|
|
290
|
-
if (line.endsWith("ependencies:")) {
|
|
291
|
-
return line;
|
|
292
|
-
}
|
|
293
|
-
return line.replace(":", "");
|
|
294
|
-
}, "").join("\n");
|
|
295
|
-
return `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
296
|
-
# yarn lockfile v1
|
|
297
|
-
|
|
298
|
-
${_value}`;
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
// src/main/ts/yarn-5.ts
|
|
302
|
-
import { load as load2, dump as dump2 } from "js-yaml";
|
|
303
|
-
var parse3 = async (lockfile, pkg) => {
|
|
304
|
-
const snapshot = {
|
|
305
|
-
entries: {},
|
|
306
|
-
workspaces: {},
|
|
307
|
-
format: "yarn-5"
|
|
308
|
-
};
|
|
309
|
-
const raw = load2(lockfile);
|
|
310
|
-
delete raw.__metadata;
|
|
311
|
-
Object.entries(raw).forEach((value) => {
|
|
312
|
-
const [_key, _entry] = value;
|
|
313
|
-
const chunks = _key.split(", ");
|
|
314
|
-
const ranges = chunks.map((r) => r.slice(r.lastIndexOf("@") + 1)).sort();
|
|
315
|
-
const { version, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution: source, bin, conditions } = _entry;
|
|
316
|
-
const name = chunks[0].slice(0, chunks[0].lastIndexOf("@"));
|
|
317
|
-
const key = `${name}@${version}`;
|
|
318
|
-
const hashes = parseIntegrity(checksum);
|
|
319
|
-
snapshot.entries[key] = {
|
|
320
|
-
name,
|
|
321
|
-
version,
|
|
322
|
-
ranges,
|
|
323
|
-
hashes,
|
|
324
|
-
dependencies,
|
|
325
|
-
dependenciesMeta,
|
|
326
|
-
optionalDependencies,
|
|
327
|
-
peerDependencies,
|
|
328
|
-
peerDependenciesMeta,
|
|
329
|
-
source,
|
|
330
|
-
bin,
|
|
331
|
-
conditions
|
|
332
|
-
};
|
|
333
|
-
});
|
|
334
|
-
return snapshot;
|
|
335
|
-
};
|
|
336
|
-
var preformat2 = (value) => {
|
|
337
|
-
const lf = {};
|
|
338
|
-
Object.values(value.entries).forEach((entry) => {
|
|
339
|
-
const { name, version, ranges, hashes: { checksum }, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, bin, conditions } = entry;
|
|
340
|
-
const key = ranges.map((r) => `${name}@${r}`).join(", ");
|
|
341
|
-
const isLocal = version === "0.0.0-use.local";
|
|
342
|
-
const languageName = isLocal ? "unknown" : "node";
|
|
343
|
-
const linkType = isLocal ? "soft" : "hard";
|
|
344
|
-
lf[key] = {
|
|
345
|
-
version,
|
|
346
|
-
resolution: source,
|
|
347
|
-
dependencies,
|
|
348
|
-
dependenciesMeta,
|
|
349
|
-
optionalDependencies,
|
|
350
|
-
peerDependencies,
|
|
351
|
-
peerDependenciesMeta,
|
|
352
|
-
bin,
|
|
353
|
-
checksum,
|
|
354
|
-
conditions,
|
|
355
|
-
languageName,
|
|
356
|
-
linkType
|
|
357
|
-
};
|
|
358
|
-
});
|
|
359
|
-
return lf;
|
|
360
|
-
};
|
|
361
|
-
var format3 = (value) => {
|
|
362
|
-
const lines = dump2({
|
|
363
|
-
__metadata: {
|
|
364
|
-
version: 5,
|
|
365
|
-
cacheKey: 8
|
|
366
|
-
},
|
|
367
|
-
...preformat2(value)
|
|
368
|
-
}, {
|
|
369
|
-
quotingType: '"',
|
|
370
|
-
flowLevel: -1,
|
|
371
|
-
lineWidth: -1,
|
|
372
|
-
forceQuotes: false
|
|
373
|
-
}).split("\n").map((line) => {
|
|
374
|
-
if (line === "__metadata:") {
|
|
375
|
-
return `
|
|
376
|
-
${line}`;
|
|
377
|
-
}
|
|
378
|
-
if (line.length !== 0 && line.charAt(0) !== " ") {
|
|
379
|
-
return `
|
|
380
|
-
"${line.replaceAll('"', "").slice(0, -1)}":`;
|
|
381
|
-
}
|
|
382
|
-
if (line.startsWith(" resolution: ")) {
|
|
383
|
-
return line.replaceAll('"', "").replace(" resolution: ", ' resolution: "').concat('"');
|
|
384
|
-
}
|
|
385
|
-
return line;
|
|
386
|
-
});
|
|
387
|
-
const _value = lines.join("\n");
|
|
388
|
-
return `# This file is generated by running "yarn install" inside your project.
|
|
389
|
-
# Manual changes might be lost - proceed with caution!
|
|
390
|
-
${_value}`;
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
// src/main/ts/common.ts
|
|
394
|
-
var getSources = (snapshot) => Object.values(snapshot.entries).map((entry) => entry.source).filter(Boolean);
|
|
395
|
-
|
|
396
|
-
// src/main/ts/index.ts
|
|
397
|
-
var foo = "bar";
|
|
398
|
-
export {
|
|
399
|
-
foo,
|
|
400
|
-
format as formatNpm1,
|
|
401
|
-
format2 as formatYarn1,
|
|
402
|
-
format3 as formatYarn5,
|
|
403
|
-
getSources,
|
|
404
|
-
parse as parseNpm1,
|
|
405
|
-
parse2 as parseYarn1,
|
|
406
|
-
parse3 as parseYarn5
|
|
407
|
-
};
|
|
408
|
-
//# sourceMappingURL=index.js.map
|
|
File without changes
|