@antongolub/lockfile 0.0.0-snapshot.21 → 0.0.0-snapshot.22

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antongolub/lockfile",
3
- "version": "0.0.0-snapshot.21",
3
+ "version": "0.0.0-snapshot.22",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -190,7 +190,7 @@ var analyze = (snapshot) => {
190
190
  return rangeMap.get(key);
191
191
  }
192
192
  const _ranges = [range, range.replace("semver:", "npm:"), range.replace("npm:", "semver:")];
193
- const found = entries.find(({ name: _name, ranges }) => name === _name && _ranges.some(ranges.includes.bind(ranges)));
193
+ const found = entries.find(({ name: _name, ranges }) => name === _name && _ranges.some((r) => ranges.includes(r)));
194
194
  rangeMap.set(key, found);
195
195
  return found;
196
196
  },
@@ -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 {URL} from 'node:url'\nimport {IFormatReference, TDependencies, THashes, TSnapshot, TSource} from './interface'\n\nexport const getSources = (snapshot: TSnapshot): string[] =>\n Object.values(snapshot)\n .map(entry => entry.source.id)\n .filter(Boolean)\n\nexport const parseIntegrity = (integrity?: string): THashes =>\n integrity\n ? integrity.split(' ').reduce<THashes>((m, item) => {\n const [k, v] = item.split('-')\n if (k === 'sha512' || k === 'sha256' || k === 'sha1' || k === 'checksum') {\n m[k] = v\n } else if (!v){\n m['checksum'] = k\n }\n\n return m\n }, {})\n : {}\n\nexport const formatIntegrity = (hashes: THashes): string => {\n const checksum = hashes['checksum']\n if (checksum) {\n return checksum\n }\n\n return Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n}\n\nexport interface IReference {\n protocol: string\n id: string\n name?: string\n host?: string\n [extra: string]: any\n}\n\nconst parseVersion = (version: string): string | null => semver.valid(version) || semver.coerce(version)?.version || null\n\nconst parseCaret = (value: string): string => (value.startsWith('^') || value.startsWith('~')) ? value[0] : ''\n\nconst parseName = (value: string): string => (value).slice(0, (value + '.').indexOf('.'))\n\nexport const parseTarballUrl = (resolution: string): TSource | null => {\n // https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d\n // https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz\n // Use regexp or URL to parse? A benchmark is needed.\n const [tgz, br, _name, org, ...rest] = resolution.split('/').reverse()\n if (br !== '-') {\n return null\n }\n\n const hasScope = org[0] === '@'\n const name = hasScope ? `${org}/${_name}` : _name\n const id = tgz.slice(_name.length + 1, tgz.lastIndexOf('.tgz'))\n\n return {\n type: 'npm',\n name,\n id,\n registry: rest.reverse().join('/') + (hasScope ? '' : '/' + org),\n hash: tgz.slice((tgz + '#').indexOf('#'))\n }\n}\n\nexport const formatTarballUrl = (name: string, version: string, registry = 'https://registry.npmjs.org', hash = '') =>\n `${registry}/${name}/-/${name.slice(name.indexOf('/') + 1)}-${version}.tgz${hash}`\n\n\n// https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies\n// https://v3.yarnpkg.com/features/protocols\nconst gitProtocols = ['git', 'git+ssh', 'git+http', 'git+https', 'git+file']\nconst refProtocols = ['npm', 'github', 'workspace', 'semver', 'tag', 'patch', 'link', 'portal', 'file', ...gitProtocols]\n\nexport const normalizeDeps = (deps?: TDependencies): TDependencies | undefined => processDeps(deps, normalizeReference)\n\nexport const processDeps = (deps?: TDependencies, formatter: IFormatReference = v => v, opts: any = {}): TDependencies | undefined => deps && Object.entries(deps).reduce<TDependencies>((m, [k, v]) => {\n m[k] = formatter(v + '', opts) as string\n return m\n}, {})\n\nexport const normalizeReference = (ref: string): string => {\n if (refProtocols.some(p => ref.startsWith(p + ':'))) {\n return ref\n }\n\n if (semver.validRange(ref)) {\n return 'semver:' + ref\n }\n\n if (ref.includes('.git')) {\n return 'git:' + ref\n }\n\n if (ref.includes('/')) {\n return 'github:' + ref\n }\n\n return 'tag:' + ref\n // throw new TypeError(`unsupported ref type: ${ref}`)\n}\n\nexport const parseReference = (raw?: any): IReference => {\n if (raw.startsWith('workspace:')) {\n return {\n protocol: 'workspace',\n id: raw.slice(10)\n }\n }\n\n if (raw.startsWith('npm:')) {\n return {\n protocol: 'npm',\n id: raw.slice(4)\n }\n }\n\n if (URL.canParse(raw)) {\n const url = new URL(raw)\n return {\n protocol: url.protocol.slice(0, -1),\n name: parseName(url.pathname.startsWith('/') ? url.pathname.slice(1) : url.pathname),\n id: url.hash.slice(1),\n host: url.host\n }\n }\n\n if (raw.includes('/') && !raw.includes(':')) { // use regexp?\n const name = raw.slice(0, (raw + '#').indexOf('#'))\n return {\n protocol: 'github',\n name,\n id: raw.slice(name.length + 1)\n }\n }\n\n return {\n protocol: 'semver',\n id: raw,\n }\n}\n\nexport const referenceKeysSorter = (a: string, b: string) => {\n const _a = a.includes('npm:')\n const _b = b.includes('npm:')\n return _a === _b\n ? 0\n : +_b - +_a\n}\n\nexport const mapReference = (current: string, targetProtocol: string, strategy = 'inherit'): string => {\n const {id, protocol} = parseReference(current)\n const version = parseVersion(id)\n const caret = parseCaret(id)\n const prefix = targetProtocol === 'semver' ? '' : `${targetProtocol}:`\n\n if (protocol === targetProtocol) {\n return current\n }\n\n if (version === null) {\n return prefix + '*'\n }\n\n const _version = strategy === 'pin'\n ? version\n : strategy === 'inherit'\n ? (caret + version)\n : strategy\n\n return prefix + _version\n}\n\n/**\n * Replaces local monorepo cross-refs with the target protocol: workspace or semver\n */\nexport const switchMonorefs = async ({cwd, strategy, protocol = 'semver', dryrun = false}: {\n cwd?: string\n strategy?: string // 'inherit' | 'pin' | 'coerce'\n protocol?: string\n dryrun?: boolean\n}) => {\n const {packages} = await topo({cwd})\n\n await Promise.all(Object.values(packages).map(async pkg => {\n await traverseDeps({pkg, packages, cb({name, version, deps}) {\n deps[name] = mapReference(version, protocol, strategy)\n }})\n\n if (dryrun) {\n return\n }\n\n await fs.writeFile(pkg.manifestAbsPath, JSON.stringify(pkg.manifest), 'utf8')\n }))\n\n return packages\n}\n", "import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport * as process from 'node:process'\n\nexport const sortObject = <T extends Record<string, any>>(\n unordered: T,\n predicate: (a: [string, any], b: [string, any]) => number = ([a], [b]) => a > b ? 1 : -1 // This is actually what npm does\n): T =>\n Object.entries({...unordered})\n .sort(predicate)\n .reduce((obj, [key, value]: [keyof T, T[keyof T]]) => {\n obj[key] = value\n return obj\n },\n flushObject(unordered) as T,\n )\n\nexport const flushObject = (obj: Record<string, any>) => {\n for (const key in obj) {\n delete obj[key]\n }\n\n return obj\n}\n\nexport const loadContents = async (value: string): Promise<string> =>\n value.includes('\\n')\n ? value\n : fs.readFile(value, 'utf-8')\n\nexport const debug = Object.assign((...chunks: any[]) => {\n if (!debug.enable) return\n\n console.log(...chunks)\n}, {\n enable: process.env.DEBUG,\n json(data: any, name: any = `debug-${Math.random().toString(16).slice(2)}.json`, base = path.resolve(process.cwd(), 'temp')) {\n if (!this.enable) return\n\n if (typeof data === 'string') {\n this.json(name, data)\n return\n }\n\n const _data = typeof data === 'function' ? data() : data\n\n fs.writeFile(path.resolve(base, name), JSON.stringify(_data, null, 2))\n }\n})\n\nexport const unique = (arr: string[]): string[] => [...new Set(arr)]\n", "import {TEntry, TSnapshot, TSnapshotIndex} from './interface'\nimport {debug, sortObject} from './util'\n\nexport const getDeps = (entry: TEntry): Record<string, string> => {\n if (!getDeps.cache.has(entry)) {\n getDeps.cache.set(entry, {\n ...sortObject(entry.dependencies || {}),\n ...sortObject({...entry.devDependencies, ...entry.optionalDependencies})\n })\n }\n\n return getDeps.cache.get(entry) as Record<string, string>\n}\n\ngetDeps.cache = new WeakMap<TEntry, Record<string, string>>()\n\ntype TWalkCtx = {\n root: TEntry,\n entry?: TEntry\n idx: TSnapshotIndex\n id?: string\n prefix?: string\n depth?: number\n parentId?: string\n parents?: TEntry[]\n}\n\nconst walk = (ctx: TWalkCtx) => {\n const {root, entry = root, prefix, depth = 0, parentId, idx, id = idx.getEntryId(entry), parents = []} = ctx\n const key = (prefix ? prefix + ',' : '') + entry.name\n\n if (id === undefined) {\n throw new TypeError(`Invalid snapshot: ${key}`)\n }\n\n if (!idx.tree[key]) {\n const chunks = key.split(',')\n idx.tree[key] = {\n key,\n chunks,\n id,\n name: entry.name,\n version: entry.version,\n entry,\n parents\n }\n if (root.dependencies?.[chunks[1]]) {\n idx.prod.add(entry)\n }\n if (parentId !== undefined) {\n idx.edges.push([parentId, id])\n return\n }\n if (depth) {\n return\n }\n }\n\n const stack: any[] = []\n const dependencies = getDeps(entry)\n\n Object.entries(dependencies).forEach(([name, range]) => {\n const _entry = idx.getEntryByRange(name, range)\n if (!_entry) {\n throw new Error(`inconsistent snapshot: ${name} ${range}`)\n }\n idx.bound(entry, _entry)\n if (parents.includes(entry)) {\n return\n }\n const _ctx: TWalkCtx = {root, entry: _entry, prefix: key, depth: depth + 1, parentId: id, idx, parents: [...parents, entry]}\n stack.push(_ctx)\n walk(_ctx)\n })\n\n stack.forEach(walk)\n}\n\nexport const getId = (name?: string, version: string = ''): string => name\n ? `${name}@${version}`\n : ''\n\nexport const analyze = (snapshot: TSnapshot): TSnapshotIndex => {\n const entries: TEntry[] = Object.values(snapshot)\n const roots = entries.filter(e => e.source.type === 'workspace')\n const prod = new Set(roots)\n const deps = new Map()\n const edges: [string, string][] = []\n const tree: TSnapshotIndex['tree'] = {}\n const rangeMap = new Map()\n const idx: TSnapshotIndex = {\n snapshot,\n roots,\n edges,\n tree,\n prod,\n entries,\n bound(from: TEntry, to: TEntry) {\n const deps = this.getEntryDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getEntryId ({name, version}: TEntry): string {\n return getId(name, version)\n },\n getEntry (name: string, version?: string) {\n return snapshot[name] || snapshot[getId(name, version)]\n },\n getEntryByRange (name: string, range: string) {\n const key = getId(name, range)\n if (rangeMap.has(key)) {\n return rangeMap.get(key)\n }\n\n const _ranges = [range, range.replace('semver:', 'npm:'), range.replace('npm:', 'semver:')]\n const found = entries.find(({name: _name, ranges}) => name === _name && _ranges.some(ranges.includes.bind(ranges)))\n rangeMap.set(key, found)\n return found\n },\n getEntryDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\n }\n }\n\n const now = Date.now()\n roots.forEach((root) => {\n const isRoot = root.source.id === '.'\n // exclude pseudo root\n if (isRoot && !root.manifest) return\n walk({root, idx, id: isRoot ? '' : undefined})\n })\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n debug('analyze duration=', Date.now() - now, 'deptree size=', Object.keys(tree).length)\n debug.json('deptree.json', Object.values(tree).map(({parents, name}) => [...parents.map(p=> p.name).slice(1), name].join(',')))\n\n return idx\n}\n", "import {\n ICheck,\n IFormat,\n IParse, IPreformat,\n TDependencies,\n THashes,\n TEntry,\n TManifest,\n TSnapshot,\n IParseResolution,\n IFormatResolution,\n TResolution,\n} from '../interface'\nimport {debug, sortObject} from '../util'\nimport {parseIntegrity, formatTarballUrl, parseTarballUrl} from '../common'\nimport {analyze} from '../analyze'\n\nexport const version = 'npm-1'\n\nexport type TNpm1LockfileEntry = {\n version: string\n resolved: string\n integrity: string\n dev?: boolean\n requires?: Record<string, string>\n dependencies?: TNpm1LockfileDeps\n}\n\nexport type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>\n\nexport type TNpm1Lockfile = {\n lockfileVersion: 1\n name: string\n version: string\n requires?: true\n dependencies: TNpm1LockfileDeps\n}\n\ninterface TDepTree {\n dependencies?: Record<string, TDepTree>\n version: string\n requires?: any\n}\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 1')\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const lf: TNpm1Lockfile = JSON.parse(lockfile)\n const manifest: TManifest = JSON.parse(pkg)\n const snapshot: Record<string, TEntry> = {\n \"\": {\n name: manifest.name,\n version: manifest.version,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n ranges: [],\n manifest,\n }\n }\n const getClosestVersion = (name: string, ...deps: TNpm1LockfileDeps[]): string =>\n deps.find((dep) => dep[name])?.[name]?.version as string\n\n const upsertEntry = (name: string, version: string, data: Partial<TEntry> = {}): TEntry => {\n const key = `${name}@${version}`\n if (!snapshot[key]) {\n // @ts-ignore\n snapshot[key] = {name, version, ranges: []}\n }\n return Object.assign(snapshot[key], data)\n }\n const pushRange = (name: string, version: string, range: string): void => {\n const entry = upsertEntry(name, version)\n\n if (!entry.ranges.includes(range)) {\n entry.ranges.push(range)\n entry.ranges.sort()\n }\n }\n const extractRanges = (deps?: TDependencies, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([_name, range]) => {\n const _version = getClosestVersion(_name, ...parents)\n pushRange(_name, _version, range)\n })\n const extractEntries = (deps?: TNpm1LockfileDeps, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([name, entry]) => {\n const requires = entry.requires || entry.dependencies && Object.entries(entry.dependencies).reduce((m, [name, {version}]) => {\n m[name] = version\n return m\n }, {} as Record<string, string>)\n\n upsertEntry(name, entry.version, {\n hashes: parseIntegrity(entry.integrity),\n dependencies: requires,\n source: parseResolution(entry.resolved)\n })\n\n extractEntries(entry.dependencies, deps, ...parents)\n extractRanges(requires, entry.dependencies || {}, deps, ...parents)\n })\n\n extractEntries(lf.dependencies)\n extractRanges({\n ...snapshot[\"\"].dependencies,\n ...snapshot[\"\"].devDependencies\n }, lf.dependencies || {})\n\n debug.json('npm1-snapshot.json', snapshot)\n\n return sortObject(snapshot)\n}\n\nconst formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\nexport const preformat: IPreformat<TNpm1Lockfile> = (idx): TNpm1Lockfile => {\n const root = idx.snapshot[\"\"].manifest as TManifest\n const deptree = Object.values(idx.tree).slice(1).map(({parents, entry}) => [...parents.slice(1), entry])\n\n debug.json('deptree-npm-1.json', deptree.map((entries: TEntry[]) => entries.map(e => e.name).join(',')))\n\n const formatNpm1LockfileEntry = (entry: TEntry): TNpm1LockfileEntry => {\n const {name, version, hashes, source} = entry\n const _entry: TNpm1LockfileDeps[string] = {\n version,\n resolved: formatResolution(source),\n integrity: formatIntegrity(hashes)\n }\n\n if (!idx.prod.has(entry)) {\n _entry.dev = true\n }\n\n if (entry.dependencies) {\n _entry.requires = entry.dependencies\n }\n\n return _entry\n }\n\n const lf: TNpm1Lockfile = {\n name: root.name,\n version: root.version,\n lockfileVersion: 1,\n requires: true,\n dependencies: {}\n }\n const nmtree = lf\n const nodes: TDepTree[] = [nmtree]\n const processEntry = (name: string, version: string, parents: TNpm1LockfileEntry[]) => {\n const entry = idx.getEntry(name, version)!\n const deps = idx.getEntryDeps(entry)\n const queue: [string, string, TNpm1LockfileEntry[]][] = []\n\n deps.forEach((e) => {\n const closestIndex = parents.findIndex((p) => p.dependencies?.[e.name])\n const closest = parents[closestIndex]\n if (closest?.dependencies?.[e.name].version === e.version) {\n return\n }\n\n const _entry = formatNpm1LockfileEntry(e)\n const _parents = [_entry, ...parents]\n const parent = closest\n ? _parents[closestIndex]\n : _parents[_parents.length - 1]\n\n if (!parent.dependencies) {\n parent.dependencies = {}\n }\n parent.dependencies[e.name] = _entry\n\n nodes.push(parent)\n queue.push([e.name, e.version, _parents])\n })\n\n queue.forEach(([name, version, parents]) => processEntry(name, version, parents))\n }\n\n deptree.forEach((chain) => {\n const entry = chain[chain.length - 1]\n const {name} = entry\n\n if (!nmtree.dependencies[name]) {\n nmtree.dependencies[name] = formatNpm1LockfileEntry(entry)\n }\n })\n Object.entries(nmtree.dependencies).forEach(([name, entry]) => processEntry(name, entry.version, [entry, nmtree] as TNpm1LockfileEntry[]))\n\n nodes.forEach((node) => {\n sortObject(node.dependencies || {})\n\n if (node.requires) {\n const snap1 = Object.entries(node.requires).map(([name, range]) => `${name}@${range}`).join('')\n const snap2 = Object.entries(node.dependencies || {}).map(([name, {version}]) => `${name}@${version}`).join('')\n\n if (snap1 === snap2) {\n delete node.requires\n }\n }\n })\n\n return lf\n}\n\nexport const format: IFormat = (snap): string =>\n JSON.stringify(preformat(analyze(snap)), null, 2)\n\nexport const parseResolution: IParseResolution = (input: string) => {\n if (input.startsWith('github:')) {\n // github:mixmaxhq/throng#8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 7 x 40\n return {\n type: 'github',\n name: input.slice(7, -41),\n id: input.slice(-40)\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = (source: TResolution) => {\n const {type, name, id, registry = 'https://registry.npmjs.org'} = source\n if (type === 'github') {\n return `github:${name}#${id}`\n }\n\n return formatTarballUrl(name as string, id, registry)\n}\n", "import {\n ICheck,\n IFormat,\n IFormatResolution,\n IParseResolution,\n IPreformat,\n TEntry,\n TManifest,\n TSnapshot,\n TSnapshotIndex,\n} from '../interface'\nimport {formatTarballUrl, parseIntegrity, formatIntegrity, parseTarballUrl} from '../common'\nimport {sortObject, debug} from '../util'\nimport {analyze, getDeps, getId} from '../analyze'\nimport semver from 'semver'\n\nexport type TNpm3LockfileEntry = {\n name?: string\n version?: string\n resolved?: string\n integrity?: string\n dev?: boolean\n link?: boolean\n dependencies?: Record<string, string>,\n engines?: Record<string, string>\n funding?: Record<string, string>\n peerDependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n bin?: any\n license?: string\n}\n\nexport type TNpm3LockfileDeps = Record<string, TNpm3LockfileEntry>\n\nexport type TNpm3Lockfile = {\n lockfileVersion: 3\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n}\n\nexport const version = 'npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 3')\n\nexport const parse = (lockfile: string): TSnapshot => {\n const lf: TNpm3Lockfile = JSON.parse(lockfile)\n const snapshot = parsePackages(lf.packages)\n\n snapshot[\"\"].manifest = lf.packages[\"\"]\n\n debug.json('npm3-snapshot.json', snapshot)\n\n return snapshot\n}\n\nconst formatNmKey = (chunks: string[]) => `node_modules/` + chunks.join('/node_modules/')\n\nconst parsePackages = (packages: TNpm3LockfileDeps): any => {\n const entries: Record<string, TEntry> = {}\n const getClosestPkg = (name: string, chain: string[], entries: Record<string, TNpm3LockfileEntry>, _range: string): [string, TNpm3LockfileEntry] => {\n const variants: string[] = []\n const range = _range?.startsWith('npm:') ? _range.slice(_range.lastIndexOf('@') + 1) : _range\n\n let s = 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 || entry.version === range || semver.satisfies(entry.version as string, range))) {\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 if ((pkg.link || path === \"\") && !pkg.name){\n // populates workspace entry refs\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\n }\n // const source: TSource = {\n // id: (pkg.resolved || '.') as string,\n // type: sourceType\n // }\n const source = parseResolution(pkg.resolved as string)\n const isNpmAlias = path.startsWith('node_modules/') && pkg.name\n const chain: string[] = path ? ('/' + path).split('/node_modules/').filter(Boolean) : [\"\"]\n // name is present for workspace and npm aliased pkgs and for the root pkg\n const name = !isNpmAlias && pkg.name || chain[chain.length - 1]\n const version = pkg.version as string\n const id = path === \"\" ? path : getId(name, version)\n\n if (entries[id]) {\n return entries[id]\n }\n\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source,\n dependencies: pkg.dependencies,\n engines: pkg.engines,\n funding: pkg.funding,\n bin: pkg.bin,\n devDependencies: pkg.devDependencies,\n peerDependencies: pkg.peerDependencies,\n optionalDependencies: pkg.optionalDependencies,\n license: pkg.license\n }\n\n Object.entries<string>(getDeps(entries[id])).forEach(([_name, range]) => {\n const [_path, _entry] = getClosestPkg(_name, chain, packages, range)\n const {ranges} = processPackage(_path, _entry)\n\n if (!ranges.includes(range)) {\n ranges.push(range)\n ranges.sort()\n }\n })\n return entries[id]\n }\n\n Object.entries(packages).forEach(([path, entry]) =>\n (path.startsWith('node_modules/') || path === '') && processPackage(path, entry))\n\n return sortObject(entries)\n}\n\nexport const buildNmtree = (idx: TSnapshotIndex) => {\n const snap = idx.snapshot\n const nmtree = Object.values(idx.tree).reduce<Record<string, {entry: TEntry, parent: string}>>((result, {key, id, chunks}) => {\n const entry = snap[id]\n if (!entry) {\n throw new Error(`Malformed snapshot: ${id}`)\n }\n\n const grandparent = chunks[1]\n const cl = chunks.length\n\n let l = 0\n while (l <= cl) {\n const [name, ...parents] = [...chunks].reverse()\n\n let i = 0\n while (i < parents.length) {\n const __key = parents.slice(i, i + l).reverse()\n const _key = [...__key, name]//\n const variant = formatNmKey(_key)\n const found = result[variant]\n if (found) {\n\n if (found.entry === entry) {\n return result\n }\n\n } else {\n const pEntry = result[formatNmKey(__key)]?.entry\n const ppEntry = idx.getEntry(idx.tree[chunks.slice(0, cl - i - l).join(',')]?.id)\n if (__key.length && pEntry !== ppEntry) {\n i++\n continue\n }\n\n result[variant] = {entry, parent: grandparent}\n return result\n }\n i++\n }\n l++\n }\n\n if (entry.source.type === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debug.json('npm3-nmtree.json', nmtree)\n\n return nmtree\n}\n\nexport const preformat: IPreformat<TNpm3Lockfile> = (idx): TNpm3Lockfile => {\n const snap = idx.snapshot\n const nmtree = buildNmtree(idx)\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject(Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.source.type === 'workspace') {\n if (entry.source.id === '.') {\n m[\"\"] = manifest as TNpm3LockfileEntry\n return m\n }\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source.id as string,\n link: true\n }\n\n m[entry.source.id as string] = {\n name: entry.name,\n version: entry.version,\n license: entry.license,\n dependencies: entry.dependencies,\n bin: entry.bin,\n devDependencies: entry.devDependencies,\n }\n return m\n }\n\n m[k] = {\n version: entry.version,\n resolved: formatResolution(entry.source),\n integrity: formatIntegrity(entry.hashes)\n }\n if (!idx.prod.has(entry)) {\n m[k].dev = true\n }\n m[k].dependencies = entry.dependencies\n m[k].bin = entry.bin\n m[k].engines = entry.engines\n m[k].funding = entry.funding\n m[k].peerDependencies = entry.peerDependencies\n m[k].optionalDependencies = entry.optionalDependencies\n\n return m\n }, {} as TNpm3LockfileDeps)\n )\n\n return {\n name: manifest.name,\n version: manifest.version,\n lockfileVersion: 3,\n requires: true,\n packages,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n\nexport const parseResolution: IParseResolution = (input) => {\n if (!input?.includes('://')) {\n return {\n type: 'workspace',\n id: input || '.'\n }\n }\n\n // git+ssh://git@github.com/mixmaxhq/throng.git#8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 25 x 5 40\n if (input.startsWith('git+ssh://git@github.com/')) {\n return {\n name: input.slice(25, -45),\n id: input.slice(-40),\n type: 'github'\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = ({type, id, name, registry, hash}) => {\n if (type === 'github') {\n return `git+ssh://git@github.com/${name}.git#${id}`\n }\n\n return formatTarballUrl(name as string, id, registry, hash)\n}\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 {\n TDependencies,\n TSnapshot,\n TSnapshotIndex,\n ICheck,\n IFormat,\n IParse,\n IPreformat,\n TSource,\n TResolution,\n IParseResolution,\n IFormatResolution\n} from '../interface'\nimport {parseIntegrity, formatTarballUrl, parseTarballUrl, referenceKeysSorter} from '../common'\nimport {debug, unique} from '../util'\n\nconst kvEntryPattern = /^(\\s+)\"?([^\"]+)\"?\\s\"?([^\"]+)\"?$/\n\nexport type TYarn1Lockfile = Record<string, {\n version: string\n resolved: string\n integrity: string\n dependencies?: TDependencies\n optionalDependencies?: TDependencies\n}>\n\nexport const version = 'yarn-classic'\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 { version, integrity, dependencies, optionalDependencies, resolved } = _entry\n const hashes = parseIntegrity(integrity)\n const source: TSource = parseResolution(resolved)\n const chunks = _key.split(', ')\n const names = unique(chunks.map(c => c.slice(0, c.indexOf('@', 1))))\n\n for (const name of names) {\n const ranges = chunks.filter(c => c.startsWith(`${name}@`)).map(r => r.slice(r.indexOf('@', 1) + 1)).sort()\n const key = `${name}@${version}`\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n optionalDependencies,\n source,\n }\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n optionalDependencies: manifest.optionalDependencies,\n }\n\n debug.json('yarn-classic-snapshot.json', snapshot)\n\n return snapshot\n}\n\n\n\nexport const preformat: IPreformat<TYarn1Lockfile> = (idx): TYarn1Lockfile => {\n const {snapshot} = idx\n const lf: TYarn1Lockfile = {}\n const rangemap: Record<string, {keys: string[], key: string, name: string}> = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes, dependencies, optionalDependencies, source } = entry\n const resolved = formatResolution(source)\n const alias = rangemap[resolved]\n const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n const keys = ranges.map(r => `${name}@${r}`)\n\n if (alias) {\n keys.push(...alias.keys)\n keys.sort(referenceKeysSorter)\n delete lf[alias.key]\n }\n\n const key = keys.join(', ')\n\n rangemap[resolved] = {keys, key, name}\n lf[key] = {\n version,\n resolved,\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 noRefs: 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.includes('npm:')? `\"${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\nexport const parseResolution: IParseResolution = (input: string): TResolution => {\n // https://github.com/yarnpkg/yarn/blob/master/src/resolvers/exotics/github-resolver.js\n // https://github.com/yarnpkg/yarn/blob/master/src/resolvers/exotics/git-resolver.js\n if (input.startsWith('https://codeload.github.com/')) {\n // https://codeload.github.com/mixmaxhq/throng/tar.gz/8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 28 x 8 40\n return {\n type: 'github',\n name: input.slice(28, -48),\n id: input.slice(-40)\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = ({type, id, name = '', registry = 'https://registry.yarnpkg.com', hash = ''}: TResolution): string => {\n if (type === 'github') {\n return `https://codeload.github.com/${name}/tar.gz/${id}`\n }\n\n return formatTarballUrl(name, id, registry, hash)\n}\n\nconst formatReference = (input: string): string => {\n const colonPos = input.indexOf(':')\n const protocol = input.slice(0, colonPos)\n const ref = input.slice(colonPos + 1)\n\n if (protocol === 'git' || protocol === 'tag' || protocol === 'semver' || protocol === 'npm') {\n return ref\n }\n\n return input\n}", "// https://github.com/yarnpkg/berry/commit/2f9e8073d15745f9d53e6b8b42fa9c81eb143d54\n\nimport {load, dump} from 'js-yaml'\nimport {\n ICheck,\n IFormat,\n IFormatOpts,\n IParse,\n IParseResolution,\n IPreformat,\n TDependencies,\n TDependenciesMeta,\n TSnapshot,\n TSnapshotIndex, TSource,\n TSourceType\n} from '../interface'\nimport {normalizeDeps, normalizeReference, parseIntegrity, processDeps, referenceKeysSorter} from '../common'\nimport {debug, sortObject, unique} 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\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 names = unique(chunks.map(c => c.slice(0, c.indexOf('@', 1))))\n\n for (const name of names) {\n const key = `${name}@${version}`\n // seems like a patch\n if (_key.includes('#')) {\n snapshot[key].patch = {\n resolution,\n refs: chunks,\n checksum\n }\n return\n }\n\n const ranges = chunks.filter(c => c.startsWith(`${name}@`)).map(r => r.slice(r.indexOf('@', 1) + 1)).map(normalizeReference)//.sort()\n const hashes = parseIntegrity(checksum)\n const source = parseResolution(resolution)\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n dependencies: normalizeDeps(dependencies),\n dependenciesMeta,\n optionalDependencies: normalizeDeps(optionalDependencies),\n peerDependencies: normalizeDeps(peerDependencies),\n peerDependenciesMeta,\n bin,\n conditions,\n }\n\n if (source.type === 'workspace') {}\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: normalizeDeps(manifest.dependencies),\n devDependencies: normalizeDeps(manifest.devDependencies),\n optionalDependencies: normalizeDeps(manifest.optionalDependencies),\n }\n\n debug.json('yarn-berry-snapshot.json', snapshot)\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn5Lockfile> = (idx): TYarn5Lockfile => {\n const {snapshot} = idx\n const lf: TYarn5Lockfile = {}\n const rangemap: Record<string, {keys: string[], key: string, name: string}> = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes: {checksum}, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry\n const resolution = formatResolution(source)\n const alias = rangemap[resolution]\n const isLocal = version === '0.0.0-use.local'\n const languageName = isLocal ? 'unknown' : 'node'\n const linkType = isLocal ? 'soft' : 'hard'\n const keys = ranges.map(r => `${name}@${formatReference(r, {semverAsNpm: true, isLocal})}`)\n\n if (alias) {\n keys.push(...alias.keys)\n keys.sort(referenceKeysSorter)\n delete lf[alias.key]\n }\n\n const key = keys.join(', ')\n\n rangemap[resolution] = {keys, key, name}\n lf[key] = {\n version,\n resolution,\n dependencies: formatDeps(dependencies),\n dependenciesMeta,\n optionalDependencies: formatDeps(optionalDependencies),\n peerDependencies: formatDeps(peerDependencies),\n peerDependenciesMeta,\n bin,\n checksum: checksum as string,\n conditions,\n languageName,\n linkType,\n }\n\n if (patch) {\n lf[patch.refs.join(', ')] = {\n ...lf[key],\n resolution: patch.resolution,\n checksum: patch.checksum,\n }\n }\n })\n\n delete lf[\"\"]\n\n return sortObject(lf)\n}\n\nexport const format: IFormat = (snapshot: TSnapshot, {__metadata = {\n version: 5,\n cacheKey: 8,\n}} = {}): string => {\n const lines = dump({\n __metadata,\n ...preformat({snapshot} as TSnapshotIndex)\n }, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: false,\n noRefs: true\n })\n .split('\\n')\n .map(line => {\n if (line === '__metadata:') {\n return `\\n${line}`\n }\n\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\\n\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n if (line.startsWith(' resolution: ')) {\n return line.replaceAll('\"', '').replace(' resolution: ', ' resolution: \"').concat('\"')\n }\n\n return line\n })\n\n const _value = lines.join('\\n')\n\n return `# This file is generated by running \"yarn install\" inside your project.\n# Manual changes might be lost - proceed with caution!\n${_value}`\n}\n\ntype IFormatReferenceOpts = Partial<{\n semverAsNpm: boolean\n isLocal: boolean\n}>\n\nconst formatReference = (input: string, opts: IFormatReferenceOpts = {}): string | number => {\n const colonPos = input.indexOf(':')\n const protocol = input.slice(0, colonPos)\n const ref = input.slice(colonPos + 1)\n\n if (protocol === 'git' || protocol === 'tag') {\n return ref\n }\n\n if (protocol === 'semver') {\n return opts.semverAsNpm && !opts.isLocal\n ? 'npm:' + ref\n : /^\\d+$/.test(ref) ? +ref : ref\n }\n // TODO restore github short alias\n\n return input\n}\n\nconst formatDeps = (deps?: TDependencies, opts?: IFormatReferenceOpts) => processDeps(deps, formatReference, opts)\n\nexport const parseResolution: IParseResolution = (input: string) => {\n const colonPos = input.indexOf(':')\n const atPos = input.indexOf('@', 1)\n const name = input.slice(0, atPos)\n\n if (colonPos === -1) {\n return {\n name,\n id: input.slice(atPos + 1),\n type: 'npm'\n }\n }\n\n // throng@https://github.com/mixmaxhq/throng.git#commit=8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // x 18 y 12 40\n if (input.includes('https://github.com')) {\n return {\n type: 'github',\n name: input.slice(atPos + 20, -52),\n id: input.slice(-40),\n alias: input.slice(0, input.indexOf('@', 1))\n }\n }\n\n return {\n name,\n id: input.slice(colonPos + 1),\n type: input.slice(atPos + 1, colonPos) as TSourceType\n }\n}\n\nexport const formatResolution = ({name, id, type = 'npm', alias = name, hash}: TSource): string => {\n // https://github.com/yarnpkg/berry/blob/a8ea92828badb4b6a1edddae18b0a163b0c4d2c5/packages/plugin-github/sources/GithubFetcher.ts\n if (type === 'github') {\n return `${alias}@https://github.com/${name}.git#commit=${id}`\n }\n return `${name}@${type === 'semver' ? '' : type + ':'}${id}`\n}", "import {parse as parseNpm1, check as checkNpm1} from './formats/npm-1'\nimport {parse as parseNpm2, check as checkNpm2} from './formats/npm-2'\nimport {parse as parseNpm3, check as checkNpm3} from './formats/npm-3'\nimport {parse as parseYarnClassic, check as checkYarnClassic} from './formats/yarn-classic'\nimport {parse as parseYarnBerry, check as checkYarnBerry} from './formats/yarn-berry'\nimport {ICheck, IParse, TSnapshot} from './interface'\n\nconst isPkgJson = (input: string) => input.startsWith('{') && input.includes('\"name\":')\nconst variants: [ICheck, IParse][] = [\n [checkNpm1, parseNpm1],\n [checkNpm2, parseNpm2],\n [checkNpm3, parseNpm3],\n [checkYarnClassic, parseYarnClassic],\n [checkYarnBerry, parseYarnBerry],\n]\nexport const parse = (...inputs: (string|Buffer)[]): TSnapshot => {\n const [lockfile, ...pkgJsons] = inputs.map((input) => input.toString('utf8'))\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 {URL} from 'node:url'\nimport {IFormatReference, TDependencies, THashes, TSnapshot, TSource} from './interface'\n\nexport const getSources = (snapshot: TSnapshot): string[] =>\n Object.values(snapshot)\n .map(entry => entry.source.id)\n .filter(Boolean)\n\nexport const parseIntegrity = (integrity?: string): THashes =>\n integrity\n ? integrity.split(' ').reduce<THashes>((m, item) => {\n const [k, v] = item.split('-')\n if (k === 'sha512' || k === 'sha256' || k === 'sha1' || k === 'checksum') {\n m[k] = v\n } else if (!v){\n m['checksum'] = k\n }\n\n return m\n }, {})\n : {}\n\nexport const formatIntegrity = (hashes: THashes): string => {\n const checksum = hashes['checksum']\n if (checksum) {\n return checksum\n }\n\n return Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n}\n\nexport interface IReference {\n protocol: string\n id: string\n name?: string\n host?: string\n [extra: string]: any\n}\n\nconst parseVersion = (version: string): string | null => semver.valid(version) || semver.coerce(version)?.version || null\n\nconst parseCaret = (value: string): string => (value.startsWith('^') || value.startsWith('~')) ? value[0] : ''\n\nconst parseName = (value: string): string => (value).slice(0, (value + '.').indexOf('.'))\n\nexport const parseTarballUrl = (resolution: string): TSource | null => {\n // https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d\n // https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz\n // Use regexp or URL to parse? A benchmark is needed.\n const [tgz, br, _name, org, ...rest] = resolution.split('/').reverse()\n if (br !== '-') {\n return null\n }\n\n const hasScope = org[0] === '@'\n const name = hasScope ? `${org}/${_name}` : _name\n const id = tgz.slice(_name.length + 1, tgz.lastIndexOf('.tgz'))\n\n return {\n type: 'npm',\n name,\n id,\n registry: rest.reverse().join('/') + (hasScope ? '' : '/' + org),\n hash: tgz.slice((tgz + '#').indexOf('#'))\n }\n}\n\nexport const formatTarballUrl = (name: string, version: string, registry = 'https://registry.npmjs.org', hash = '') =>\n `${registry}/${name}/-/${name.slice(name.indexOf('/') + 1)}-${version}.tgz${hash}`\n\n\n// https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies\n// https://v3.yarnpkg.com/features/protocols\nconst gitProtocols = ['git', 'git+ssh', 'git+http', 'git+https', 'git+file']\nconst refProtocols = ['npm', 'github', 'workspace', 'semver', 'tag', 'patch', 'link', 'portal', 'file', ...gitProtocols]\n\nexport const normalizeDeps = (deps?: TDependencies): TDependencies | undefined => processDeps(deps, normalizeReference)\n\nexport const processDeps = (deps?: TDependencies, formatter: IFormatReference = v => v, opts: any = {}): TDependencies | undefined => deps && Object.entries(deps).reduce<TDependencies>((m, [k, v]) => {\n m[k] = formatter(v + '', opts) as string\n return m\n}, {})\n\nexport const normalizeReference = (ref: string): string => {\n if (refProtocols.some(p => ref.startsWith(p + ':'))) {\n return ref\n }\n\n if (semver.validRange(ref)) {\n return 'semver:' + ref\n }\n\n if (ref.includes('.git')) {\n return 'git:' + ref\n }\n\n if (ref.includes('/')) {\n return 'github:' + ref\n }\n\n return 'tag:' + ref\n // throw new TypeError(`unsupported ref type: ${ref}`)\n}\n\nexport const parseReference = (raw?: any): IReference => {\n if (raw.startsWith('workspace:')) {\n return {\n protocol: 'workspace',\n id: raw.slice(10)\n }\n }\n\n if (raw.startsWith('npm:')) {\n return {\n protocol: 'npm',\n id: raw.slice(4)\n }\n }\n\n if (URL.canParse(raw)) {\n const url = new URL(raw)\n return {\n protocol: url.protocol.slice(0, -1),\n name: parseName(url.pathname.startsWith('/') ? url.pathname.slice(1) : url.pathname),\n id: url.hash.slice(1),\n host: url.host\n }\n }\n\n if (raw.includes('/') && !raw.includes(':')) { // use regexp?\n const name = raw.slice(0, (raw + '#').indexOf('#'))\n return {\n protocol: 'github',\n name,\n id: raw.slice(name.length + 1)\n }\n }\n\n return {\n protocol: 'semver',\n id: raw,\n }\n}\n\nexport const referenceKeysSorter = (a: string, b: string) => {\n const _a = a.includes('npm:')\n const _b = b.includes('npm:')\n return _a === _b\n ? 0\n : +_b - +_a\n}\n\nexport const mapReference = (current: string, targetProtocol: string, strategy = 'inherit'): string => {\n const {id, protocol} = parseReference(current)\n const version = parseVersion(id)\n const caret = parseCaret(id)\n const prefix = targetProtocol === 'semver' ? '' : `${targetProtocol}:`\n\n if (protocol === targetProtocol) {\n return current\n }\n\n if (version === null) {\n return prefix + '*'\n }\n\n const _version = strategy === 'pin'\n ? version\n : strategy === 'inherit'\n ? (caret + version)\n : strategy\n\n return prefix + _version\n}\n\n/**\n * Replaces local monorepo cross-refs with the target protocol: workspace or semver\n */\nexport const switchMonorefs = async ({cwd, strategy, protocol = 'semver', dryrun = false}: {\n cwd?: string\n strategy?: string // 'inherit' | 'pin' | 'coerce'\n protocol?: string\n dryrun?: boolean\n}) => {\n const {packages} = await topo({cwd})\n\n await Promise.all(Object.values(packages).map(async pkg => {\n await traverseDeps({pkg, packages, cb({name, version, deps}) {\n deps[name] = mapReference(version, protocol, strategy)\n }})\n\n if (dryrun) {\n return\n }\n\n await fs.writeFile(pkg.manifestAbsPath, JSON.stringify(pkg.manifest), 'utf8')\n }))\n\n return packages\n}\n", "import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport * as process from 'node:process'\n\nexport const sortObject = <T extends Record<string, any>>(\n unordered: T,\n predicate: (a: [string, any], b: [string, any]) => number = ([a], [b]) => a > b ? 1 : -1 // This is actually what npm does\n): T =>\n Object.entries({...unordered})\n .sort(predicate)\n .reduce((obj, [key, value]: [keyof T, T[keyof T]]) => {\n obj[key] = value\n return obj\n },\n flushObject(unordered) as T,\n )\n\nexport const flushObject = (obj: Record<string, any>) => {\n for (const key in obj) {\n delete obj[key]\n }\n\n return obj\n}\n\nexport const loadContents = async (value: string): Promise<string> =>\n value.includes('\\n')\n ? value\n : fs.readFile(value, 'utf-8')\n\nexport const debug = Object.assign((...chunks: any[]) => {\n if (!debug.enable) return\n\n console.log(...chunks)\n}, {\n enable: process.env.DEBUG,\n json(data: any, name: any = `debug-${Math.random().toString(16).slice(2)}.json`, base = path.resolve(process.cwd(), 'temp')) {\n if (!this.enable) return\n\n if (typeof data === 'string') {\n this.json(name, data)\n return\n }\n\n const _data = typeof data === 'function' ? data() : data\n\n fs.writeFile(path.resolve(base, name), JSON.stringify(_data, null, 2))\n }\n})\n\nexport const unique = (arr: string[]): string[] => [...new Set(arr)]\n", "import {TEntry, TSnapshot, TSnapshotIndex} from './interface'\nimport {debug, sortObject} from './util'\n\nexport const getDeps = (entry: TEntry): Record<string, string> => {\n if (!getDeps.cache.has(entry)) {\n getDeps.cache.set(entry, {\n ...sortObject(entry.dependencies || {}),\n ...sortObject({...entry.devDependencies, ...entry.optionalDependencies})\n })\n }\n\n return getDeps.cache.get(entry) as Record<string, string>\n}\n\ngetDeps.cache = new WeakMap<TEntry, Record<string, string>>()\n\ntype TWalkCtx = {\n root: TEntry,\n entry?: TEntry\n idx: TSnapshotIndex\n id?: string\n prefix?: string\n depth?: number\n parentId?: string\n parents?: TEntry[]\n}\n\nconst walk = (ctx: TWalkCtx) => {\n const {root, entry = root, prefix, depth = 0, parentId, idx, id = idx.getEntryId(entry), parents = []} = ctx\n const key = (prefix ? prefix + ',' : '') + entry.name\n\n if (id === undefined) {\n throw new TypeError(`Invalid snapshot: ${key}`)\n }\n\n if (!idx.tree[key]) {\n const chunks = key.split(',')\n idx.tree[key] = {\n key,\n chunks,\n id,\n name: entry.name,\n version: entry.version,\n entry,\n parents\n }\n if (root.dependencies?.[chunks[1]]) {\n idx.prod.add(entry)\n }\n if (parentId !== undefined) {\n idx.edges.push([parentId, id])\n return\n }\n if (depth) {\n return\n }\n }\n\n const stack: any[] = []\n const dependencies = getDeps(entry)\n\n Object.entries(dependencies).forEach(([name, range]) => {\n const _entry = idx.getEntryByRange(name, range)\n if (!_entry) {\n throw new Error(`inconsistent snapshot: ${name} ${range}`)\n }\n idx.bound(entry, _entry)\n if (parents.includes(entry)) {\n return\n }\n const _ctx: TWalkCtx = {root, entry: _entry, prefix: key, depth: depth + 1, parentId: id, idx, parents: [...parents, entry]}\n stack.push(_ctx)\n walk(_ctx)\n })\n\n stack.forEach(walk)\n}\n\nexport const getId = (name?: string, version: string = ''): string => name\n ? `${name}@${version}`\n : ''\n\nexport const analyze = (snapshot: TSnapshot): TSnapshotIndex => {\n const entries: TEntry[] = Object.values(snapshot)\n const roots = entries.filter(e => e.source.type === 'workspace')\n const prod = new Set(roots)\n const deps = new Map()\n const edges: [string, string][] = []\n const tree: TSnapshotIndex['tree'] = {}\n const rangeMap = new Map()\n const idx: TSnapshotIndex = {\n snapshot,\n roots,\n edges,\n tree,\n prod,\n entries,\n bound(from: TEntry, to: TEntry) {\n const deps = this.getEntryDeps(from)\n if (deps.includes(to)) {\n return\n }\n\n deps.push(to)\n },\n getEntryId ({name, version}: TEntry): string {\n return getId(name, version)\n },\n getEntry (name: string, version?: string) {\n return snapshot[name] || snapshot[getId(name, version)]\n },\n getEntryByRange (name: string, range: string) {\n const key = getId(name, range)\n if (rangeMap.has(key)) {\n return rangeMap.get(key)\n }\n\n const _ranges = [range, range.replace('semver:', 'npm:'), range.replace('npm:', 'semver:')]\n const found = entries.find(({name: _name, ranges}) => name === _name && _ranges.some(r => ranges.includes(r)))\n rangeMap.set(key, found)\n return found\n },\n getEntryDeps (entry: TEntry): TEntry[] {\n if (!deps.has(entry)) {\n deps.set(entry, [])\n }\n return deps.get(entry)\n }\n }\n\n const now = Date.now()\n roots.forEach((root) => {\n const isRoot = root.source.id === '.'\n // exclude pseudo root\n if (isRoot && !root.manifest) return\n walk({root, idx, id: isRoot ? '' : undefined})\n })\n // walk({root: roots[0], idx, id: ''})\n // walk({root: roots[2], idx})\n debug('analyze duration=', Date.now() - now, 'deptree size=', Object.keys(tree).length)\n debug.json('deptree.json', Object.values(tree).map(({parents, name}) => [...parents.map(p=> p.name).slice(1), name].join(',')))\n\n return idx\n}\n", "import {\n ICheck,\n IFormat,\n IParse, IPreformat,\n TDependencies,\n THashes,\n TEntry,\n TManifest,\n TSnapshot,\n IParseResolution,\n IFormatResolution,\n TResolution,\n} from '../interface'\nimport {debug, sortObject} from '../util'\nimport {parseIntegrity, formatTarballUrl, parseTarballUrl} from '../common'\nimport {analyze} from '../analyze'\n\nexport const version = 'npm-1'\n\nexport type TNpm1LockfileEntry = {\n version: string\n resolved: string\n integrity: string\n dev?: boolean\n requires?: Record<string, string>\n dependencies?: TNpm1LockfileDeps\n}\n\nexport type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>\n\nexport type TNpm1Lockfile = {\n lockfileVersion: 1\n name: string\n version: string\n requires?: true\n dependencies: TNpm1LockfileDeps\n}\n\ninterface TDepTree {\n dependencies?: Record<string, TDepTree>\n version: string\n requires?: any\n}\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 1')\n\nexport const parse: IParse = (lockfile: string, pkg: string): TSnapshot => {\n const lf: TNpm1Lockfile = JSON.parse(lockfile)\n const manifest: TManifest = JSON.parse(pkg)\n const snapshot: Record<string, TEntry> = {\n \"\": {\n name: manifest.name,\n version: manifest.version,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n ranges: [],\n manifest,\n }\n }\n const getClosestVersion = (name: string, ...deps: TNpm1LockfileDeps[]): string =>\n deps.find((dep) => dep[name])?.[name]?.version as string\n\n const upsertEntry = (name: string, version: string, data: Partial<TEntry> = {}): TEntry => {\n const key = `${name}@${version}`\n if (!snapshot[key]) {\n // @ts-ignore\n snapshot[key] = {name, version, ranges: []}\n }\n return Object.assign(snapshot[key], data)\n }\n const pushRange = (name: string, version: string, range: string): void => {\n const entry = upsertEntry(name, version)\n\n if (!entry.ranges.includes(range)) {\n entry.ranges.push(range)\n entry.ranges.sort()\n }\n }\n const extractRanges = (deps?: TDependencies, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([_name, range]) => {\n const _version = getClosestVersion(_name, ...parents)\n pushRange(_name, _version, range)\n })\n const extractEntries = (deps?: TNpm1LockfileDeps, ...parents: TNpm1LockfileDeps[]) => deps && Object.entries(deps).forEach(([name, entry]) => {\n const requires = entry.requires || entry.dependencies && Object.entries(entry.dependencies).reduce((m, [name, {version}]) => {\n m[name] = version\n return m\n }, {} as Record<string, string>)\n\n upsertEntry(name, entry.version, {\n hashes: parseIntegrity(entry.integrity),\n dependencies: requires,\n source: parseResolution(entry.resolved)\n })\n\n extractEntries(entry.dependencies, deps, ...parents)\n extractRanges(requires, entry.dependencies || {}, deps, ...parents)\n })\n\n extractEntries(lf.dependencies)\n extractRanges({\n ...snapshot[\"\"].dependencies,\n ...snapshot[\"\"].devDependencies\n }, lf.dependencies || {})\n\n debug.json('npm1-snapshot.json', snapshot)\n\n return sortObject(snapshot)\n}\n\nconst formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\nexport const preformat: IPreformat<TNpm1Lockfile> = (idx): TNpm1Lockfile => {\n const root = idx.snapshot[\"\"].manifest as TManifest\n const deptree = Object.values(idx.tree).slice(1).map(({parents, entry}) => [...parents.slice(1), entry])\n\n debug.json('deptree-npm-1.json', deptree.map((entries: TEntry[]) => entries.map(e => e.name).join(',')))\n\n const formatNpm1LockfileEntry = (entry: TEntry): TNpm1LockfileEntry => {\n const {name, version, hashes, source} = entry\n const _entry: TNpm1LockfileDeps[string] = {\n version,\n resolved: formatResolution(source),\n integrity: formatIntegrity(hashes)\n }\n\n if (!idx.prod.has(entry)) {\n _entry.dev = true\n }\n\n if (entry.dependencies) {\n _entry.requires = entry.dependencies\n }\n\n return _entry\n }\n\n const lf: TNpm1Lockfile = {\n name: root.name,\n version: root.version,\n lockfileVersion: 1,\n requires: true,\n dependencies: {}\n }\n const nmtree = lf\n const nodes: TDepTree[] = [nmtree]\n const processEntry = (name: string, version: string, parents: TNpm1LockfileEntry[]) => {\n const entry = idx.getEntry(name, version)!\n const deps = idx.getEntryDeps(entry)\n const queue: [string, string, TNpm1LockfileEntry[]][] = []\n\n deps.forEach((e) => {\n const closestIndex = parents.findIndex((p) => p.dependencies?.[e.name])\n const closest = parents[closestIndex]\n if (closest?.dependencies?.[e.name].version === e.version) {\n return\n }\n\n const _entry = formatNpm1LockfileEntry(e)\n const _parents = [_entry, ...parents]\n const parent = closest\n ? _parents[closestIndex]\n : _parents[_parents.length - 1]\n\n if (!parent.dependencies) {\n parent.dependencies = {}\n }\n parent.dependencies[e.name] = _entry\n\n nodes.push(parent)\n queue.push([e.name, e.version, _parents])\n })\n\n queue.forEach(([name, version, parents]) => processEntry(name, version, parents))\n }\n\n deptree.forEach((chain) => {\n const entry = chain[chain.length - 1]\n const {name} = entry\n\n if (!nmtree.dependencies[name]) {\n nmtree.dependencies[name] = formatNpm1LockfileEntry(entry)\n }\n })\n Object.entries(nmtree.dependencies).forEach(([name, entry]) => processEntry(name, entry.version, [entry, nmtree] as TNpm1LockfileEntry[]))\n\n nodes.forEach((node) => {\n sortObject(node.dependencies || {})\n\n if (node.requires) {\n const snap1 = Object.entries(node.requires).map(([name, range]) => `${name}@${range}`).join('')\n const snap2 = Object.entries(node.dependencies || {}).map(([name, {version}]) => `${name}@${version}`).join('')\n\n if (snap1 === snap2) {\n delete node.requires\n }\n }\n })\n\n return lf\n}\n\nexport const format: IFormat = (snap): string =>\n JSON.stringify(preformat(analyze(snap)), null, 2)\n\nexport const parseResolution: IParseResolution = (input: string) => {\n if (input.startsWith('github:')) {\n // github:mixmaxhq/throng#8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 7 x 40\n return {\n type: 'github',\n name: input.slice(7, -41),\n id: input.slice(-40)\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = (source: TResolution) => {\n const {type, name, id, registry = 'https://registry.npmjs.org'} = source\n if (type === 'github') {\n return `github:${name}#${id}`\n }\n\n return formatTarballUrl(name as string, id, registry)\n}\n", "import {\n ICheck,\n IFormat,\n IFormatResolution,\n IParseResolution,\n IPreformat,\n TEntry,\n TManifest,\n TSnapshot,\n TSnapshotIndex,\n} from '../interface'\nimport {formatTarballUrl, parseIntegrity, formatIntegrity, parseTarballUrl} from '../common'\nimport {sortObject, debug} from '../util'\nimport {analyze, getDeps, getId} from '../analyze'\nimport semver from 'semver'\n\nexport type TNpm3LockfileEntry = {\n name?: string\n version?: string\n resolved?: string\n integrity?: string\n dev?: boolean\n link?: boolean\n dependencies?: Record<string, string>,\n engines?: Record<string, string>\n funding?: Record<string, string>\n peerDependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n bin?: any\n license?: string\n}\n\nexport type TNpm3LockfileDeps = Record<string, TNpm3LockfileEntry>\n\nexport type TNpm3Lockfile = {\n lockfileVersion: 3\n name: string\n version: string\n requires?: true\n packages: TNpm3LockfileDeps\n}\n\nexport const version = 'npm-3'\n\nexport const check: ICheck = (lockfile: string) => lockfile.includes(' \"lockfileVersion\": 3')\n\nexport const parse = (lockfile: string): TSnapshot => {\n const lf: TNpm3Lockfile = JSON.parse(lockfile)\n const snapshot = parsePackages(lf.packages)\n\n snapshot[\"\"].manifest = lf.packages[\"\"]\n\n debug.json('npm3-snapshot.json', snapshot)\n\n return snapshot\n}\n\nconst formatNmKey = (chunks: string[]) => `node_modules/` + chunks.join('/node_modules/')\n\nconst parsePackages = (packages: TNpm3LockfileDeps): any => {\n const entries: Record<string, TEntry> = {}\n const getClosestPkg = (name: string, chain: string[], entries: Record<string, TNpm3LockfileEntry>, _range: string): [string, TNpm3LockfileEntry] => {\n const variants: string[] = []\n const range = _range?.startsWith('npm:') ? _range.slice(_range.lastIndexOf('@') + 1) : _range\n\n let s = 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 || entry.version === range || semver.satisfies(entry.version as string, range))) {\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 if ((pkg.link || path === \"\") && !pkg.name){\n // populates workspace entry refs\n return processPackage(path, {\n ...pkg,\n ...packages[pkg.resolved as string]\n })\n }\n // const source: TSource = {\n // id: (pkg.resolved || '.') as string,\n // type: sourceType\n // }\n const source = parseResolution(pkg.resolved as string)\n const isNpmAlias = path.startsWith('node_modules/') && pkg.name\n const chain: string[] = path ? ('/' + path).split('/node_modules/').filter(Boolean) : [\"\"]\n // name is present for workspace and npm aliased pkgs and for the root pkg\n const name = !isNpmAlias && pkg.name || chain[chain.length - 1]\n const version = pkg.version as string\n const id = path === \"\" ? path : getId(name, version)\n\n if (entries[id]) {\n return entries[id]\n }\n\n entries[id] = {\n name,\n version,\n ranges: [],\n hashes: parseIntegrity(pkg.integrity),\n source,\n dependencies: pkg.dependencies,\n engines: pkg.engines,\n funding: pkg.funding,\n bin: pkg.bin,\n devDependencies: pkg.devDependencies,\n peerDependencies: pkg.peerDependencies,\n optionalDependencies: pkg.optionalDependencies,\n license: pkg.license\n }\n\n Object.entries<string>(getDeps(entries[id])).forEach(([_name, range]) => {\n const [_path, _entry] = getClosestPkg(_name, chain, packages, range)\n const {ranges} = processPackage(_path, _entry)\n\n if (!ranges.includes(range)) {\n ranges.push(range)\n ranges.sort()\n }\n })\n return entries[id]\n }\n\n Object.entries(packages).forEach(([path, entry]) =>\n (path.startsWith('node_modules/') || path === '') && processPackage(path, entry))\n\n return sortObject(entries)\n}\n\nexport const buildNmtree = (idx: TSnapshotIndex) => {\n const snap = idx.snapshot\n const nmtree = Object.values(idx.tree).reduce<Record<string, {entry: TEntry, parent: string}>>((result, {key, id, chunks}) => {\n const entry = snap[id]\n if (!entry) {\n throw new Error(`Malformed snapshot: ${id}`)\n }\n\n const grandparent = chunks[1]\n const cl = chunks.length\n\n let l = 0\n while (l <= cl) {\n const [name, ...parents] = [...chunks].reverse()\n\n let i = 0\n while (i < parents.length) {\n const __key = parents.slice(i, i + l).reverse()\n const _key = [...__key, name]//\n const variant = formatNmKey(_key)\n const found = result[variant]\n if (found) {\n\n if (found.entry === entry) {\n return result\n }\n\n } else {\n const pEntry = result[formatNmKey(__key)]?.entry\n const ppEntry = idx.getEntry(idx.tree[chunks.slice(0, cl - i - l).join(',')]?.id)\n if (__key.length && pEntry !== ppEntry) {\n i++\n continue\n }\n\n result[variant] = {entry, parent: grandparent}\n return result\n }\n i++\n }\n l++\n }\n\n if (entry.source.type === 'workspace') {\n result[formatNmKey([entry.name])] = {entry, parent: ''}\n }\n\n return result\n }, {})\n\n debug.json('npm3-nmtree.json', nmtree)\n\n return nmtree\n}\n\nexport const preformat: IPreformat<TNpm3Lockfile> = (idx): TNpm3Lockfile => {\n const snap = idx.snapshot\n const nmtree = buildNmtree(idx)\n const manifest = snap[\"\"].manifest as TManifest\n const packages = sortObject(Object.entries(nmtree).reduce((m, [k, {entry, parent}]) => {\n if (entry.source.type === 'workspace') {\n if (entry.source.id === '.') {\n m[\"\"] = manifest as TNpm3LockfileEntry\n return m\n }\n\n m[`node_modules/${entry.name}`] = {\n resolved: entry.source.id as string,\n link: true\n }\n\n m[entry.source.id as string] = {\n name: entry.name,\n version: entry.version,\n license: entry.license,\n dependencies: entry.dependencies,\n bin: entry.bin,\n devDependencies: entry.devDependencies,\n }\n return m\n }\n\n m[k] = {\n version: entry.version,\n resolved: formatResolution(entry.source),\n integrity: formatIntegrity(entry.hashes)\n }\n if (!idx.prod.has(entry)) {\n m[k].dev = true\n }\n m[k].dependencies = entry.dependencies\n m[k].bin = entry.bin\n m[k].engines = entry.engines\n m[k].funding = entry.funding\n m[k].peerDependencies = entry.peerDependencies\n m[k].optionalDependencies = entry.optionalDependencies\n\n return m\n }, {} as TNpm3LockfileDeps)\n )\n\n return {\n name: manifest.name,\n version: manifest.version,\n lockfileVersion: 3,\n requires: true,\n packages,\n }\n}\n\nexport const format: IFormat = (snapshot: TSnapshot): string => JSON.stringify(preformat(analyze(snapshot)), null, 2)\n\nexport const parseResolution: IParseResolution = (input) => {\n if (!input?.includes('://')) {\n return {\n type: 'workspace',\n id: input || '.'\n }\n }\n\n // git+ssh://git@github.com/mixmaxhq/throng.git#8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 25 x 5 40\n if (input.startsWith('git+ssh://git@github.com/')) {\n return {\n name: input.slice(25, -45),\n id: input.slice(-40),\n type: 'github'\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = ({type, id, name, registry, hash}) => {\n if (type === 'github') {\n return `git+ssh://git@github.com/${name}.git#${id}`\n }\n\n return formatTarballUrl(name as string, id, registry, hash)\n}\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 {\n TDependencies,\n TSnapshot,\n TSnapshotIndex,\n ICheck,\n IFormat,\n IParse,\n IPreformat,\n TSource,\n TResolution,\n IParseResolution,\n IFormatResolution\n} from '../interface'\nimport {parseIntegrity, formatTarballUrl, parseTarballUrl, referenceKeysSorter} from '../common'\nimport {debug, unique} from '../util'\n\nconst kvEntryPattern = /^(\\s+)\"?([^\"]+)\"?\\s\"?([^\"]+)\"?$/\n\nexport type TYarn1Lockfile = Record<string, {\n version: string\n resolved: string\n integrity: string\n dependencies?: TDependencies\n optionalDependencies?: TDependencies\n}>\n\nexport const version = 'yarn-classic'\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 { version, integrity, dependencies, optionalDependencies, resolved } = _entry\n const hashes = parseIntegrity(integrity)\n const source: TSource = parseResolution(resolved)\n const chunks = _key.split(', ')\n const names = unique(chunks.map(c => c.slice(0, c.indexOf('@', 1))))\n\n for (const name of names) {\n const ranges = chunks.filter(c => c.startsWith(`${name}@`)).map(r => r.slice(r.indexOf('@', 1) + 1)).sort()\n const key = `${name}@${version}`\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n optionalDependencies,\n source,\n }\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: manifest.dependencies,\n devDependencies: manifest.devDependencies,\n optionalDependencies: manifest.optionalDependencies,\n }\n\n debug.json('yarn-classic-snapshot.json', snapshot)\n\n return snapshot\n}\n\n\n\nexport const preformat: IPreformat<TYarn1Lockfile> = (idx): TYarn1Lockfile => {\n const {snapshot} = idx\n const lf: TYarn1Lockfile = {}\n const rangemap: Record<string, {keys: string[], key: string, name: string}> = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes, dependencies, optionalDependencies, source } = entry\n const resolved = formatResolution(source)\n const alias = rangemap[resolved]\n const integrity = Object.entries(hashes).map(([k, v]) => `${k}-${v}`).join(' ')\n const keys = ranges.map(r => `${name}@${r}`)\n\n if (alias) {\n keys.push(...alias.keys)\n keys.sort(referenceKeysSorter)\n delete lf[alias.key]\n }\n\n const key = keys.join(', ')\n\n rangemap[resolved] = {keys, key, name}\n lf[key] = {\n version,\n resolved,\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 noRefs: 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.includes('npm:')? `\"${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\nexport const parseResolution: IParseResolution = (input: string): TResolution => {\n // https://github.com/yarnpkg/yarn/blob/master/src/resolvers/exotics/github-resolver.js\n // https://github.com/yarnpkg/yarn/blob/master/src/resolvers/exotics/git-resolver.js\n if (input.startsWith('https://codeload.github.com/')) {\n // https://codeload.github.com/mixmaxhq/throng/tar.gz/8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // 28 x 8 40\n return {\n type: 'github',\n name: input.slice(28, -48),\n id: input.slice(-40)\n }\n }\n\n const npmResolution = parseTarballUrl(input)\n if (!npmResolution) throw new TypeError(`Unsupported resolution format: ${input}`)\n\n return npmResolution\n}\n\nexport const formatResolution: IFormatResolution = ({type, id, name = '', registry = 'https://registry.yarnpkg.com', hash = ''}: TResolution): string => {\n if (type === 'github') {\n return `https://codeload.github.com/${name}/tar.gz/${id}`\n }\n\n return formatTarballUrl(name, id, registry, hash)\n}\n\nconst formatReference = (input: string): string => {\n const colonPos = input.indexOf(':')\n const protocol = input.slice(0, colonPos)\n const ref = input.slice(colonPos + 1)\n\n if (protocol === 'git' || protocol === 'tag' || protocol === 'semver' || protocol === 'npm') {\n return ref\n }\n\n return input\n}", "// https://github.com/yarnpkg/berry/commit/2f9e8073d15745f9d53e6b8b42fa9c81eb143d54\n\nimport {load, dump} from 'js-yaml'\nimport {\n ICheck,\n IFormat,\n IFormatOpts,\n IParse,\n IParseResolution,\n IPreformat,\n TDependencies,\n TDependenciesMeta,\n TSnapshot,\n TSnapshotIndex, TSource,\n TSourceType\n} from '../interface'\nimport {normalizeDeps, normalizeReference, parseIntegrity, processDeps, referenceKeysSorter} from '../common'\nimport {debug, sortObject, unique} 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\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 names = unique(chunks.map(c => c.slice(0, c.indexOf('@', 1))))\n\n for (const name of names) {\n const key = `${name}@${version}`\n // seems like a patch\n if (_key.includes('#')) {\n snapshot[key].patch = {\n resolution,\n refs: chunks,\n checksum\n }\n return\n }\n\n const ranges = chunks.filter(c => c.startsWith(`${name}@`)).map(r => r.slice(r.indexOf('@', 1) + 1)).map(normalizeReference)//.sort()\n const hashes = parseIntegrity(checksum)\n const source = parseResolution(resolution)\n\n snapshot[key] = {\n name,\n version,\n ranges,\n hashes,\n source,\n dependencies: normalizeDeps(dependencies),\n dependenciesMeta,\n optionalDependencies: normalizeDeps(optionalDependencies),\n peerDependencies: normalizeDeps(peerDependencies),\n peerDependenciesMeta,\n bin,\n conditions,\n }\n\n if (source.type === 'workspace') {}\n }\n })\n\n snapshot[\"\"] = {\n name: manifest.name,\n version: manifest.version,\n ranges: [],\n hashes: {},\n source: {\n type: 'workspace',\n id: '.'\n },\n manifest,\n dependencies: normalizeDeps(manifest.dependencies),\n devDependencies: normalizeDeps(manifest.devDependencies),\n optionalDependencies: normalizeDeps(manifest.optionalDependencies),\n }\n\n debug.json('yarn-berry-snapshot.json', snapshot)\n return snapshot\n}\n\nexport const preformat: IPreformat<TYarn5Lockfile> = (idx): TYarn5Lockfile => {\n const {snapshot} = idx\n const lf: TYarn5Lockfile = {}\n const rangemap: Record<string, {keys: string[], key: string, name: string}> = {}\n\n Object.values(snapshot).forEach((entry) => {\n const { name, version, ranges, hashes: {checksum}, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, patch, bin, conditions } = entry\n const resolution = formatResolution(source)\n const alias = rangemap[resolution]\n const isLocal = version === '0.0.0-use.local'\n const languageName = isLocal ? 'unknown' : 'node'\n const linkType = isLocal ? 'soft' : 'hard'\n const keys = ranges.map(r => `${name}@${formatReference(r, {semverAsNpm: true, isLocal})}`)\n\n if (alias) {\n keys.push(...alias.keys)\n keys.sort(referenceKeysSorter)\n delete lf[alias.key]\n }\n\n const key = keys.join(', ')\n\n rangemap[resolution] = {keys, key, name}\n lf[key] = {\n version,\n resolution,\n dependencies: formatDeps(dependencies),\n dependenciesMeta,\n optionalDependencies: formatDeps(optionalDependencies),\n peerDependencies: formatDeps(peerDependencies),\n peerDependenciesMeta,\n bin,\n checksum: checksum as string,\n conditions,\n languageName,\n linkType,\n }\n\n if (patch) {\n lf[patch.refs.join(', ')] = {\n ...lf[key],\n resolution: patch.resolution,\n checksum: patch.checksum,\n }\n }\n })\n\n delete lf[\"\"]\n\n return sortObject(lf)\n}\n\nexport const format: IFormat = (snapshot: TSnapshot, {__metadata = {\n version: 5,\n cacheKey: 8,\n}} = {}): string => {\n const lines = dump({\n __metadata,\n ...preformat({snapshot} as TSnapshotIndex)\n }, {\n quotingType: '\"',\n flowLevel: -1,\n lineWidth: -1,\n forceQuotes: false,\n noRefs: true\n })\n .split('\\n')\n .map(line => {\n if (line === '__metadata:') {\n return `\\n${line}`\n }\n\n if (line.length !==0 && line.charAt(0) !== ' ') {\n return `\\n\"${line.replaceAll('\"', '').slice(0, -1)}\":`\n }\n\n if (line.startsWith(' resolution: ')) {\n return line.replaceAll('\"', '').replace(' resolution: ', ' resolution: \"').concat('\"')\n }\n\n return line\n })\n\n const _value = lines.join('\\n')\n\n return `# This file is generated by running \"yarn install\" inside your project.\n# Manual changes might be lost - proceed with caution!\n${_value}`\n}\n\ntype IFormatReferenceOpts = Partial<{\n semverAsNpm: boolean\n isLocal: boolean\n}>\n\nconst formatReference = (input: string, opts: IFormatReferenceOpts = {}): string | number => {\n const colonPos = input.indexOf(':')\n const protocol = input.slice(0, colonPos)\n const ref = input.slice(colonPos + 1)\n\n if (protocol === 'git' || protocol === 'tag') {\n return ref\n }\n\n if (protocol === 'semver') {\n return opts.semverAsNpm && !opts.isLocal\n ? 'npm:' + ref\n : /^\\d+$/.test(ref) ? +ref : ref\n }\n // TODO restore github short alias\n\n return input\n}\n\nconst formatDeps = (deps?: TDependencies, opts?: IFormatReferenceOpts) => processDeps(deps, formatReference, opts)\n\nexport const parseResolution: IParseResolution = (input: string) => {\n const colonPos = input.indexOf(':')\n const atPos = input.indexOf('@', 1)\n const name = input.slice(0, atPos)\n\n if (colonPos === -1) {\n return {\n name,\n id: input.slice(atPos + 1),\n type: 'npm'\n }\n }\n\n // throng@https://github.com/mixmaxhq/throng.git#commit=8a015a378c2c0db0c760b2147b2468a1c1e86edf\n // x 18 y 12 40\n if (input.includes('https://github.com')) {\n return {\n type: 'github',\n name: input.slice(atPos + 20, -52),\n id: input.slice(-40),\n alias: input.slice(0, input.indexOf('@', 1))\n }\n }\n\n return {\n name,\n id: input.slice(colonPos + 1),\n type: input.slice(atPos + 1, colonPos) as TSourceType\n }\n}\n\nexport const formatResolution = ({name, id, type = 'npm', alias = name, hash}: TSource): string => {\n // https://github.com/yarnpkg/berry/blob/a8ea92828badb4b6a1edddae18b0a163b0c4d2c5/packages/plugin-github/sources/GithubFetcher.ts\n if (type === 'github') {\n return `${alias}@https://github.com/${name}.git#commit=${id}`\n }\n return `${name}@${type === 'semver' ? '' : type + ':'}${id}`\n}", "import {parse as parseNpm1, check as checkNpm1} from './formats/npm-1'\nimport {parse as parseNpm2, check as checkNpm2} from './formats/npm-2'\nimport {parse as parseNpm3, check as checkNpm3} from './formats/npm-3'\nimport {parse as parseYarnClassic, check as checkYarnClassic} from './formats/yarn-classic'\nimport {parse as parseYarnBerry, check as checkYarnBerry} from './formats/yarn-berry'\nimport {ICheck, IParse, TSnapshot} from './interface'\n\nconst isPkgJson = (input: string) => input.startsWith('{') && input.includes('\"name\":')\nconst variants: [ICheck, IParse][] = [\n [checkNpm1, parseNpm1],\n [checkNpm2, parseNpm2],\n [checkNpm3, parseNpm3],\n [checkYarnClassic, parseYarnClassic],\n [checkYarnBerry, parseYarnBerry],\n]\nexport const parse = (...inputs: (string|Buffer)[]): TSnapshot => {\n const [lockfile, ...pkgJsons] = inputs.map((input) => input.toString('utf8'))\n const [,parser] = variants.find(([check]) => check(lockfile)) || []\n\n if (!parser) {\n throw new TypeError('Unsupported lockfile format')\n }\n\n if (!pkgJsons.every(isPkgJson)) {\n throw new TypeError('Invalid package json')\n }\n\n return parser(lockfile, ...pkgJsons)\n}\n", "import {IFormat, IFormatOpts, TSnapshot} from './interface'\n\nimport {version as versionNpm1, format as formatNpm1} from './formats/npm-1'\nimport {version as versionNpm2, format as formatNpm2} from './formats/npm-2'\nimport {version as versionNpm3, format as formatNpm3} from './formats/npm-3'\nimport {version as versionYarnClassic, format as formatYarnClassic} from './formats/yarn-classic'\nimport {version as versionYarnBerry, format as formatYarnBerry} from './formats/yarn-berry'\n\nconst variants: [string, IFormat][] = [\n [versionNpm1, formatNpm1],\n [versionNpm2, formatNpm2],\n [versionNpm3, formatNpm3],\n [versionYarnClassic, formatYarnClassic],\n [versionYarnBerry, formatYarnBerry],\n]\n\nexport const format = (snapshot: TSnapshot, version: string, opts?: IFormatOpts): string => {\n const [,formatter] = variants.find(([_version]) => version === _version) || []\n\n if (!formatter) {\n throw new TypeError(`Unsupported lockfile format: ${version}`)\n }\n\n return formatter(snapshot, opts)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["version", "version", "deps", "version", "name", "formatIntegrity", "parents", "semver", "version", "check", "parse", "entries", "variants", "path", "parseResolution", "preformat", "formatResolution", "format", "version", "check", "preformat", "format", "version", "check", "parse", "value", "parseResolution", "preformat", "formatResolution", "format", "load", "dump", "version", "check", "parse", "load", "parseResolution", "preformat", "formatResolution", "format", "dump", "check", "parse", "variants", "version", "format"]
7
7
  }