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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/main/ts/util.ts", "../../src/main/ts/npm-1.ts", "../../src/main/ts/yarn-1.ts", "../../src/main/ts/yarn-5.ts", "../../src/main/ts/common.ts", "../../src/main/ts/index.ts"],
4
- "sourcesContent": ["import {THashes} from \"./interface\";\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 const sortObject = <T extends Record<string, any>>(unordered: T): T =>\n Object.entries({...unordered})\n .sort(([a], [b]) => a > b ? 1 : -1)\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}", "import {TDependencies, THashes, TLockfileEntry, TManifest, TSnapshot} from './interface'\nimport {parseIntegrity, sortObject} from './util'\nimport fs from 'fs'\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 parse = async (lockfile: string, pkg: string): Promise<TSnapshot> => {\n const lf: TNpm1Lockfile = await JSON.parse(lockfile)\n const manifest: TManifest = await JSON.parse(pkg)\n const workspaces = {\n \"\": {\n name: manifest.name,\n path: '.',\n manifest\n }\n }\n const entries: Record<string, TLockfileEntry> = {\n \"\": {\n name: manifest.name,\n version: manifest.version,\n dependencies: {\n ...manifest.dependencies,\n ...manifest.devDependencies,\n },\n hashes: {},\n ranges: [],\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<TLockfileEntry> = {}): TLockfileEntry => {\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(entries[\"\"].dependencies, lf.dependencies || {})\n\n return {\n format: 'npm-1',\n entries: sortObject(entries),\n workspaces,\n }\n}\n\n\nconst formatIntegrity = (hashes: THashes): string => Object.entries(hashes).map(([key, value]) => `${key}-${value}`).join(' ')\n\nconst createIndex = () => {\n const prod = new Set()\n const deps = new Map()\n\n return {\n prod,\n deps,\n getDeps (entry: TLockfileEntry): TLockfileEntry[] {\n if (!deps.has(entry)) { deps.set(entry, [])}\n return deps.get(entry)\n }\n }\n}\n\nconst isProd = (manifest: TManifest, name: string): boolean => !!manifest.dependencies?.[name]\n\nexport const format = async (snap: TSnapshot): Promise<string> => {\n const root = snap.workspaces[''].manifest\n const entries: TLockfileEntry[]= Object.values(snap.entries)\n const idx = createIndex()\n\n entries.forEach((entry) => {\n entry.dependencies && Object.entries(entry.dependencies).forEach(([_name, range]) => {\n const target = entries.find(({name, ranges}) => name === _name && ranges.includes(range))\n if (target) {\n idx.getDeps(entry).push(target)\n }\n })\n })\n\n const deptree: TLockfileEntry[][] = []\n const fillTree = (entry: TLockfileEntry, chain: TLockfileEntry[] = []) => {\n const deps = idx.getDeps(entry)\n deps.forEach(c => isProd(root, chain[0]?.name || c.name) && idx.prod.add(c))\n\n deps\n .sort((a, b) =>\n idx.prod.has(a) && !idx.prod.has(b)\n ? -1\n : idx.prod.has(b) && !idx.prod.has(a)\n ? 1\n : a.name.localeCompare(b.name)\n )\n\n deps.forEach((dep) => deptree.push([...chain, dep]))\n deps.forEach((dep) => fillTree(dep, [...chain, dep]))\n }\n\n const getEntry = (name: string, version: string) => entries.find((e) => e.name === name && e.version === version)\n fillTree(getEntry(root.name, root.version)!)\n\n const formatNpm1LockfileEntry = (entry: TLockfileEntry): TNpm1LockfileEntry => {\n const {name, version, hashes} = entry\n const _name = name.slice(name.indexOf('/') + 1)\n const _entry: TNpm1LockfileDeps[string] = {\n version,\n resolved: `https://registry.npmjs.org/${name}/-/${_name}-${version}.tgz`,\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 = 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 fs.writeFileSync('temp/test.json', JSON.stringify(lf, null, 2))\n fs.writeFileSync('temp/tree.json', JSON.stringify(\n deptree.map(c => c.map(e => `${e.name}@${e.version}`).join(' > ')),\n null,\n 2\n ))\n\n return JSON.stringify(lf, null, 2)\n}\n", "import {load, dump} from 'js-yaml'\nimport {TDependencies, TSnapshot, THashes} from './interface'\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 check = (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\nconst parseIntegrity = (integrity: string): THashes =>\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 }\n return m\n }, {})\n\nexport const parse = async (value: string): Promise<TSnapshot> => {\n const raw = await preparse(value)\n const snapshot: TSnapshot = {\n entries: {},\n workspaces: {},\n format: 'yarn-1',\n }\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.entries[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n optionalDependencies,\n source,\n }\n })\n\n return snapshot\n}\n\nexport const preformat = (value: TSnapshot): TYarn1Lockfile => {\n const lf: TYarn1Lockfile = {}\n\n Object.values(value.entries).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 return lf\n}\n\nexport const format = (value: TSnapshot): string => {\n const lf = preformat(value)\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 {TDependencies, TDependenciesMeta, TSnapshot} from './interface'\nimport {parseIntegrity} 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 check = (value: string): boolean => value.includes(`\n__metadata:\n version: 5\n`)\n\nexport const parse = async (lockfile: string, pkg: string): Promise<TSnapshot> => {\n const snapshot: TSnapshot = {\n entries: {},\n workspaces: {},\n format: 'yarn-5',\n }\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: source, bin, conditions } = _entry\n const name = chunks[0].slice(0, chunks[0].lastIndexOf('@'))\n const key = `${name}@${version}`\n const hashes = parseIntegrity(checksum)\n\n snapshot.entries[key] = {\n name,\n version,\n ranges,\n hashes,\n dependencies,\n dependenciesMeta,\n optionalDependencies,\n peerDependencies,\n peerDependenciesMeta,\n source,\n bin,\n conditions,\n }\n })\n\n return snapshot\n}\n\nexport const preformat = (value: TSnapshot): TYarn5Lockfile => {\n const lf: TYarn5Lockfile = {}\n\n Object.values(value.entries).forEach((entry) => {\n const { name, version, ranges, hashes: {checksum}, dependencies, dependenciesMeta, optionalDependencies, peerDependencies, peerDependenciesMeta, source, 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: source as string,\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 return lf\n}\n\nexport const format = (value: TSnapshot): string => {\n const lines = dump({\n __metadata: {\n version: 5,\n cacheKey: 8,\n },\n ...preformat(value)\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 {TSnapshot} from './interface'\n\nexport const normalizeOptions = () => {\n\n}\n\nexport const getSources = (snapshot: TSnapshot): string[] =>\n Object.values(snapshot.entries)\n .map(entry => entry.source as string)\n .filter(Boolean)\n", "import {parse as parseNpm1, format as formatNpm1} from './npm-1'\nimport {parse as parseYarn1, format as formatYarn1, check as checkYarn1} from './yarn-1'\nimport {parse as parseYarn5, format as formatYarn5, check as checkYarn5} from './yarn-5'\nimport {TSnapshot} from './interface'\n\nexport const foo = 'bar'\n\nexport { getSources } from './common'\n\nexport {\n parseNpm1,\n formatNpm1,\n parseYarn1,\n formatYarn1,\n parseYarn5,\n formatYarn5\n}\n\nexport const parse = async (lockfile: string, pkg: string): Promise<TSnapshot> => {\n if (checkYarn1(lockfile)) {\n return parseYarn1(lockfile)\n }\n\n if (checkYarn5(lockfile)) {\n return parseYarn5(lockfile, pkg)\n }\n\n return parseNpm1(lockfile, pkg)\n}"],
5
- "mappings": "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",
6
- "names": ["name", "version", "parents", "parseIntegrity", "parse", "value", "format", "load", "dump", "check", "parse", "load", "preformat", "format", "dump", "parse", "check"]
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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",
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
  }
