@antongolub/lockfile 0.0.0-snapshot.40 → 0.0.0-snapshot.42
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 +31 -0
- package/package.json +4 -4
- package/target/cjs/index.cjs +53 -21
- package/target/cjs/vendor.cjs +8500 -0
- package/target/dts/interface.d.ts +2 -1
- package/target/dts/util.d.ts +2 -0
- package/target/dts/vendor.d.ts +3 -0
- package/target/esm/cli.mjs +2 -3
- package/target/esm/index.mjs +52 -22
- package/target/esm/vendor.mjs +8452 -0
package/README.md
CHANGED
|
@@ -165,6 +165,7 @@ export interface TSnapshotIndex {
|
|
|
165
165
|
name: string
|
|
166
166
|
version: string
|
|
167
167
|
entry: TEntry
|
|
168
|
+
depth: number // the lowest level where the dep@ver first time occurs
|
|
168
169
|
}>
|
|
169
170
|
prod: Set<TEntry>
|
|
170
171
|
getEntryId ({name, version}: TEntry): string
|
|
@@ -183,6 +184,36 @@ export interface TSnapshotIndex {
|
|
|
183
184
|
* pkg.json `resolutions` and `overrides` directives are completely ignored for now
|
|
184
185
|
* pkg aliases are not _fully_ supported yet [#2](https://github.com/antongolub/lockfile/issues/2#issuecomment-1786613893)
|
|
185
186
|
|
|
187
|
+
### Snippets
|
|
188
|
+
Extracts all deps by depth:
|
|
189
|
+
```ts
|
|
190
|
+
const getDepsByDepth = (idx: TSnapshotIndex, depth = 0) => Object.values(idx.tree)
|
|
191
|
+
.filter(({depth: d}) => d === depth)
|
|
192
|
+
.map(({entry}) => entry)
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Get the longest dep chain:
|
|
196
|
+
```ts
|
|
197
|
+
const getLongestChain = (): TEntry[] => {
|
|
198
|
+
let max = 0
|
|
199
|
+
let chain: TEntry[] = []
|
|
200
|
+
|
|
201
|
+
for (const e of Object.values(idx.tree)) {
|
|
202
|
+
if (e.depth > max) {
|
|
203
|
+
max = e.depth
|
|
204
|
+
chain = [...e.parents, e.entry]
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return chain
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
constole.log(
|
|
211
|
+
getLongestChain()
|
|
212
|
+
.map((e) => idx.getEntryId(e))
|
|
213
|
+
.join(' -> ')
|
|
214
|
+
)
|
|
215
|
+
```
|
|
216
|
+
|
|
186
217
|
### Inspired by
|
|
187
218
|
* [synp](https://github.com/imsnif/synp)
|
|
188
219
|
* [snyk-nodejs-lockfile-parser](https://github.com/snyk/nodejs-lockfile-parser)
|
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.42",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "concurrently 'npm:build:*'",
|
|
52
|
-
"build:bin": "node ./src/scripts/build.mjs --entry='./src/main/ts/cli.ts' --
|
|
53
|
-
"build:
|
|
54
|
-
"build:
|
|
52
|
+
"build:bin": "node ./src/scripts/build.mjs --entry='./src/main/ts/cli.ts' --bundle=none",
|
|
53
|
+
"build:vendor": "node ./src/scripts/build.mjs --entry='./src/main/ts/vendor.ts' --bundle=all --format='cjs,esm'",
|
|
54
|
+
"build:index": "node ./src/scripts/build.mjs --entry='./src/main/ts/index.ts' --bundle=src --format='cjs,esm' --external='./src/main/ts/vendor,node:*' --map='../../src/main/ts/vendor:./vendor,../src/main/ts/vendor:./vendor'",
|
|
55
55
|
"build:dts": "tsc --emitDeclarationOnly --skipLibCheck --outDir target/dts",
|
|
56
56
|
"test": "yarn test:unit",
|
|
57
57
|
"test:unit": "c8 -r lcov -r text -o target/coverage -x src/scripts -x src/test uvu -r tsm -i helpers 'src/test/ts/'",
|
package/target/cjs/index.cjs
CHANGED
|
@@ -187,6 +187,12 @@ var debug = Object.assign((...chunks) => {
|
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
189
|
});
|
|
190
|
+
var mergeDeps = (...deps) => {
|
|
191
|
+
const _deps = deps.filter(Boolean);
|
|
192
|
+
if (!_deps.length)
|
|
193
|
+
return;
|
|
194
|
+
return Object.assign({}, ..._deps);
|
|
195
|
+
};
|
|
190
196
|
var unique = (arr) => [...new Set(arr)];
|
|
191
197
|
|
|
192
198
|
// src/main/ts/analyze.ts
|
|
@@ -213,7 +219,8 @@ var walk = (ctx) => {
|
|
|
213
219
|
name: entry.name,
|
|
214
220
|
version: entry.version,
|
|
215
221
|
entry,
|
|
216
|
-
parents
|
|
222
|
+
parents,
|
|
223
|
+
depth
|
|
217
224
|
};
|
|
218
225
|
if ((_a = root.dependencies) == null ? void 0 : _a[chunks[1]]) {
|
|
219
226
|
idx.prod.add(entry);
|
|
@@ -676,7 +683,7 @@ var preformat3 = (idx) => {
|
|
|
676
683
|
var format3 = (snapshot) => JSON.stringify(preformat3(analyze(snapshot)), null, 2);
|
|
677
684
|
|
|
678
685
|
// src/main/ts/formats/yarn-classic.ts
|
|
679
|
-
var
|
|
686
|
+
var import_vendor = require("./vendor.cjs");
|
|
680
687
|
var kvEntryPattern = /^(\s+)"?([^"]+)"?\s"?([^"]+)"?$/;
|
|
681
688
|
var version4 = "yarn-classic";
|
|
682
689
|
var check4 = (value) => value.includes("# yarn lockfile v1");
|
|
@@ -695,28 +702,37 @@ var preparse = (value) => {
|
|
|
695
702
|
}
|
|
696
703
|
return line;
|
|
697
704
|
}, "").join("\n");
|
|
698
|
-
return (0,
|
|
705
|
+
return (0, import_vendor.yamlLoad)(_value);
|
|
699
706
|
};
|
|
700
|
-
var parse3 = (value,
|
|
701
|
-
const manifest = JSON.parse(
|
|
707
|
+
var parse3 = (value, ...pkgs) => {
|
|
708
|
+
const manifest = JSON.parse(pkgs[0]);
|
|
709
|
+
const manifests = Object.fromEntries(pkgs.map((p) => {
|
|
710
|
+
const manifest2 = JSON.parse(p);
|
|
711
|
+
return [manifest2.name, manifest2];
|
|
712
|
+
}));
|
|
702
713
|
const raw = preparse(value);
|
|
703
714
|
const snapshot = {};
|
|
704
715
|
Object.entries(raw).forEach((value2) => {
|
|
716
|
+
var _a, _b;
|
|
705
717
|
const [_key, _entry] = value2;
|
|
706
718
|
const { version: version6, integrity, dependencies, optionalDependencies, resolved } = _entry;
|
|
707
719
|
const hashes = parseIntegrity(integrity);
|
|
708
720
|
const source = parseResolution3(resolved);
|
|
709
721
|
const chunks = _key.split(", ");
|
|
710
722
|
const names = unique(chunks.map((c) => c.slice(0, c.indexOf("@", 1))));
|
|
723
|
+
const isLocal = version6 === "0.0.0-use.local";
|
|
711
724
|
for (const name of names) {
|
|
712
725
|
const ranges = chunks.filter((c) => c.startsWith(`${name}@`)).map((r) => r.slice(r.indexOf("@", 1) + 1)).sort();
|
|
713
726
|
const key = `${name}@${version6}`;
|
|
727
|
+
const _dependencies = isLocal && ((_a = manifests[name]) == null ? void 0 : _a.dependencies) || dependencies;
|
|
728
|
+
const _devDependencies = isLocal && ((_b = manifests[name]) == null ? void 0 : _b.devDependencies);
|
|
714
729
|
snapshot[key] = {
|
|
715
730
|
name,
|
|
716
731
|
version: version6,
|
|
717
732
|
ranges,
|
|
718
733
|
hashes,
|
|
719
|
-
dependencies,
|
|
734
|
+
dependencies: _dependencies,
|
|
735
|
+
devDependencies: _devDependencies,
|
|
720
736
|
optionalDependencies,
|
|
721
737
|
source
|
|
722
738
|
};
|
|
@@ -744,7 +760,7 @@ var preformat4 = (idx) => {
|
|
|
744
760
|
const lf = {};
|
|
745
761
|
const rangemap = {};
|
|
746
762
|
Object.values(snapshot).forEach((entry) => {
|
|
747
|
-
const { name, version: version6, ranges, hashes, dependencies, optionalDependencies, source } = entry;
|
|
763
|
+
const { name, version: version6, ranges, hashes, devDependencies, dependencies, optionalDependencies, source } = entry;
|
|
748
764
|
const resolved = formatResolution3(source);
|
|
749
765
|
const alias = rangemap[resolved];
|
|
750
766
|
const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(" ");
|
|
@@ -755,12 +771,15 @@ var preformat4 = (idx) => {
|
|
|
755
771
|
delete lf[alias.key];
|
|
756
772
|
}
|
|
757
773
|
const key = keys.join(", ");
|
|
774
|
+
const _dependencies = mergeDeps(dependencies, devDependencies);
|
|
775
|
+
if (_dependencies)
|
|
776
|
+
sortObject(_dependencies);
|
|
758
777
|
rangemap[resolved] = { keys, key, name };
|
|
759
778
|
lf[key] = {
|
|
760
779
|
version: version6,
|
|
761
780
|
resolved,
|
|
762
781
|
integrity,
|
|
763
|
-
dependencies,
|
|
782
|
+
dependencies: _dependencies,
|
|
764
783
|
optionalDependencies
|
|
765
784
|
};
|
|
766
785
|
});
|
|
@@ -769,7 +788,7 @@ var preformat4 = (idx) => {
|
|
|
769
788
|
};
|
|
770
789
|
var format4 = (snapshot) => {
|
|
771
790
|
const lf = preformat4({ snapshot });
|
|
772
|
-
const lines = (0,
|
|
791
|
+
const lines = (0, import_vendor.yamlDump)(lf, {
|
|
773
792
|
quotingType: '"',
|
|
774
793
|
flowLevel: -1,
|
|
775
794
|
lineWidth: -1,
|
|
@@ -817,21 +836,29 @@ var formatResolution3 = ({ type, id, name = "", registry = "https://registry.yar
|
|
|
817
836
|
};
|
|
818
837
|
|
|
819
838
|
// src/main/ts/formats/yarn-berry.ts
|
|
820
|
-
var
|
|
839
|
+
var import_vendor2 = require("./vendor.cjs");
|
|
821
840
|
var version5 = "yarn-berry";
|
|
822
841
|
var check5 = (value) => value.includes(`
|
|
823
842
|
__metadata:
|
|
824
843
|
version:`);
|
|
825
|
-
var parse4 = (lockfile,
|
|
826
|
-
const manifest = JSON.parse(
|
|
844
|
+
var parse4 = (lockfile, ...pkgs) => {
|
|
845
|
+
const manifest = JSON.parse(pkgs[0]);
|
|
846
|
+
const manifests = Object.fromEntries(pkgs.map((p) => {
|
|
847
|
+
const manifest2 = JSON.parse(p);
|
|
848
|
+
return [manifest2.name, manifest2];
|
|
849
|
+
}));
|
|
827
850
|
const snapshot = {};
|
|
828
|
-
const raw = (0,
|
|
851
|
+
const raw = (0, import_vendor2.yamlLoad)(lockfile);
|
|
829
852
|
delete raw.__metadata;
|
|
830
853
|
Object.entries(raw).forEach((value) => {
|
|
854
|
+
var _a, _b;
|
|
831
855
|
const [_key, _entry] = value;
|
|
832
856
|
const { version: version6, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution, bin, conditions } = _entry;
|
|
833
857
|
const chunks = _key.split(", ");
|
|
834
858
|
const names = unique(chunks.map((c) => c.slice(0, c.indexOf("@", 1))));
|
|
859
|
+
const isLocal = version6 === "0.0.0-use.local";
|
|
860
|
+
const hashes = parseIntegrity(checksum);
|
|
861
|
+
const source = parseResolution4(resolution);
|
|
835
862
|
for (const name of names) {
|
|
836
863
|
const key = `${name}@${version6}`;
|
|
837
864
|
if (_key.includes("#")) {
|
|
@@ -843,15 +870,16 @@ var parse4 = (lockfile, pkg) => {
|
|
|
843
870
|
return;
|
|
844
871
|
}
|
|
845
872
|
const ranges = chunks.filter((c) => c.startsWith(`${name}@`)).map((r) => r.slice(r.indexOf("@", 1) + 1)).map(normalizeReference);
|
|
846
|
-
const
|
|
847
|
-
const
|
|
873
|
+
const _dependencies = normalizeDeps(isLocal && ((_a = manifests[name]) == null ? void 0 : _a.dependencies) || dependencies);
|
|
874
|
+
const _devDependencies = normalizeDeps(isLocal && ((_b = manifests[name]) == null ? void 0 : _b.devDependencies));
|
|
848
875
|
snapshot[key] = {
|
|
849
876
|
name,
|
|
850
877
|
version: version6,
|
|
851
878
|
ranges,
|
|
852
879
|
hashes,
|
|
853
880
|
source,
|
|
854
|
-
dependencies:
|
|
881
|
+
dependencies: _dependencies,
|
|
882
|
+
devDependencies: _devDependencies,
|
|
855
883
|
dependenciesMeta,
|
|
856
884
|
optionalDependencies: normalizeDeps(optionalDependencies),
|
|
857
885
|
peerDependencies: normalizeDeps(peerDependencies),
|
|
@@ -880,12 +908,13 @@ var parse4 = (lockfile, pkg) => {
|
|
|
880
908
|
debug.json("yarn-berry-snapshot.json", snapshot);
|
|
881
909
|
return snapshot;
|
|
882
910
|
};
|
|
883
|
-
var preformat5 = (idx) => {
|
|
911
|
+
var preformat5 = (idx, { __metadata } = {}) => {
|
|
884
912
|
const { snapshot } = idx;
|
|
885
913
|
const lf = {};
|
|
886
914
|
const rangemap = {};
|
|
915
|
+
const isYarn4 = (__metadata == null ? void 0 : __metadata.version) >= 7;
|
|
887
916
|
Object.values(snapshot).forEach((entry) => {
|
|
888
|
-
const { name, version: version6, ranges, hashes: { checksum }, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry;
|
|
917
|
+
const { name, version: version6, ranges, hashes: { checksum }, devDependencies, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry;
|
|
889
918
|
const resolution = formatResolution4(source);
|
|
890
919
|
const alias = rangemap[resolution];
|
|
891
920
|
const isLocal = version6 === "0.0.0-use.local";
|
|
@@ -898,11 +927,14 @@ var preformat5 = (idx) => {
|
|
|
898
927
|
delete lf[alias.key];
|
|
899
928
|
}
|
|
900
929
|
const key = keys.join(", ");
|
|
930
|
+
const _dependencies = mergeDeps(dependencies, devDependencies);
|
|
931
|
+
if (_dependencies)
|
|
932
|
+
sortObject(_dependencies);
|
|
901
933
|
rangemap[resolution] = { keys, key, name };
|
|
902
934
|
lf[key] = {
|
|
903
935
|
version: version6,
|
|
904
936
|
resolution,
|
|
905
|
-
dependencies: formatDeps(
|
|
937
|
+
dependencies: formatDeps(_dependencies, { semverAsNpm: isYarn4, isLocal: !isLocal }),
|
|
906
938
|
optionalDependencies: formatDeps(optionalDependencies),
|
|
907
939
|
peerDependencies: formatDeps(peerDependencies),
|
|
908
940
|
dependenciesMeta,
|
|
@@ -927,9 +959,9 @@ var format5 = (snapshot, { __metadata = {
|
|
|
927
959
|
version: 5,
|
|
928
960
|
cacheKey: 8
|
|
929
961
|
} } = {}) => {
|
|
930
|
-
const lines = (0,
|
|
962
|
+
const lines = (0, import_vendor2.yamlDump)(__spreadValues({
|
|
931
963
|
__metadata
|
|
932
|
-
}, preformat5({ snapshot })), {
|
|
964
|
+
}, preformat5({ snapshot }, { __metadata })), {
|
|
933
965
|
quotingType: '"',
|
|
934
966
|
flowLevel: -1,
|
|
935
967
|
lineWidth: -1,
|