@antongolub/lockfile 0.0.0-snapshot.8 → 0.0.0-snapshot.9

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 CHANGED
@@ -20,6 +20,23 @@ yarn add @antongolub/lockfile
20
20
  ```
21
21
 
22
22
  ## Usage
23
+ tl;dr
24
+ ```ts
25
+ import fs from 'fs/promises'
26
+ import {parse, analyze} from '@antongolub/lockfile'
27
+
28
+ const lf = await fs.readFile('yarn.lock', 'utf-8')
29
+ const pkg = await fs.readFile('package.json', 'utf-8')
30
+
31
+ const snapshot = parse(lf, pkg)
32
+ const idx = analyze(snapshot)
33
+
34
+ // idx.entries
35
+ // idx.prod
36
+ // idx.edges
37
+ ```
38
+
39
+ ### API
23
40
  ```ts
24
41
  import { parse, format, analyze } from '@antongolub/lockfile'
25
42
 
@@ -83,13 +100,14 @@ export type TSnapshot = Record<string, {
83
100
  md5?: string
84
101
  }
85
102
  source: string
86
- sourceType: TSourceType
103
+ sourceType: TSourceType // npm, workspace, gh, patch, etc
87
104
 
88
105
  // optional pm-specific lockfile meta
89
106
  manifest?: TManifest
90
107
  conditions?: string
91
108
  dependencies?: TDependencies
92
109
  dependenciesMeta?: TDependenciesMeta
110
+ devDependencies?: TDependencies
93
111
  optionalDependencies?: TDependencies
94
112
  peerDependencies?: TDependencies