@@ -1,8 +1,5 @@
1
- export declare type TLockfileFormat = 'npm-1' | 'npm-2' | 'yarn-1' | 'yarn-5' | 'yarn-6' | 'yarn-7';
2
- export declare type TScope = 'prod' | 'dev' | 'peer' | 'opt';
3
- export declare type TSourceType = 'npm' | 'gh' | 'file' | 'workspace';
4
- export declare type TDependencies = Record<string, string>;
5
- export declare type TDependenciesMeta = Record<string, {
1
+ export type TDependencies = Record<string, string>;
2
+ export type TDependenciesMeta = Record<string, {
6
3
  optional: boolean;
7
4
  }>;
8
5
  export interface THashes {
@@ -12,21 +9,42 @@ export interface THashes {
12
9
  checksum?: string;
13
10
  md5?: string;
14
11
  }
15
- export interface TLockfileEntry {
12
+ export type TSourceType = 'npm' | 'github' | 'file' | 'workspace' | 'semver' | 'patch';
13
+ export interface TSource {
14
+ type: TSourceType;
15
+ id: string;
16
+ registry?: string;
17
+ name?: string;
18
+ hash?: string;
19
+ alias?: string;
20
+ }
21
+ export interface TResolution extends TSource {
22
+ name?: string;
23
+ hash?: string;
24
+ }
25
+ export interface TEntry {
16
26
  name: string;
17
27
  version: string;
18
28
  ranges: string[];
19
29
  hashes: THashes;
20
- scope?: TScope;
30
+ source: TSource;
31
+ manifest?: TManifest;
21
32
  conditions?: string;
22
33
  dependencies?: TDependencies;
23
34
  dependenciesMeta?: TDependenciesMeta;
35
+ devDependencies?: TDependencies;
24
36
  optionalDependencies?: TDependencies;
25
37
  peerDependencies?: TDependencies;
26
38
  peerDependenciesMeta?: TDependenciesMeta;
27
- sourceType?: TSourceType;
28
- source?: string;
29
39
  bin?: Record<string, string>;
40
+ engines?: Record<string, string>;
41
+ funding?: Record<string, string>;
42
+ license?: string;
43
+ patch?: {
44
+ resolution: string;
45
+ refs: string[];
46
+ checksum: string;
47
+ };
30
48
  }
31
49
  export interface TManifest {
32
50
  name: string;
@@ -36,28 +54,36 @@ export interface TManifest {
36
54
  peerDependencies?: TDependencies;
37
55
  [key: string]: any;
38
56
  }
39
- export interface TWorkspace {
40
- name: string;
41
- path: string;
42
- manifest: TManifest;
43
- }
44
- export interface TSnapshot {
45
- format: TLockfileFormat;
46
- entries: Record<string, TLockfileEntry>;
47
- workspaces: Record<string, TWorkspace>;
48
- }
49
- export interface TParseOptions {
50
- cwd?: string;
51
- lockfile?: string;
52
- workspaces?: Record<string, TWorkspace>;
57
+ export type TSnapshot = Record<string, TEntry>;
58
+ export interface TSnapshotIndex {
59
+ snapshot: TSnapshot;
60
+ entries: TEntry[];
61
+ roots: TEntry[];
62
+ edges: [string, string][];
63
+ tree: Record<string, {
64
+ name: string;
65
+ version: string;
66
+ id: string;
67
+ key: string;
68
+ chunks: string[];
69
+ parents: TEntry[];
70
+ entry: TEntry;
71
+ }>;
72
+ prod: Set<TEntry>;
73
+ bound(from: TEntry, to: TEntry): void;
74
+ getEntryId({ name, version }: TEntry): string;
75
+ getEntry(name: string, version?: string): TEntry | undefined;
76
+ getEntryByRange(name: string, range: string): TEntry | undefined;
77
+ getEntryDeps(entry: TEntry): TEntry[];
53
78
  }
54
- export declare type IParse = {
55
- (data: string, opts?: TParseOptions): Promise<TSnapshot>;
56
- (opts?: TParseOptions): Promise<TSnapshot>;
57
- };
58
- export declare type IFormatOptions = {
59
- format: TLockfileFormat;
60
- };
61
- export declare type IFormat = {
62
- (data: TSnapshot, opts?: IFormatOptions): Promise<string>;
79
+ export type IParse = (lockfile: string, ...pkgJsons: string[]) => TSnapshot;
80
+ export type IFormatOpts = {
81
+ meta?: Record<string, Partial<TEntry>>;
82
+ [index: string]: any;
63
83
  };
84
+ export type IFormat = (snapshot: TSnapshot, opts?: IFormatOpts) => string;
85
+ export type IFormatReference = (value: string, opts: any) => string | number;
86
+ export type IPreformat<T> = (idx: TSnapshotIndex) => T;
87
+ export type ICheck = (input: string) => boolean;
88
+ export type IParseResolution = (input: string) => TResolution;
89
+ export type IFormatResolution = (resolution: TResolution) => string;
@@ -1,5 +1,5 @@
1
1
  import { TSnapshot } from './interface';
2
- export declare type TNpm1LockfileEntry = {
2
+ export type TNpm1LockfileEntry = {
3
3
  version: string;
4
4
  resolved: string;
5
5
  integrity: string;
@@ -7,8 +7,8 @@ export declare type TNpm1LockfileEntry = {
7
7
  requires?: Record<string, string>;
8
8
  dependencies?: TNpm1LockfileDeps;
9
9
  };
10
- export declare type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>;
11
- export declare type TNpm1Lockfile = {
10
+ export type TNpm1LockfileDeps = Record<string, TNpm1LockfileEntry>;
11
+ export type TNpm1Lockfile = {
12
12
  lockfileVersion: 1;
13
13
  name: string;
14
14
  version: string;
File without changes
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import { TSnapshot } from './interface';
3
+ export declare const parse: (...inputs: (string | Buffer)[]) => TSnapshot;
@@ -1,5 +1,8 @@
1
- import { THashes } from "./interface";
2
- export declare const parseIntegrity: (integrity: string) => THashes;
3
- export declare const formatIntegrity: (hashes: THashes) => string;
4
- export declare const sortObject: <T extends Record<string, any>>(unordered: T) => T;
1
+ export declare const sortObject: <T extends Record<string, any>>(unordered: T, predicate?: (a: [string, any], b: [string, any]) => number) => T;
5
2
  export declare const flushObject: (obj: Record<string, any>) => Record<string, any>;
3
+ export declare const loadContents: (value: string) => Promise<string>;
4
+ export declare const debug: ((...chunks: any[]) => void) & {
5
+ enable: string | undefined;
6
+ json(data: any, name?: any, base?: string): void;
7
+ };
8
+ export declare const unique: (arr: string[]) => string[];
@@ -0,0 +1,16 @@
1
+ export interface IWorkpspacifyOptions {
2
+ cwd: string;
3
+ strategy?: string;
4
+ }
5
+ export declare const mapReference: (current: string, targetProtocol: string, strategy?: string) => string;
6
+ /**
7
+ * Replaces local `npm:`-protocol refs with `workspace:`
8
+ */
9
+ export declare const workspacify: ({ cwd, strategy }: {
10
+ cwd: any;
11
+ strategy: any;
12
+ }) => void;
13
+ /**
14
+ * Replaces `wokspaces:` refs with std `npm:` links.
15
+ */
16
+ export declare const deworkspacify: () => void;
@@ -1,5 +1,5 @@
1
1
  import { TDependencies, TSnapshot } from './interface';
2
- export declare type TYarn1Lockfile = Record<string, {
2
+ export type TYarn1Lockfile = Record<string, {
3
3
  version: string;
4
4
  resolved: string;
5
5
  integrity: string;
@@ -1,5 +1,5 @@
1
1
  import { TDependencies, TDependenciesMeta, TSnapshot } from './interface';
2
- export declare type TYarn5Lockfile = Record<string, {
2
+ export type TYarn5Lockfile = Record<string, {
3
3
  version: string;
4
4
  resolution: string;
5
5
  conditions?: string;