95
113
  peerDependenciesMeta?: TDependenciesMeta
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antongolub/lockfile",
3
- "version": "0.0.0-snapshot.8",
3
+ "version": "0.0.0-snapshot.9",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -96,7 +96,7 @@ var walk = (ctx) => {
96
96
  var getId = (name, version6 = "") => name ? `${name}@${version6}` : "";
97
97
  var analyze = (snapshot) => {
98
98
  const entries = Object.values(snapshot);
99
- const workspaces = entries.filter((e) => e.sourceType === "workspace");
99
+ const workspaces = entries.filter((e) => e.sourceType === "workspace" && e.source !== ".");
100
100
  const roots = [snapshot[""], ...workspaces];
101
101
  const prod = new Set(roots);
102
102
  const deps = /* @__PURE__ */ new Map();
@@ -559,13 +559,23 @@ var check5 = (value) => value.includes(`
559
559
  __metadata:
560
560
  version:`);
561
561
  var parseResolution = (resolution) => {
562
- const ref = resolution.slice(resolution.lastIndexOf("@") + 1);
563
- const colonPos = ref.indexOf(":");
564
- const sourceType = ref.slice(0, colonPos);
565
- const source = ref.slice(colonPos + 1);
566
- return { source, sourceType };
562
+ const colonPos = resolution.indexOf(":");
563
+ const atPos = resolution.indexOf("@", 1);
564
+ const name = resolution.slice(0, atPos);
565
+ if (colonPos === -1) {
566
+ return {
567
+ name,
568
+ source: resolution.slice(atPos + 1),
569
+ sourceType: "npm"
570
+ };
571
+ }
572
+ return {
573
+ name,
574
+ source: resolution.slice(colonPos + 1),
575
+ sourceType: resolution.slice(atPos + 1, colonPos)
576
+ };
567
577
  };
568
- var formatResolution = (name, source, sourceType = "npm") => `${name}@${sourceType}:${source}`;
578
+ var formatResolution = (name, source, sourceType = "npm") => `${name}@${sourceType === "semver" ? "" : sourceType + ":"}${source}`;
569
579
  var parse4 = (lockfile, pkg) => {
570
580
  const manifest = JSON.parse(pkg);
571
581
  const snapshot = {};
@@ -573,13 +583,22 @@ var parse4 = (lockfile, pkg) => {
573
583
  delete raw.__metadata;
574
584
  Object.entries(raw).forEach((value) => {
575
585
  const [_key, _entry] = value;
576
- const chunks = _key.split(", ");
577
- const ranges = chunks.map((r) => r.slice(r.lastIndexOf("@") + 1)).sort();
578
586
  const { version: version6, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution, bin, conditions } = _entry;
579
- const name = chunks[0].slice(0, chunks[0].lastIndexOf("@"));
587
+ const chunks = _key.split(", ");
588
+ const refs = chunks.map(parseResolution);
589
+ const name = refs[0].name;
580
590
  const key = `${name}@${version6}`;
581
- const hashes = parseIntegrity(checksum);
591
+ if (_key.includes("#")) {
592
+ snapshot[key].patch = {
593
+ resolution,
594
+ refs: chunks,
595
+ checksum
596
+ };
597
+ return;
598
+ }
599
+ const ranges = refs.map((r) => r.source).sort();
582
600
  const { sourceType, source } = parseResolution(resolution);
601
+ const hashes = parseIntegrity(checksum);
583
602
  snapshot[key] = {
584
603
  name,
585
604
  version: version6,
@@ -595,6 +614,8 @@ var parse4 = (lockfile, pkg) => {
595
614
  bin,
596
615
  conditions
597
616
  };
617
+ if (sourceType === "workspace") {
618
+ }
598
619
  });
599
620
  snapshot[""] = {
600
621
  name: manifest.name,
@@ -602,7 +623,8 @@ var parse4 = (lockfile, pkg) => {
602
623
  ranges: [],
603
624
  hashes: {},
604
625
  manifest,
605
- dependencies: manifest.dependencies
626
+ dependencies: manifest.dependencies,
627
+ devDependencies: manifest.devDependencies
606
628
  };
607
629
  return snapshot;
608
630
  };
@@ -610,11 +632,11 @@ var preformat5 = (idx) => {
610
632
  const { snapshot } = idx;
611
633
  const lf = {};
612
634
  Object.values(snapshot).forEach((entry) => {
613
- const { name, version: version6, ranges, hashes: { checksum }, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, sourceType, bin, conditions } = entry;
614
- const key = ranges.map((r) => `${name}@${r}`).join(", ");
635
+ const { name, version: version6, ranges, hashes: { checksum }, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, sourceType, patch, bin, conditions } = entry;
615
636
  const isLocal = version6 === "0.0.0-use.local";
616
637
  const languageName = isLocal ? "unknown" : "node";
617
638
  const linkType = isLocal ? "soft" : "hard";
639
+ const key = ranges.map((r) => formatResolution(name, r, sourceType === "workspace" ? r === "." || r.includes("/") ? "workspace" : "semver" : "npm")).join(", ");
618
640
  lf[key] = {
619
641
  version: version6,
620
642
  resolution: formatResolution(name, source, sourceType),
@@ -629,9 +651,25 @@ var preformat5 = (idx) => {
629
651
  languageName,
630
652
  linkType
631
653
  };
654
+ if (patch) {
655
+ lf[patch.refs.join(", ")] = {
656
+ version: version6,
657
+ resolution: patch.resolution,
658
+ dependencies,
659
+ dependenciesMeta,
660
+ optionalDependencies,
661
+ peerDependencies,
662
+ peerDependenciesMeta,
663
+ bin,
664
+ checksum: patch.checksum,
665
+ conditions,
666
+ languageName,
667
+ linkType
668
+ };
669
+ }
632
670
  });
633
671
  delete lf[""];
634
- return lf;
672
+ return sortObject(lf);
635
673
  };
636
674
  var format5 = (snapshot, { __metadata = {
637
675
  version: 5,
@@ -644,7 +682,8 @@ var format5 = (snapshot, { __metadata = {
644
682
  quotingType: '"',
645
683
  flowLevel: -1,
646
684
  lineWidth: -1,
647
- forceQuotes: false
685
+ forceQuotes: false,
686
+ noRefs: true
648
687
  }).split("\n").map((line) => {
649
688
  if (line === "__metadata:") {
650
689
  return `
@@ -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\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 as string)\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.findEntry(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 workspaces = entries.filter(e => e.sourceType === 'workspace')\n const roots = [snapshot[\"\"], ...workspaces]\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.getDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\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 findEntry (name: string, range: string) {\n return entries.find(({name: _name, ranges}) => name === _name && ranges.includes(range))\n }\n }\n\n const now = Date.now()\n roots.forEach((root, i) => walk({root, idx, id: i === 0 ? '' : undefined}))\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n console.log('!!!', Date.now()- now, roots.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, getDeps} 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 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 })\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.getDeps(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\n", "import {ICheck, IFormat, IPreformat, THashes, TEntry, TManifest, TSnapshot} from '../interface'\nimport {formatTarballUrl, parseIntegrity} from '../common'\nimport {sortObject, debugAsJson} from '../util'\nimport {analyze, 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 ? 'workspace' : 'semver'\n if (sourceType === 'workspace' && !pkg.name){\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\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 if (entries[id]) {\n return entries[id]\n }\n\n const dependencies = sortObject({...pkg.dependencies, ...pkg.devDependencies, ...pkg.optionalDependencies})\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source: pkg.resolved,\n sourceType,\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>(dependencies).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.sourceType === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debugAsJson('tree.json', nmtree)\n\n const formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject({\n \"\": manifest as TNpm3LockfileEntry,\n ...Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.sourceType === 'workspace') {\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source as string,\n link: true\n }\n\n m[entry.source 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 (!manifest.dependencies?.[parent]) {\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} 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: source } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(integrity)\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 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 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'\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): {source: string, sourceType: TSourceType} => {\n const ref = resolution.slice(resolution.lastIndexOf('@') + 1)\n const colonPos = ref.indexOf(':')\n const sourceType = ref.slice(0, colonPos) as TSourceType\n const source = ref.slice(colonPos + 1)\n\n return {source, sourceType}\n}\n\nconst formatResolution = (name: string, source: string, sourceType: TSourceType = 'npm'): string => `${name}@${sourceType}:${source}`\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const manifest = JSON.parse(pkg)\n const snapshot: TSnapshot = {}\n\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 chunks = _key.split(', ')\n const ranges = chunks.map(r => r.slice(r.lastIndexOf('@') + 1)).sort()\n const { version, checksum, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, resolution, bin, conditions } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(checksum)\n const {sourceType, source} = parseResolution(resolution)\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n sourceType,\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n conditions,\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n manifest,\n dependencies: manifest.dependencies\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, sourceType, bin, conditions } = entry\n const key = ranges.map(r => `${name}@${r}`).join(', ')\n const isLocal = version === '0.0.0-use.local'\n const languageName = isLocal ? 'unknown' : 'node'\n const linkType = isLocal ? 'soft' : 'hard'\n\n lf[key] = {\n version,\n resolution: formatResolution(name, source as string, sourceType),\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\n delete lf[\"\"]\n\n return 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 })\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\":') && input.includes('\"version\":')\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\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 as string)\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.findEntry(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 workspaces = entries.filter(e => e.sourceType === 'workspace' && e.source !== '.')\n const roots = [snapshot[\"\"], ...workspaces]\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.getDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\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 findEntry (name: string, range: string) {\n return entries.find(({name: _name, ranges}) => name === _name && ranges.includes(range))\n }\n }\n\n const now = Date.now()\n roots.forEach((root, i) => walk({root, idx, id: i === 0 ? '' : undefined}))\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n console.log('!!!', Date.now()- now, roots.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, getDeps} 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 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 })\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.getDeps(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\n", "import {ICheck, IFormat, IPreformat, THashes, TEntry, TManifest, TSnapshot} from '../interface'\nimport {formatTarballUrl, parseIntegrity} from '../common'\nimport {sortObject, debugAsJson} from '../util'\nimport {analyze, 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 ? 'workspace' : 'semver'\n if (sourceType === 'workspace' && !pkg.name){\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\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 if (entries[id]) {\n return entries[id]\n }\n\n const dependencies = sortObject({...pkg.dependencies, ...pkg.devDependencies, ...pkg.optionalDependencies})\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source: pkg.resolved,\n sourceType,\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>(dependencies).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.sourceType === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debugAsJson('tree.json', nmtree)\n\n const formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject({\n \"\": manifest as TNpm3LockfileEntry,\n ...Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.sourceType === 'workspace') {\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source as string,\n link: true\n }\n\n m[entry.source 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 (!manifest.dependencies?.[parent]) {\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} 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: source } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(integrity)\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 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 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): {source: 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 source: resolution.slice(atPos + 1),\n sourceType: 'npm'\n }\n }\n return {\n name,\n source: 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\n const ranges = refs.map(r => r.source).sort()\n const {sourceType, source} = parseResolution(resolution)\n const hashes = parseIntegrity(checksum)\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n sourceType,\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 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, sourceType, 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, sourceType === 'workspace' ? ((r === '.' || r.includes('/')) ? 'workspace' : 'semver'): 'npm')).join(', ')\n\n lf[key] = {\n version,\n resolution: formatResolution(name, source as string, sourceType),\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 version,\n resolution: patch.resolution,\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n bin,\n checksum: patch.checksum,\n conditions,\n languageName,\n linkType,\n }\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\":') && input.includes('\"version\":')\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", "parents", "semver", "version", "check", "parse", "entries", "variants", "path", "preformat", "formatIntegrity", "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
  }
@@ -1,4 +1,4 @@
1
- export type TSourceType = 'npm' | 'gh' | 'file' | 'workspace' | 'semver';
1
+ export type TSourceType = 'npm' | 'gh' | 'file' | 'workspace' | 'semver' | 'patch';
2
2
  export type TDependencies = Record<string, string>;
3
3
  export type TDependenciesMeta = Record<string, {
4
4
  optional: boolean;
@@ -29,6 +29,11 @@ export interface TEntry {
29
29
  engines?: Record<string, string>;
30
30
  funding?: Record<string, string>;
31
31
  license?: string;
32
+ patch?: {
33
+ resolution: string;
34
+ refs: string[];
35
+ checksum: string;
36
+ };
32
37
  }
33
38
  export interface TManifest {
34
39
  name: string;