feat(lockfile)!: dividing "packages" field to "packages" and "snapshots" (#7700)

close #7685
This commit is contained in:
Zoltan Kochan
2024-03-04 23:31:01 +01:00
committed by GitHub
parent 3097bcf373
commit 1ecda50502
63 changed files with 1501 additions and 694 deletions

View File

@@ -99,7 +99,8 @@ async function updateTSConfig (
manifest.name === '@pnpm/git-fetcher' ||
manifest.name === '@pnpm/tarball-fetcher' ||
manifest.name === '@pnpm/package-requester'
)
) ||
depName === 'pnpm' && manifest.name === '@pnpm/make-dedicated-lockfile'
) {
// This is to avoid a circular graph (which TypeScript references do not support.
continue

View File

@@ -0,0 +1,13 @@
diff --git a/lib/dumper.js b/lib/dumper.js
index 01775b346be6bfe0e3bcee4e6f2788480ac060e9..6dd3635d599b513aebc054b15d5e239d3a7c0bf0 100644
--- a/lib/dumper.js
+++ b/lib/dumper.js
@@ -842,7 +842,7 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq, obje
singleLineOnly = SINGLE_LINE_KEYS[objectKey];
if (block && (Object.keys(state.dump).length !== 0) && !singleLineOnly) {
var doubleLine = state.blankLines ?
- (objectKey === 'packages' || objectKey === 'importers' || level === 0) : false;
+ (objectKey === 'packages' || objectKey === 'importers' || objectKey === 'snapshots' || level === 0) : false;
writeBlockMapping(state, level, state.dump, compact, doubleLine);
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;

View File

@@ -2,7 +2,7 @@ import fs from 'fs'
import path from 'path'
import { assertStore } from '@pnpm/assert-store'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { type LockfileFile } from '@pnpm/lockfile-types'
import { type LockfileFileV7 } from '@pnpm/lockfile-types'
import { type Modules } from '@pnpm/modules-yaml'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import { sync as readYamlFile } from 'read-yaml-file'
@@ -30,14 +30,14 @@ export interface Project {
*
* https://github.com/microsoft/TypeScript/pull/32695 might help with this.
*/
readCurrentLockfile: () => Required<LockfileFile>
readCurrentLockfile: () => Required<LockfileFileV7>
readModulesManifest: () => Modules | null
/**
* TODO: Remove the `Required<T>` cast.
*
* https://github.com/microsoft/TypeScript/pull/32695 might help with this.
*/
readLockfile: (lockfileName?: string) => Required<LockfileFile>
readLockfile: (lockfileName?: string) => Required<LockfileFileV7>
writePackageJson: (pkgJson: object) => void
}

View File

@@ -51,6 +51,7 @@
"@pnpm/error": "workspace:*",
"@pnpm/git-utils": "workspace:*",
"@pnpm/lockfile-types": "workspace:*",
"@pnpm/lockfile-utils": "workspace:*",
"@pnpm/merge-lockfile-changes": "workspace:*",
"@pnpm/types": "workspace:*",
"@pnpm/util.lex-comparator": "1.0.0",

View File

@@ -1,25 +1,65 @@
import {
type Lockfile,
type ProjectSnapshot,
type PackageSnapshotV7,
type ResolvedDependencies,
type LockfileFile,
type InlineSpecifiersLockfile,
type InlineSpecifiersProjectSnapshot,
type InlineSpecifiersResolvedDependencies,
type PackageInfo,
type LockfileFileV7,
type PackageSnapshots,
type PackageSnapshot,
} from '@pnpm/lockfile-types'
import { packageIdFromSnapshot } from '@pnpm/lockfile-utils'
import { DEPENDENCIES_FIELDS } from '@pnpm/types'
import equals from 'ramda/src/equals'
import isEmpty from 'ramda/src/isEmpty'
import _mapValues from 'ramda/src/map'
import omit from 'ramda/src/omit'
import pickBy from 'ramda/src/pickBy'
import pick from 'ramda/src/pick'
export interface NormalizeLockfileOpts {
forceSharedFormat: boolean
}
export function convertToLockfileFile (lockfile: Lockfile, opts: NormalizeLockfileOpts): LockfileFile {
const packages: Record<string, PackageInfo> = {}
const snapshots: Record<string, PackageSnapshotV7> = {}
for (const [depPath, pkg] of Object.entries(lockfile.packages ?? {})) {
snapshots[depPath] = pick([
'dependencies',
'optionalDependencies',
'transitivePeerDependencies',
'dev',
'optional',
'id',
], pkg)
const pkgId = packageIdFromSnapshot(depPath, pkg)
if (!packages[pkgId]) {
packages[pkgId] = pick([
'bundleDependencies',
'bundledDependencies',
'cpu',
'deprecated',
'engines',
'hasBin',
'libc',
'name',
'os',
'peerDependencies',
'peerDependenciesMeta',
'resolution',
'version',
], pkg)
}
}
const newLockfile = {
...lockfile,
snapshots,
packages,
lockfileVersion: lockfile.lockfileVersion.toString(),
importers: mapValues(lockfile.importers, convertProjectSnapshotToInlineSpecifiersFormat),
}
@@ -42,6 +82,9 @@ function normalizeLockfile (lockfile: InlineSpecifiersLockfile, opts: NormalizeL
if (isEmpty(lockfileToSave.packages) || (lockfileToSave.packages == null)) {
delete lockfileToSave.packages
}
if (isEmpty((lockfileToSave as LockfileFileV7).snapshots) || ((lockfileToSave as LockfileFileV7).snapshots == null)) {
delete (lockfileToSave as LockfileFileV7).snapshots
}
} else {
lockfileToSave = {
...lockfile,
@@ -64,6 +107,9 @@ function normalizeLockfile (lockfile: InlineSpecifiersLockfile, opts: NormalizeL
if (isEmpty(lockfileToSave.packages) || (lockfileToSave.packages == null)) {
delete lockfileToSave.packages
}
if (isEmpty((lockfileToSave as LockfileFileV7).snapshots) || ((lockfileToSave as LockfileFileV7).snapshots == null)) {
delete (lockfileToSave as LockfileFileV7).snapshots
}
}
if (lockfileToSave.time) {
lockfileToSave.time = pruneTimeInLockfileV6(lockfileToSave.time, lockfile.importers ?? {})
@@ -139,7 +185,10 @@ function convertFromLockfileFileMutable (lockfileFile: LockfileFile): InlineSpec
return lockfileFile as InlineSpecifiersLockfile
}
export function convertToLockfileObject (lockfile: LockfileFile): Lockfile {
export function convertToLockfileObject (lockfile: LockfileFile | LockfileFileV7): Lockfile {
if ((lockfile as LockfileFileV7).snapshots) {
return convertLockfileV7ToLockfileObject(lockfile as LockfileFileV7)
}
const { importers, ...rest } = convertFromLockfileFileMutable(lockfile)
const newLockfile = {
@@ -149,6 +198,21 @@ export function convertToLockfileObject (lockfile: LockfileFile): Lockfile {
return newLockfile
}
export function convertLockfileV7ToLockfileObject (lockfile: LockfileFileV7): Lockfile {
const { importers, ...rest } = convertFromLockfileFileMutable(lockfile)
const packages: PackageSnapshots = {}
for (const [depPath, pkg] of Object.entries(lockfile.snapshots ?? {})) {
const pkgId = packageIdFromSnapshot(depPath, pkg as PackageSnapshot)
packages[depPath] = Object.assign(pkg, lockfile.packages?.[pkgId])
}
return {
...omit(['snapshots'], rest),
packages,
importers: mapValues(importers ?? {}, revertProjectSnapshot),
}
}
function convertProjectSnapshotToInlineSpecifiersFormat (
projectSnapshot: ProjectSnapshot
): InlineSpecifiersProjectSnapshot {

View File

@@ -22,13 +22,21 @@ packages:
cpu: [x86]
os: [darwin]
libc: [glibc]
dependencies:
is-positive: 2.0.0
/is-positive@1.0.0:
resolution: {integrity: sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=}
/is-positive@2.0.0:
resolution: {integrity: sha1-ChbBDewTLAqLCzb793Fo5VDvg/g=}
snapshots:
/is-negative@1.0.0:
dependencies:
is-positive: 2.0.0
/is-positive@1.0.0: {}
/is-positive@2.0.0: {}
"
`;

View File

@@ -70,7 +70,7 @@ test('convertToLockfileFile()', () => {
'/foo@1.0.0': {
resolution: { integrity: '' },
},
'/@bar/bar@1.0.0(@babel/core@2.0.0)': {
'/@bar/bar@1.0.0': {
resolution: { integrity: '' },
},
'reg.com/qar@1.0.0': {
@@ -80,6 +80,12 @@ test('convertToLockfileFile()', () => {
resolution: { integrity: '' },
},
},
snapshots: {
'/foo@1.0.0': {},
'/@bar/bar@1.0.0(@babel/core@2.0.0)': {},
'reg.com/qar@1.0.0': {},
'@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {},
},
}
expect(convertToLockfileFile(lockfileV5, { forceSharedFormat: false })).toEqual(lockfileV6)
expect(convertToLockfileObject(lockfileV6)).toEqual(lockfileV5)
@@ -155,7 +161,7 @@ test('convertToLockfileFile() with lockfile v6', () => {
'/foo@1.0.0': {
resolution: { integrity: '' },
},
'/@bar/bar@1.0.0(@babel/core@2.0.0)': {
'/@bar/bar@1.0.0': {
resolution: { integrity: '' },
},
'reg.com/qar@1.0.0': {
@@ -165,6 +171,12 @@ test('convertToLockfileFile() with lockfile v6', () => {
resolution: { integrity: '' },
},
},
snapshots: {
'/foo@1.0.0': {},
'/@bar/bar@1.0.0(@babel/core@2.0.0)': {},
'reg.com/qar@1.0.0': {},
'@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {},
},
}
expect(convertToLockfileFile(lockfileV5, { forceSharedFormat: false })).toEqual(lockfileV6)
expect(convertToLockfileObject(lockfileV6)).toEqual(lockfileV5)

View File

@@ -27,6 +27,9 @@
{
"path": "../lockfile-types"
},
{
"path": "../lockfile-utils"
},
{
"path": "../merge-lockfile-changes"
}

View File

@@ -22,6 +22,20 @@ export interface Lockfile {
settings?: LockfileSettings
}
export interface LockfileV7 {
importers: Record<string, ProjectSnapshot>
lockfileVersion: number | string
time?: Record<string, string>
snapshots?: Record<string, PackageSnapshotV7>
packages?: Record<string, PackageInfo>
neverBuiltDependencies?: string[]
onlyBuiltDependencies?: string[]
overrides?: Record<string, string>
packageExtensionsChecksum?: string
patchedDependencies?: Record<string, PatchFile>
settings?: LockfileSettings
}
export interface ProjectSnapshot {
specifiers: ResolvedDependencies
dependencies?: ResolvedDependencies
@@ -72,6 +86,10 @@ export type LockfileResolution = Resolution | {
integrity: string
}
export type PackageSnapshotV7 = Pick<PackageSnapshot, 'dev' | 'optional' | 'dependencies' | 'optionalDependencies' | 'transitivePeerDependencies'>
export type PackageInfo = Pick<PackageSnapshot, 'id' | 'patched' | 'hasBin' | 'name' | 'version' | 'resolution' | 'peerDependencies' | 'peerDependenciesMeta' | 'bundledDependencies' | 'engines' | 'cpu' | 'os' | 'libc' | 'deprecated'>
export interface PackageSnapshot {
id?: string
dev?: true | false

View File

@@ -1,10 +1,17 @@
import type { Lockfile, ProjectSnapshot } from '.'
import type { Lockfile, PackageSnapshot, ProjectSnapshot } from '.'
import type { DependenciesMeta } from '@pnpm/types'
export type LockfileFile = Omit<InlineSpecifiersLockfile, 'importers'> &
Partial<InlineSpecifiersProjectSnapshot> &
Partial<Pick<InlineSpecifiersLockfile, 'importers'>>
export type LockfileFileV7 = Omit<InlineSpecifiersLockfile, 'importers' | 'packages'> &
Partial<InlineSpecifiersProjectSnapshot> &
Partial<Pick<InlineSpecifiersLockfile, 'importers'>> & {
packages?: Record<string, Pick<PackageSnapshot, 'resolution' | 'engines' | 'cpu' | 'os' | 'hasBin' | 'name' | 'version' | 'bundledDependencies' | 'peerDependencies' | 'peerDependenciesMeta' | 'deprecated'>>
snapshots?: Record<string, Pick<PackageSnapshot, 'dependencies' | 'optionalDependencies' | 'patched' | 'dev' | 'optional' | 'transitivePeerDependencies' | 'id'>>
}
/**
* Similar to the current Lockfile importers format (lockfile version 5.4 at
* time of writing), but specifiers are moved to each ResolvedDependencies block

View File

@@ -113,7 +113,8 @@
},
"patchedDependencies": {
"pkg@5.8.1": "__patches__/pkg.patch",
"graceful-fs@4.2.11": "__patches__/graceful-fs@4.2.11.patch"
"graceful-fs@4.2.11": "__patches__/graceful-fs@4.2.11.patch",
"@zkochan/js-yaml@0.0.6": "__patches__/@zkochan__js-yaml@0.0.6.patch"
},
"updateConfig": {
"ignoreDependencies": [

View File

@@ -46,9 +46,11 @@
},
"funding": "https://opencollective.com/pnpm",
"devDependencies": {
"execa": "npm:safe-execa@0.1.2",
"@pnpm/make-dedicated-lockfile": "workspace:*",
"@pnpm/test-fixtures": "workspace:*",
"@types/ramda": "0.28.20"
"@types/ramda": "0.28.20",
"pnpm": "workspace:^"
},
"exports": {
".": "./lib/index.js"

View File

@@ -35,6 +35,89 @@ packages:
/connect@3.7.0:
resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
engines: {node: '>= 0.10.0'}
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
/ee-first@1.1.1:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
/encodeurl@1.0.2:
resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
engines: {node: '>= 0.8'}
/escape-html@1.0.3:
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
/express@1.0.0:
resolution: {integrity: sha1-SKQ9eKluuSMvYx0jzI3o+FTY4Ok=}
engines: {node: '>= 0.2.0'}
deprecated: express 1.x series is deprecated
hasBin: true
/finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
/lodash@1.0.0:
resolution: {integrity: sha1-JTXC99y2k3zujSZyxfcTju4N9qk=}
engines: {'0': node, '1': rhino}
/ms@2.0.0:
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
/on-finished@2.3.0:
resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
engines: {node: '>= 0.8'}
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
/ramda@0.26.0:
resolution: {integrity: sha512-maK1XqpgsOo5DwjhROjqDvpm1vkphLQbpleVv+b3t5Y9uOQ0t8hTHT582+mDs7RLrex1kd4lWYizNXWLVjsq9w==}
/request@2.0.0:
resolution: {integrity: sha512-/YiTJ2FZtvOWFhRE+HHiq3GxpX4e1RMEnqYYQM/0xhQRzQ/dgdHrfK+WB4uRW3OWrcTjWA6uE8GSMhwbm7dLLw==}
engines: {'0': node >= 0.3.6}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
/statuses@1.5.0:
resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
engines: {node: '>= 0.6'}
/unpipe@1.0.0:
resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
engines: {node: '>= 0.8'}
/utils-merge@1.0.1:
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
engines: {node: '>= 0.4.0'}
snapshots:
/ramda@0.26.0:
dev: false
/request@2.0.0:
dev: false
/lodash@1.0.0:
dev: false
/express@1.0.0:
dependencies:
connect: 3.7.0
transitivePeerDependencies:
- supports-color
dev: false
/connect@3.7.0:
dependencies:
debug: 2.6.9
finalhandler: 1.1.2
@@ -45,43 +128,14 @@ packages:
dev: false
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.0.0
dev: false
/ee-first@1.1.1:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
dev: false
/encodeurl@1.0.2:
resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
engines: {node: '>= 0.8'}
dev: false
/escape-html@1.0.3:
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
dev: false
/express@1.0.0:
resolution: {integrity: sha1-SKQ9eKluuSMvYx0jzI3o+FTY4Ok=}
engines: {node: '>= 0.2.0'}
deprecated: express 1.x series is deprecated
hasBin: true
dependencies:
connect: 3.7.0
transitivePeerDependencies:
- supports-color
/ms@2.0.0:
dev: false
/finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
dependencies:
debug: 2.6.9
encodeurl: 1.0.2
@@ -94,48 +148,28 @@ packages:
- supports-color
dev: false
/lodash@1.0.0:
resolution: {integrity: sha1-JTXC99y2k3zujSZyxfcTju4N9qk=}
engines: {'0': node, '1': rhino}
/encodeurl@1.0.2:
dev: false
/ms@2.0.0:
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
/escape-html@1.0.3:
dev: false
/on-finished@2.3.0:
resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
engines: {node: '>= 0.8'}
dependencies:
ee-first: 1.1.1
dev: false
/ee-first@1.1.1:
dev: false
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
dev: false
/ramda@0.26.0:
resolution: {integrity: sha512-maK1XqpgsOo5DwjhROjqDvpm1vkphLQbpleVv+b3t5Y9uOQ0t8hTHT582+mDs7RLrex1kd4lWYizNXWLVjsq9w==}
dev: false
/request@2.0.0:
resolution: {integrity: sha512-/YiTJ2FZtvOWFhRE+HHiq3GxpX4e1RMEnqYYQM/0xhQRzQ/dgdHrfK+WB4uRW3OWrcTjWA6uE8GSMhwbm7dLLw==}
engines: {'0': node >= 0.3.6}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
dev: false
/statuses@1.5.0:
resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
engines: {node: '>= 0.6'}
dev: false
/unpipe@1.0.0:
resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
engines: {node: '>= 0.8'}
dev: false
/utils-merge@1.0.1:
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
engines: {node: '>= 0.4.0'}
dev: false

View File

@@ -1,22 +1,29 @@
import fs from 'fs'
import path from 'path'
import pnpmExec from '@pnpm/exec'
import execa from 'execa'
import { readWantedLockfile } from '@pnpm/lockfile-file'
import { fixtures } from '@pnpm/test-fixtures'
import { makeDedicatedLockfile } from '../lib'
const f = fixtures(__dirname)
const pnpmBin = path.join(__dirname, '../../../pnpm/bin/pnpm.cjs')
test('makeDedicatedLockfile()', async () => {
const tmp = f.prepare('fixture')
fs.writeFileSync('.npmrc', 'store-dir=store\ncache-dir=cache', 'utf8')
await pnpmExec(['install', '--no-frozen-lockfile'], { cwd: tmp })
await execa('node', [
pnpmBin,
'install',
'--no-frozen-lockfile',
'--no-prefer-frozen-lockfile',
'--force',
], { cwd: tmp })
const projectDir = path.join(tmp, 'packages/is-negative')
await makeDedicatedLockfile(tmp, projectDir)
const lockfile = await readWantedLockfile(projectDir, { ignoreIncompatible: false })
expect(Object.keys(lockfile?.importers ?? {})).toStrictEqual(['.', 'example'])
expect(Object.keys(lockfile?.packages ?? {})).toStrictEqual([
expect(Object.keys(lockfile?.packages ?? {}).sort()).toStrictEqual([
'/is-positive@1.0.0',
'/lodash@1.0.0',
'/ramda@0.26.0',

View File

@@ -34,7 +34,6 @@ test('installing aliased dependency', async () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -43,7 +42,6 @@ test('installing aliased dependency', async () => {
},
},
'/is-positive@3.1.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -52,6 +50,14 @@ test('installing aliased dependency', async () => {
},
},
},
snapshots: {
'/is-negative@1.0.0': {
dev: false,
},
'/is-positive@3.1.0': {
dev: false,
},
},
})
})
@@ -95,19 +101,25 @@ test('a dependency has an aliased subdependency', async () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.1.0'),
},
},
'/@pnpm.e2e/pkg-with-1-aliased-dep@100.0.0': {
resolution: {
integrity: getIntegrity('@pnpm.e2e/pkg-with-1-aliased-dep', '100.0.0'),
},
},
},
snapshots: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0': {
dev: false,
},
'/@pnpm.e2e/pkg-with-1-aliased-dep@100.0.0': {
dependencies: {
dep: '/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/pkg-with-1-aliased-dep', '100.0.0'),
},
},
},
})

View File

@@ -12,7 +12,7 @@ test('auto install non-optional peer dependencies', async () => {
const project = prepareEmpty()
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-optional-peers@1.0.0'], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots)).toStrictEqual([
'/@pnpm.e2e/abc-optional-peers@1.0.0(@pnpm.e2e/peer-a@1.0.0)',
'/@pnpm.e2e/peer-a@1.0.0',
])
@@ -24,18 +24,18 @@ test('auto install the common peer dependency', async () => {
const project = prepareEmpty()
await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-1.0.0'], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm.e2e/peer-c@1.0.0',
'/@pnpm.e2e/wants-peer-c-1.0.0@1.0.0(@pnpm.e2e/peer-c@1.0.0)',
'/@pnpm.e2e/wants-peer-c-1@1.0.0(@pnpm.e2e/peer-c@1.0.0)',
])
].sort())
})
test('do not auto install when there is no common peer dependency range intersection', async () => {
const project = prepareEmpty()
await addDependenciesToPackage({}, ['@pnpm.e2e/wants-peer-c-1', '@pnpm.e2e/wants-peer-c-2'], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots)).toStrictEqual([
'/@pnpm.e2e/wants-peer-c-1@1.0.0',
'/@pnpm.e2e/wants-peer-c-2@1.0.0',
])
@@ -49,11 +49,11 @@ test('auto install latest when there is no common peer dependency range intersec
autoInstallPeersFromHighestMatch: true,
}))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm.e2e/peer-c@2.0.0',
'/@pnpm.e2e/wants-peer-c-1@1.0.0(@pnpm.e2e/peer-c@2.0.0)',
'/@pnpm.e2e/wants-peer-c-2@1.0.0(@pnpm.e2e/peer-c@2.0.0)',
])
].sort())
})
test('don\'t fail on linked package, when peers are auto installed', async () => {
@@ -87,17 +87,17 @@ test('hoist a peer dependency in order to reuse it by other dependencies, when i
await addDependenciesToPackage({}, ['@pnpm/xyz-parent-parent-parent-parent', '@pnpm/xyz-parent-parent-with-xyz'], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
const suffix = createPeersDirSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }])
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm/x@1.0.0',
'/@pnpm/xyz-parent-parent-with-xyz@1.0.0',
'/@pnpm/y@1.0.0',
'/@pnpm/z@1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent@1.0.0${suffix}`,
'/@pnpm/xyz-parent-parent-with-xyz@1.0.0',
`/@pnpm/xyz-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent@1.0.0${suffix}`,
`/@pnpm/xyz@1.0.0${suffix}`,
'/@pnpm/y@1.0.0',
'/@pnpm/z@1.0.0',
])
].sort())
})
test('don\'t hoist a peer dependency when there is a root dependency by that name', async () => {
@@ -111,7 +111,7 @@ test('don\'t hoist a peer dependency when there is a root dependency by that nam
const lockfile = project.readLockfile()
const suffix1 = createPeersDirSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }])
const suffix2 = createPeersDirSuffix([{ name: '@pnpm/x', version: '1.0.0' }, { name: '@pnpm/y', version: '1.0.0' }, { name: '@pnpm/z', version: '1.0.0' }])
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm.e2e/peer-a@1.0.0',
'/@pnpm/x@1.0.0',
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix1}`,
@@ -137,7 +137,7 @@ test('don\'t auto-install a peer dependency, when that dependency is in the root
], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
const suffix = createPeersDirSuffix([{ name: '@pnpm/y', version: '2.0.0' }, { name: '@pnpm/z', version: '1.0.0' }, { name: '@pnpm.e2e/peer-a', version: '1.0.0' }])
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
`/@pnpm/xyz-parent-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent-parent@1.0.0${suffix}`,
`/@pnpm/xyz-parent-parent@1.0.0${suffix}`,
@@ -156,7 +156,7 @@ test('don\'t install the same missing peer dependency twice', async () => {
'@pnpm.e2e/has-has-y-peer-peer',
], testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm/y@1.0.0',
'/@pnpm.e2e/has-has-y-peer-peer@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))(@pnpm/y@1.0.0)',
'/@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0)',
@@ -174,7 +174,7 @@ test('prefer the peer dependency version already used in the root', async () =>
},
}, testDefaults({ autoInstallPeers: true }))
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages).sort()).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm/y@1.0.0',
'/@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0)',
].sort())

View File

@@ -207,7 +207,7 @@ test('when resolving dependencies, prefer versions that are used by direct depen
await addDependenciesToPackage(manifest, ['@pnpm.e2e/has-foo-100.0.0-range-dep'], testDefaults())
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/has-foo-100.0.0-range-dep@1.0.0']).toHaveProperty(['dependencies', '@pnpm.e2e/foo'], '100.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/has-foo-100.0.0-range-dep@1.0.0']).toHaveProperty(['dependencies', '@pnpm.e2e/foo'], '100.0.0')
})
test('when resolving dependencies, prefer versions that are used by direct dependencies over versions used in subdeps', async () => {
@@ -225,5 +225,5 @@ test('when resolving dependencies, prefer versions that are used by direct depen
await addDependenciesToPackage(manifest, ['@pnpm.e2e/has-foo-100.0.0-range-dep'], testDefaults())
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/has-foo-100.0.0-range-dep@1.0.0']).toHaveProperty(['dependencies', '@pnpm.e2e/foo'], '100.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/has-foo-100.0.0-range-dep@1.0.0']).toHaveProperty(['dependencies', '@pnpm.e2e/foo'], '100.0.0')
})

View File

@@ -24,10 +24,10 @@ test('don\'t install the default peer dependency when it may be resolved from pa
)
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0',
`/@pnpm.e2e/has-default-peer@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/dep-of-pkg-with-1-dep', version: '101.0.0' }])}`,
])
].sort())
})
test('install the default peer dependency when it cannot be resolved from parent packages', async () => {
@@ -52,7 +52,7 @@ test('package that resolves its own peer dependency', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)']?.peerDependencies).toStrictEqual({ '@pnpm.e2e/peer-c': '*' })
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].dependencies).toHaveProperty(['@pnpm.e2e/peer-c'])
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].optionalDependencies).toHaveProperty(['@pnpm.e2e/peer-b'])
expect(lockfile.packages['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0']?.peerDependencies).toStrictEqual({ '@pnpm.e2e/peer-c': '*' })
expect(lockfile.snapshots['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].dependencies).toHaveProperty(['@pnpm.e2e/peer-c'])
expect(lockfile.snapshots['/@pnpm.e2e/pkg-with-resolved-peer@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].optionalDependencies).toHaveProperty(['@pnpm.e2e/peer-b'])
})

View File

@@ -234,8 +234,8 @@ test('path to external link is not added to the lockfile, when it resolves a pee
const lockfile = project.readLockfile()
const key = '/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@node_modules+@pnpm.e2e+peer-a)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0)'
expect(lockfile.packages[key]).toBeTruthy()
expect(lockfile.packages[key].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:node_modules/@pnpm.e2e/peer-a')
expect(lockfile.snapshots[key]).toBeTruthy()
expect(lockfile.snapshots[key].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:node_modules/@pnpm.e2e/peer-a')
})
test('links resolved from workspace protocol dependencies are not removed', async () => {

View File

@@ -4,7 +4,7 @@ import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { install, type MutatedProject, mutateModules } from '@pnpm/core'
import { sync as writeYamlFile } from 'write-yaml-file'
import { sync as readYamlFile } from 'read-yaml-file'
import { type Lockfile, type PackageSnapshots } from '@pnpm/lockfile-file'
import { type LockfileV7 as Lockfile, type PackageSnapshots } from '@pnpm/lockfile-file'
import { testDefaults } from '../utils'
test('fix broken lockfile with --fix-lockfile', async () => {
@@ -58,7 +58,7 @@ test('fix broken lockfile with --fix-lockfile', async () => {
expect(lockfile.packages?.['/core-js-pure@3.16.2']?.resolution).toEqual({
integrity: 'sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==',
})
expect(lockfile.packages?.['/core-js-pure@3.16.2']?.dev).toBeTruthy()
expect(lockfile.snapshots?.['/core-js-pure@3.16.2']?.dev).toBeTruthy()
})
test('--fix-lockfile should preserve all locked dependencies version', async () => {
@@ -200,7 +200,7 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.3']?.dev).toBeFalsy()
expect(lockfile.snapshots?.['/@babel/runtime-corejs3@7.15.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']).toBeTruthy()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.resolution).toEqual({
@@ -209,23 +209,23 @@ test('--fix-lockfile should preserve all locked dependencies version', async ()
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.engines).toEqual({
node: '>=6.9.0',
})
expect(lockfile.packages?.['/@babel/runtime-corejs3@7.15.4']?.dev).toBeFalsy()
expect(lockfile.snapshots?.['/@babel/runtime-corejs3@7.15.4']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure@3.17.2']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.2']?.resolution).toHaveProperty('integrity', 'sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ==')
expect(lockfile.packages?.['/core-js-pure@3.17.2']?.dev).toBeFalsy()
expect(lockfile.snapshots?.['/core-js-pure@3.17.2']?.dev).toBeFalsy()
expect(lockfile.packages?.['/core-js-pure@3.17.3']).toBeTruthy()
expect(lockfile.packages?.['/core-js-pure@3.17.3']?.resolution).toEqual({
integrity: 'sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==',
})
expect(lockfile.packages?.['/core-js-pure@3.17.3']?.dev).toBeFalsy()
expect(lockfile.snapshots?.['/core-js-pure@3.17.3']?.dev).toBeFalsy()
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']).toBeTruthy()
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']?.resolution).toEqual({
integrity: 'sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==',
})
expect(lockfile.packages?.['/regenerator-runtime@0.13.9']?.dev).toBeFalsy()
expect(lockfile.snapshots?.['/regenerator-runtime@0.13.9']?.dev).toBeFalsy()
})
test(

View File

@@ -132,7 +132,7 @@ test('a subdependency is from a github repo with different name', async () => {
expect(m).toEqual('Hi')
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/has-aliased-git-dependency@1.0.0'].dependencies).toStrictEqual({
expect(lockfile.snapshots['/@pnpm.e2e/has-aliased-git-dependency@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/has-say-hi-peer': '1.0.0(github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd)',
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
})
@@ -259,7 +259,6 @@ test('re-adding a git repo with a different tag', async () => {
name: 'is-negative',
version: '1.0.0',
engines: { node: '>=0.10.0' },
dev: false,
},
}
)
@@ -278,7 +277,6 @@ test('re-adding a git repo with a different tag', async () => {
name: 'is-negative',
version: '1.0.1',
engines: { node: '>=0.10.0' },
dev: false,
},
}
)

View File

@@ -210,6 +210,10 @@ test('install with --merge-git-branch-lockfiles when merged lockfile is up to da
},
},
},
snapshots: {
'/@types/semver@5.3.31': {},
'/is-positive@3.1.0': {},
},
}
writeYamlFile(otherLockfilePath, otherLockfileContent, { lineWidth: 1000 })

View File

@@ -143,29 +143,33 @@ test('inject local packages', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
dependencies: {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
id: 'file:project-2',
name: 'project-2',
})
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
dependencies: {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
@@ -213,16 +217,18 @@ test('inject local packages', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
dependencies: {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
@@ -372,35 +378,39 @@ test('inject local packages declared via file protocol', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dependencies: {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-2',
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
name: 'project-2',
dependencies: {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
name: 'project-2',
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
@@ -443,22 +453,24 @@ test('inject local packages declared via file protocol', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dependencies: {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
expect(modulesState?.injectedDeps?.['project-1'][0]).toContain(`node_modules${path.sep}.pnpm`)
@@ -587,35 +599,39 @@ test('inject local packages when the file protocol is used', async () => {
const rootModules = assertProject(process.cwd())
{
const lockfile = rootModules.readLockfile()
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dependencies: {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-2',
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
name: 'project-2',
dependencies: {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
name: 'project-2',
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
@@ -657,22 +673,24 @@ test('inject local packages when the file protocol is used', async () => {
}))
{
const lockfile = rootModules.readLockfile()
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dependencies: {
'is-negative': '2.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
expect(modulesState?.injectedDeps?.['project-1'][0]).toContain(`node_modules${path.sep}.pnpm`)
@@ -779,22 +797,24 @@ test('inject local packages and relink them after build', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '1.0.0',
},
dependencies: {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '1.0.0',
},
})
rimraf('node_modules')
rimraf('project-1/main.js')
@@ -889,22 +909,24 @@ test('inject local packages and relink them after build (file protocol is used)'
const rootModules = assertProject(process.cwd())
const lockfile = rootModules.readLockfile()
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '1.0.0',
},
dependencies: {
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '1.0.0',
},
})
rimraf('node_modules')
rimraf('project-1/main.js')
@@ -1062,16 +1084,8 @@ test('inject local packages when node-linker is hoisted', async () => {
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
'is-negative': '1.0.0',
@@ -1079,13 +1093,18 @@ test('inject local packages when node-linker is hoisted', async () => {
},
dev: false,
})
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-2',
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
name: 'project-2',
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
@@ -1093,6 +1112,13 @@ test('inject local packages when node-linker is hoisted', async () => {
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
name: 'project-2',
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
@@ -1245,30 +1271,27 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
injected: true,
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toEqual({
resolution: {
directory: 'project-1',
type: 'directory',
},
expect(lockfile.snapshots['file:project-1(is-positive@1.0.0)']).toEqual({
id: 'file:project-1',
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
dev: false,
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
'is-negative': '1.0.0',
'is-positive': '1.0.0',
},
dev: false,
})
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
expect(lockfile.packages['file:project-1']).toEqual({
resolution: {
directory: 'project-2',
directory: 'project-1',
type: 'directory',
},
name: 'project-1',
peerDependencies: {
'is-positive': '>=1.0.0',
},
})
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
name: 'project-2',
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '101.0.0',
'project-1': 'file:project-1(is-positive@2.0.0)',
@@ -1276,6 +1299,13 @@ test('inject local packages when node-linker is hoisted and dependenciesMeta is
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
name: 'project-2',
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(2)
@@ -1388,7 +1418,7 @@ test('peer dependency of injected project should be resolved correctly', async (
const rootModules = assertProject(process.cwd())
const lockfile = rootModules.readLockfile()
expect(lockfile.packages?.['file:project-2(project-1@project-1)'].dependencies?.['project-1']).toEqual('link:project-1')
expect(lockfile.snapshots?.['file:project-2(project-1@project-1)'].dependencies?.['project-1']).toEqual('link:project-1')
})
// There was a bug related to this. The manifests in the workspacePackages object were modified
@@ -1985,19 +2015,21 @@ test('injected local packages are deduped', async () => {
},
})
expect(lockfile.packages['file:project-1(is-positive@1.0.0)']).toBeFalsy()
expect(lockfile.packages['file:project-2(is-positive@2.0.0)']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
expect(lockfile.snapshots['file:project-2(is-positive@2.0.0)']).toEqual({
id: 'file:project-2',
name: 'project-2',
dependencies: {
'project-1': 'file:project-1(is-positive@2.0.0)',
},
transitivePeerDependencies: ['is-positive'],
dev: false,
})
expect(lockfile.packages['file:project-2']).toEqual({
resolution: {
directory: 'project-2',
type: 'directory',
},
name: 'project-2',
})
const modulesState = rootModules.readModulesManifest()
expect(modulesState?.injectedDeps?.['project-1'].length).toEqual(1)

View File

@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import { LOCKFILE_VERSION } from '@pnpm/constants'
import { type Lockfile } from '@pnpm/lockfile-file'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
import { fixtures } from '@pnpm/test-fixtures'
@@ -183,7 +183,6 @@ test('tarball local package', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages[lockfile.importers['.'].dependencies!['tar-pkg'].version]).toStrictEqual({
dev: false,
name: 'tar-pkg',
resolution: {
integrity: 'sha512-HP/5Rgt3pVFLzjmN9qJJ6vZMgCwoCIl/m2bPndYT283CUqnmFiMx0GeeIJ7SyK6TYoJM78SEvFEOQie++caHqw==',
@@ -214,7 +213,6 @@ test('tarball local package from project directory', async () => {
const lockfile = project.readLockfile()
expect(lockfile.importers['.'].dependencies?.['tar-pkg'].version).toBe(pkgSpec)
expect(lockfile.packages[lockfile.importers['.'].dependencies!['tar-pkg'].version]).toStrictEqual({
dev: false,
name: 'tar-pkg',
resolution: {
integrity: 'sha512-HP/5Rgt3pVFLzjmN9qJJ6vZMgCwoCIl/m2bPndYT283CUqnmFiMx0GeeIJ7SyK6TYoJM78SEvFEOQie++caHqw==',
@@ -231,13 +229,13 @@ test('update tarball local package when its integrity changes', async () => {
const manifest = await addDependenciesToPackage({}, ['../tar.tgz'], testDefaults())
const lockfile1 = project.readLockfile()
expect(lockfile1.packages['file:../tar.tgz'].dependencies!['is-positive']).toBe('1.0.0')
expect(lockfile1.snapshots['file:../tar.tgz'].dependencies!['is-positive']).toBe('1.0.0')
f.copy('tar-pkg-with-dep-2/tar-pkg-with-dep-1.0.0.tgz', path.resolve('..', 'tar.tgz'))
await install(manifest, testDefaults())
const lockfile2 = project.readLockfile()
expect(lockfile2.packages['file:../tar.tgz'].dependencies!['is-positive']).toBe('2.0.0')
expect(lockfile2.snapshots['file:../tar.tgz'].dependencies!['is-positive']).toBe('2.0.0')
const manifestOfTarballDep = await import(path.resolve('node_modules/tar-pkg-with-dep/package.json'))
expect(manifestOfTarballDep.dependencies['is-positive']).toBe('^2.0.0')
@@ -430,6 +428,10 @@ test('re-install should update local file dependency', async () => {
'file:../local-pkg': {
resolution: { directory: '../local-pkg', type: 'directory' },
name: 'local-pkg',
},
},
snapshots: {
'file:../local-pkg': {
dev: false,
},
},
@@ -459,16 +461,20 @@ test('re-install should update local file dependency', async () => {
expect(fs.existsSync('./node_modules/.pnpm/is-positive@1.0.0')).toBeTruthy()
lockfile = project.readLockfile()
expect(lockfile).toMatchObject({
packages: {
snapshots: {
'file:../local-pkg': {
resolution: { directory: '../local-pkg', type: 'directory' },
name: 'local-pkg',
dev: false,
dependencies: {
'is-positive': '1.0.0',
},
},
},
packages: {
'file:../local-pkg': {
resolution: { directory: '../local-pkg', type: 'directory' },
name: 'local-pkg',
},
},
})
// update dependency
@@ -487,6 +493,10 @@ test('re-install should update local file dependency', async () => {
'file:../local-pkg': {
resolution: { directory: '../local-pkg', type: 'directory' },
name: 'local-pkg',
},
},
snapshots: {
'file:../local-pkg': {
dev: false,
dependencies: {
'is-positive': '2.0.0',

View File

@@ -1330,7 +1330,7 @@ test('do not resolve a subdependency from the workspace by default', async () =>
const project = assertProject(process.cwd())
const wantedLockfile = project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0')
expect(wantedLockfile.snapshots['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.1.0')
})
test('resolve a subdependency from the workspace', async () => {
@@ -1393,7 +1393,7 @@ test('resolve a subdependency from the workspace', async () => {
const project = assertProject(process.cwd())
const wantedLockfile = project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
expect(wantedLockfile.snapshots['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
rimraf('node_modules')
@@ -1476,7 +1476,7 @@ test('resolve a subdependency from the workspace and use it as a peer', async ()
const wantedLockfile = project.readLockfile()
const suffix1 = createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '@pnpm.e2e+peer-a' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }])
const suffix2 = createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '@pnpm.e2e+peer-a' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.1' }])
expect(Object.keys(wantedLockfile.packages).sort()).toStrictEqual(
expect(Object.keys(wantedLockfile.snapshots).sort()).toStrictEqual(
[
'/@pnpm.e2e/abc-grand-parent-with-c@1.0.0',
'/@pnpm.e2e/abc-parent-with-ab@1.0.0',
@@ -1489,8 +1489,8 @@ test('resolve a subdependency from the workspace and use it as a peer', async ()
'/@pnpm.e2e/peer-c@1.0.1',
].sort()
)
expect(wantedLockfile.packages['/@pnpm.e2e/abc-parent-with-ab@1.0.0'].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.packages[`/@pnpm.e2e/abc@1.0.0${suffix1}`].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.snapshots['/@pnpm.e2e/abc-parent-with-ab@1.0.0'].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
expect(wantedLockfile.snapshots[`/@pnpm.e2e/abc@1.0.0${suffix1}`].dependencies?.['@pnpm.e2e/peer-a']).toBe('link:@pnpm.e2e/peer-a')
})
test('resolve a subdependency from the workspace, when it uses the workspace protocol', async () => {
@@ -1561,7 +1561,7 @@ test('resolve a subdependency from the workspace, when it uses the workspace pro
const project = assertProject(process.cwd())
const wantedLockfile = project.readLockfile()
expect(wantedLockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
expect(wantedLockfile.snapshots['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('link:@pnpm.e2e/dep-of-pkg-with-1-dep')
rimraf('node_modules')

View File

@@ -92,7 +92,7 @@ test('install dev dependencies only', async () => {
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/is-positive@1.0.0'].dev === false).toBeTruthy()
expect(lockfile.snapshots['/is-positive@1.0.0'].dev === false).toBeTruthy()
}
{

View File

@@ -1,6 +1,6 @@
import fs from 'fs'
import path from 'path'
import { type Lockfile } from '@pnpm/lockfile-file'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import deepRequireCwd from 'deep-require-cwd'
import { sync as readYamlFile } from 'read-yaml-file'
@@ -355,7 +355,7 @@ test('only that package is skipped which is an optional dependency only and not
}
const lockfile = project.readLockfile()
expect(typeof lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg@1.0.0'].optional).toBe('undefined')
expect(typeof lockfile.snapshots['/@pnpm.e2e/dep-of-optional-pkg@1.0.0'].optional).toBe('undefined')
rimraf('node_modules')
@@ -528,8 +528,8 @@ test('do not fail on unsupported dependency of optional dependency', async () =>
)
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'].optional).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/dep-of-optional-pkg@1.0.0']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/not-compatible-with-any-os@1.0.0'].optional).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/dep-of-optional-pkg@1.0.0']).toBeTruthy()
})
test('fail on unsupported dependency of optional dependency', async () => {

View File

@@ -24,8 +24,8 @@ test('versions are replaced with versions specified through overrides option', a
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('/@pnpm.e2e/qar@100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foobar@100.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/foobarqar@1.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('/@pnpm.e2e/qar@100.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/foobar@100.0.0'].dependencies?.['@pnpm.e2e/foo']).toBe('100.0.0')
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@101.0.0'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/bar@100.1.0'])
expect(lockfile.overrides).toStrictEqual({

View File

@@ -25,7 +25,7 @@ test('manifests are extended with fields specified by packageExtensions', async
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0')
expect(lockfile.snapshots['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/bar']).toBe('100.1.0')
expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({
'is-positive': {
dependencies: {
@@ -47,7 +47,7 @@ test('manifests are extended with fields specified by packageExtensions', async
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/foobar']).toBe('100.0.0')
expect(lockfile.snapshots['/is-positive@1.0.0'].dependencies?.['@pnpm.e2e/foobar']).toBe('100.0.0')
expect(lockfile.packageExtensionsChecksum).toStrictEqual(createObjectChecksum({
'is-positive': {
dependencies: {

View File

@@ -40,7 +40,7 @@ test('patch package', async () => {
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
expect(lockfile.snapshots[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = loadJsonFile.sync<PackageFilesIndex>(filesIndexFile)
@@ -207,7 +207,7 @@ test('patch package when scripts are ignored', async () => {
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
expect(lockfile.snapshots[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = loadJsonFile.sync<PackageFilesIndex>(filesIndexFile)
@@ -294,7 +294,7 @@ test('patch package when the package is not in onlyBuiltDependencies list', asyn
hash: patchFileHash,
},
})
expect(lockfile.packages[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
expect(lockfile.snapshots[`/is-positive@1.0.0(patch_hash=${patchFileHash})`]).toBeTruthy()
const filesIndexFile = path.join(opts.storeDir, 'files/c7/1ccf199e0fdae37aad13946b937d67bcd35fa111b84d21b3a19439cfdc2812c5d8da8a735e94c2a1ccb77b4583808ee8405313951e7146ac83ede3671dc292-index.json')
const filesIndex = loadJsonFile.sync<PackageFilesIndex>(filesIndexFile)
@@ -377,10 +377,10 @@ test('patch package when the patched package has no dependencies and appears mul
expect(fs.readFileSync('node_modules/is-positive/index.js', 'utf8')).toContain('// patched')
const lockfile = project.readLockfile()
expect(Object.keys(lockfile.packages)).toStrictEqual([
expect(Object.keys(lockfile.snapshots).sort()).toStrictEqual([
'/is-not-positive@1.0.0',
'/is-positive@1.0.0(patch_hash=jnbpamcxayl5i4ehrkoext3any)',
])
].sort())
})
test('patch package should fail when the patch could not be applied', async () => {

View File

@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { type Lockfile } from '@pnpm/lockfile-file'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
import { fixtures } from '@pnpm/test-fixtures'
@@ -48,9 +48,9 @@ test('peer dependency is grouped with dependency when peer is resolved not from
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/using-ajv@1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0(ajv@4.10.4)')
expect(lockfile.snapshots['/@pnpm.e2e/using-ajv@1.0.0'].dependencies!['ajv-keywords']).toBe('1.5.0(ajv@4.10.4)')
// covers https://github.com/pnpm/pnpm/issues/1150
expect(lockfile.packages).toHaveProperty(['/ajv-keywords@1.5.0(ajv@4.10.4)'])
expect(lockfile.snapshots).toHaveProperty(['/ajv-keywords@1.5.0(ajv@4.10.4)'])
})
// Covers https://github.com/pnpm/pnpm/issues/1133
@@ -99,7 +99,7 @@ test('peer dependency is grouped with dependent when the peer is a top dependenc
}, testDefaults({ preferFrozenLockfile: false }))
const lockfile = project.readLockfile()
expect(lockfile.packages['/ajv-keywords@1.5.0(ajv@4.10.4)'].dependencies).toHaveProperty(['ajv'])
expect(lockfile.snapshots['/ajv-keywords@1.5.0(ajv@4.10.4)'].dependencies).toHaveProperty(['ajv'])
})
test('the right peer dependency is used in every workspace package', async () => {
@@ -505,7 +505,7 @@ test('the list of transitive peer dependencies is kept up to date', async () =>
expect(fs.existsSync(path.resolve('node_modules/.pnpm/@pnpm.e2e+abc-grand-parent@1.0.0_@pnpm.e2e+peer-c@1.0.0/node_modules/@pnpm.e2e/abc-grand-parent'))).toBeTruthy()
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent@1.0.0(@pnpm.e2e/peer-c@1.0.0)'].transitivePeerDependencies).toStrictEqual(['@pnpm.e2e/peer-c'])
expect(lockfile.snapshots['/@pnpm.e2e/abc-grand-parent@1.0.0(@pnpm.e2e/peer-c@1.0.0)'].transitivePeerDependencies).toStrictEqual(['@pnpm.e2e/peer-c'])
}
await mutateModulesInSingleProject({
@@ -518,7 +518,7 @@ test('the list of transitive peer dependencies is kept up to date', async () =>
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-grand-parent@1.0.0'].transitivePeerDependencies).toBeFalsy()
expect(lockfile.snapshots['/@pnpm.e2e/abc-grand-parent@1.0.0'].transitivePeerDependencies).toBeFalsy()
}
})
@@ -643,7 +643,7 @@ test.skip('peer dependencies are linked', async () => {
expect(deepRequireCwd(['@pnpm.e2e/abc-grand-parent-with-c', '@pnpm.e2e/abc-parent-with-ab', '@pnpm.e2e/abc', '@pnpm.e2e/peer-c', './package.json']).version).toBe('1.0.0')
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-parent-with-ab/1.0.0/@pnpm.e2e/peer-a@1.0.0+@pnpm.e2e+peer-b@1.0.0'].dev).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc-parent-with-ab/1.0.0/@pnpm.e2e/peer-a@1.0.0+@pnpm.e2e+peer-b@1.0.0'].dev).toBeTruthy()
})
test('scoped peer dependency is linked', async () => {
@@ -688,8 +688,8 @@ test('package that has parent as peer dependency', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0(@pnpm.e2e/alpha@1.0.0)'])
expect(lockfile.packages).not.toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0'])
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0(@pnpm.e2e/alpha@1.0.0)'])
expect(lockfile.snapshots).not.toHaveProperty(['/@pnpm.e2e/has-alpha-as-peer@1.0.0'])
})
test('own peer installed in root as well is linked to root', async () => {
@@ -936,10 +936,10 @@ test('peer dependency is resolved from parent package', async () => {
}, testDefaults())
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([
expect(Object.keys(lockfile.snapshots ?? {}).sort()).toStrictEqual([
'/@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango@1.0.0)',
'/@pnpm.e2e/tango@1.0.0',
])
].sort())
})
test('transitive peerDependencies field does not break the lockfile on subsequent named install', async () => {
@@ -964,7 +964,7 @@ test('transitive peerDependencies field does not break the lockfile on subsequen
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages!['/most@1.7.3'].dependencies!)).toStrictEqual([
expect(Object.keys(lockfile.snapshots!['/most@1.7.3'].dependencies!)).toStrictEqual([
'@most/multicast',
'@most/prelude',
'symbol-observable',
@@ -985,10 +985,10 @@ test('peer dependency is resolved from parent package via its alias', async () =
}, testDefaults())
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile.packages ?? {})).toStrictEqual([
expect(Object.keys(lockfile.snapshots ?? {}).sort()).toStrictEqual([
'/@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0))',
'/@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0)',
])
].sort())
})
test('peer dependency is saved', async () => {
@@ -1091,7 +1091,7 @@ test('warning is not reported when cannot resolve optional peer dependency', asy
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependenciesMeta).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers@1.0.0'].peerDependenciesMeta).toStrictEqual({
'@pnpm.e2e/peer-b': {
optional: true,
},
@@ -1154,12 +1154,12 @@ test('warning is not reported when cannot resolve optional peer dependency (spec
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependencies).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0'].peerDependencies).toStrictEqual({
'@pnpm.e2e/peer-a': '^1.0.0',
'@pnpm.e2e/peer-b': '*',
'@pnpm.e2e/peer-c': '*',
})
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0(@pnpm.e2e/peer-c@2.0.0)'].peerDependenciesMeta).toStrictEqual({
expect(lockfile.packages['/@pnpm.e2e/abc-optional-peers-meta-only@1.0.0'].peerDependenciesMeta).toStrictEqual({
'@pnpm.e2e/peer-b': {
optional: true,
},
@@ -1218,7 +1218,7 @@ test('peer dependency that is resolved by a dev dependency', async () => {
}, testDefaults({ fastUnpack: false, lockfileOnly: true, strictPeerDependencies: false }))
const lockfile = project.readLockfile()
expect(lockfile.packages['/@types/mongoose@5.7.32'].dev).toBeUndefined()
expect(lockfile.snapshots['/@types/mongoose@5.7.32'].dev).toBeUndefined()
await mutateModulesInSingleProject({
manifest,
@@ -1285,7 +1285,7 @@ test('peer dependency is grouped with dependency when peer is resolved not from
await mutateModules(importers, testDefaults({ allProjects }))
const lockfile = readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
expect(lockfile.packages?.['/ajv-keywords@1.5.0(ajv@ajv)'].dependencies?.['ajv']).toBe('link:ajv')
expect(lockfile.snapshots?.['/ajv-keywords@1.5.0(ajv@ajv)'].dependencies?.['ajv']).toBe('link:ajv')
})
test('deduplicate packages that have optional and non-optional peers', async () => {
@@ -1299,7 +1299,7 @@ test('deduplicate packages that have optional and non-optional peers', async ()
)
const lockfile = readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
const depPaths = Object.keys(lockfile.packages ?? {})
const depPaths = Object.keys(lockfile.snapshots ?? {})
expect(depPaths.length).toBe(5)
expect(depPaths).toContain(`/@pnpm.e2e/abc-optional-peers@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
})
@@ -1317,7 +1317,7 @@ test('deduplicate packages that have peers', async () => {
)
const lockfile = readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
const depPaths = Object.keys(lockfile.packages ?? {})
const depPaths = Object.keys(lockfile.snapshots ?? {})
expect(depPaths.length).toBe(8)
expect(depPaths).toContain(`/@pnpm.e2e/abc@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
expect(depPaths).toContain(`/@pnpm.e2e/abc-parent-with-ab@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
@@ -1381,7 +1381,7 @@ test('deduplicate packages that have peers, when adding new dependency in a work
await mutateModules(importers, testDefaults({ allProjects, autoInstallPeers: false, dedupePeerDependents: true }))
const lockfile = readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
const depPaths = Object.keys(lockfile.packages ?? {})
const depPaths = Object.keys(lockfile.snapshots ?? {})
expect(depPaths.length).toBe(8)
expect(depPaths).toContain(`/@pnpm.e2e/abc@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
expect(depPaths).toContain(`/@pnpm.e2e/abc-parent-with-ab@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
@@ -1399,7 +1399,7 @@ test('resolve peer dependencies from aliased subdependencies if they are depende
)
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0)']).toBeTruthy()
})
test('resolve peer dependency from aliased direct dependency', async () => {
@@ -1410,7 +1410,7 @@ test('resolve peer dependency from aliased direct dependency', async () => {
await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc@1.0.0'], opts)
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)']).toBeTruthy()
})
test('resolve peer dependency using the alias that differs from the real name of the direct dependency', async () => {
@@ -1421,9 +1421,9 @@ test('resolve peer dependency using the alias that differs from the real name of
await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc@1.0.0'], opts)
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']).toBeTruthy()
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']?.dependencies['@pnpm.e2e/peer-a']).toBe('1.0.0')
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']?.dependencies['@pnpm.e2e/peer-b']).toBe('/@pnpm.e2e/peer-a@1.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']?.dependencies['@pnpm.e2e/peer-a']).toBe('1.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-a@1.0.0)']?.dependencies['@pnpm.e2e/peer-b']).toBe('/@pnpm.e2e/peer-a@1.0.0')
})
test('when there are several aliased dependencies of the same package, pick the one with the highest version to resolve peers', async () => {
@@ -1438,7 +1438,7 @@ test('when there are several aliased dependencies of the same package, pick the
await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc@1.0.0'], opts)
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@2.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@2.0.0)']).toBeTruthy()
})
test('when there is an aliases dependency and a non-aliased one, prefer the non-aliased dependency to resolve peers', async () => {
@@ -1452,7 +1452,7 @@ test('when there is an aliases dependency and a non-aliased one, prefer the non-
await addDependenciesToPackage(manifest, ['@pnpm.e2e/abc@1.0.0'], opts)
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@1.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@1.0.0)']).toBeTruthy()
})
test('in a subdependency, when there are several aliased dependencies of the same package, pick the one with the highest version to resolve peers', async () => {
@@ -1461,7 +1461,7 @@ test('in a subdependency, when there are several aliased dependencies of the sam
await addDependenciesToPackage({}, ['@pnpm.e2e/abc-parent-with-aliases-of-same-pkg@1.0.0'], testDefaults({ autoInstallPeers: false, strictPeerDependencies: false }))
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@2.0.0)']).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-c@2.0.0)']).toBeTruthy()
})
test('peer having peer is resolved correctly', async () => {
@@ -1527,7 +1527,7 @@ test('peer having peer is resolved correctly', async () => {
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.importers['project-1'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer']['version']).not.toEqual(lockfile.importers['project-2'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer']['version'])
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
})
test('peer having peer is resolved correctly. The peer is also in the dependencies of the dependent package', async () => {
@@ -1595,11 +1595,11 @@ test('peer having peer is resolved correctly. The peer is also in the dependenci
expect(lockfile.importers['project-1'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer-and-y']['version']).toEqual('1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))')
expect(lockfile.importers['project-2'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer-and-y']['version']).toEqual('1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))')
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm/y']).toEqual('1.0.0')
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm/y']).toEqual('1.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm/y']).toEqual('1.0.0')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm/y']).toEqual('1.0.0')
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@2.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@2.0.0)')
})
test('peer having peer is resolved correctly. The peer is also in the dependencies of the dependent package. Test #2', async () => {
@@ -1664,8 +1664,8 @@ test('peer having peer is resolved correctly. The peer is also in the dependenci
const lockfile = readYamlFile<any>(path.resolve(WANTED_LOCKFILE)) // eslint-disable-line
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@2.0.0)')
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@2.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@2.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@2.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@1.0.0))'].dependencies['@pnpm.e2e/has-y-peer']).toEqual('1.0.0(@pnpm/y@1.0.0)')
})
test('resolve peer of peer from the dependencies of the direct dependent package', async () => {
@@ -1677,7 +1677,7 @@ test('resolve peer of peer from the dependencies of the direct dependent package
expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer-and-y'].version).toBe('1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))')
// Even though @pnpm/y@1.0.0 is in the dependencies of the direct dependent package, we resolve y from above.
// It might make sense to print a warning in this case and suggest to make y a peer dependency in the dependent package too.
expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies?.['@pnpm.e2e/has-y-peer']).toBe('1.0.0(@pnpm/y@2.0.0)')
expect(lockfile.snapshots['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies?.['@pnpm.e2e/has-y-peer']).toBe('1.0.0(@pnpm/y@2.0.0)')
})
test('2 circular peers', async () => {

View File

@@ -1,6 +1,6 @@
import path from 'path'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { type Lockfile } from '@pnpm/lockfile-file'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-file'
import { prepareEmpty } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
import { sync as readYamlFile } from 'read-yaml-file'
@@ -33,10 +33,10 @@ test('preserve subdeps on update', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages).toBeTruthy()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
expect(lockfile.snapshots).toBeTruthy()
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.snapshots['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -70,9 +70,9 @@ test('preserve subdeps on update when no node_modules is present', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages).toBeTruthy()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.snapshots['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -143,9 +143,9 @@ test('preserve subdeps when installing on a package that has one dependency spec
const lockfile = project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)']) // preserve version of package that has resolved peer deps
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.1'])
expect(lockfile.snapshots['/@pnpm.e2e/foobarqar@1.0.1'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.0.0',
'@pnpm.e2e/qar': '100.0.0',
@@ -202,9 +202,9 @@ test('update only the specified package', async () => {
const lockfile = project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.0'])
expect(lockfile.packages['/@pnpm.e2e/foobarqar@1.0.0'].dependencies).toStrictEqual({
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/abc-parent-with-ab@1.0.0(@pnpm.e2e/peer-c@1.0.0)'])
expect(lockfile.snapshots).toHaveProperty(['/@pnpm.e2e/foobarqar@1.0.0'])
expect(lockfile.snapshots['/@pnpm.e2e/foobarqar@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/bar': '100.0.0',
'@pnpm.e2e/foo': '100.1.0',
'is-positive': '3.1.0',

View File

@@ -75,10 +75,10 @@ test('dependency should not be added to package.json if it is already there', as
const lockfile = project.readLockfile()
expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/foo'].version).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/foo@100.0.0'].dev).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/foo@100.0.0'].dev).toBeTruthy()
expect(lockfile.importers['.'].optionalDependencies?.['@pnpm.e2e/bar'].version).toBe('100.0.0')
expect(lockfile.packages['/@pnpm.e2e/bar@100.0.0'].optional).toBeTruthy()
expect(lockfile.snapshots['/@pnpm.e2e/bar@100.0.0'].optional).toBeTruthy()
})
test('dependencies should be updated in the fields where they already are', async () => {

View File

@@ -5,7 +5,7 @@ import { type RootLog } from '@pnpm/core-loggers'
import { type PnpmError } from '@pnpm/error'
import { fixtures } from '@pnpm/test-fixtures'
import { type Lockfile, type TarballResolution } from '@pnpm/lockfile-file'
import { type LockfileFile } from '@pnpm/lockfile-types'
import { type LockfileFileV7 } from '@pnpm/lockfile-types'
import { tempDir, prepareEmpty, preparePackages } from '@pnpm/prepare'
import { readPackageJsonFromDir } from '@pnpm/read-package-json'
import { addDistTag, getIntegrity, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
@@ -61,8 +61,8 @@ test('lockfile has correct format', async () => {
expect(lockfile.packages).toBeTruthy() // has packages field
expect(lockfile.packages).toHaveProperty([id])
expect(lockfile.packages[id].dependencies).toBeTruthy()
expect(lockfile.packages[id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.snapshots[id].dependencies).toBeTruthy()
expect(lockfile.snapshots[id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.packages[id].resolution).toBeTruthy()
expect((lockfile.packages[id].resolution as { integrity: string }).integrity).toBeTruthy()
expect((lockfile.packages[id].resolution as TarballResolution).tarball).toBeFalsy()
@@ -371,7 +371,7 @@ test(`subdeps are updated on repeat install if outer ${WANTED_LOCKFILE} does not
},
}
lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0'
lockfile.snapshots['/@pnpm.e2e/pkg-with-1-dep@100.0.0'].dependencies!['@pnpm.e2e/dep-of-pkg-with-1-dep'] = '100.1.0'
writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 })
@@ -444,7 +444,7 @@ test('package is not marked dev if it is also a subdep of a regular dependency',
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].dev).toBeFalsy()
expect(lockfile.snapshots['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].dev).toBeFalsy()
})
test('package is not marked optional if it is also a subdep of a regular dependency', async () => {
@@ -458,7 +458,7 @@ test('package is not marked optional if it is also a subdep of a regular depende
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].optional).toBeFalsy()
expect(lockfile.snapshots['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'].optional).toBeFalsy()
})
test('scoped module from different registry', async () => {
@@ -500,29 +500,21 @@ test('scoped module from different registry', async () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@foo/has-dep-from-same-scope@1.0.0': {
dependencies: {
'@foo/no-deps': '1.0.0',
'is-negative': '1.0.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@foo/has-dep-from-same-scope', '1.0.0'),
},
},
'/@foo/no-deps@1.0.0': {
dev: false,
resolution: {
integrity: getIntegrity('@foo/no-deps', '1.0.0'),
},
},
'/@zkochan/foo@1.0.0': {
dev: false,
resolution: {
integrity: 'sha512-IFvrYpq7E6BqKex7A7czIFnFncPiUVdhSzGhAOWpp8RlkXns4y/9ZdynxaA/e0VkihRxQkihE2pTyvxjfe/wBg==',
},
},
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -531,7 +523,6 @@ test('scoped module from different registry', async () => {
},
},
'/is-positive@3.1.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -540,6 +531,27 @@ test('scoped module from different registry', async () => {
},
},
},
snapshots: {
'/@foo/has-dep-from-same-scope@1.0.0': {
dependencies: {
'@foo/no-deps': '1.0.0',
'is-negative': '1.0.0',
},
dev: false,
},
'/@foo/no-deps@1.0.0': {
dev: false,
},
'/@zkochan/foo@1.0.0': {
dev: false,
},
'/is-negative@1.0.0': {
dev: false,
},
'/is-positive@3.1.0': {
dev: false,
},
},
})
})
@@ -645,7 +657,7 @@ test('dev properties are correctly updated on named install', async () => {
const lockfile = project.readLockfile()
expect(
Object.values(lockfile.packages).filter((dep) => typeof dep.dev !== 'undefined')
Object.values(lockfile.snapshots).filter((dep) => typeof dep.dev !== 'undefined')
).toStrictEqual([])
})
@@ -656,7 +668,7 @@ test('optional properties are correctly updated on named install', async () => {
await addDependenciesToPackage(manifest, ['foo@npm:inflight@1.0.6'], testDefaults({}))
const lockfile = project.readLockfile()
expect(Object.values(lockfile.packages).filter((dep) => typeof dep.optional !== 'undefined')).toStrictEqual([])
expect(Object.values(lockfile.snapshots).filter((dep) => typeof dep.optional !== 'undefined')).toStrictEqual([])
})
test('dev property is correctly set for package that is duplicated to both the dependencies and devDependencies group', async () => {
@@ -666,7 +678,7 @@ test('dev property is correctly set for package that is duplicated to both the d
await addDependenciesToPackage({}, ['overlap@2.2.8'], testDefaults())
const lockfile = project.readLockfile()
expect(lockfile.packages['/couleurs@5.0.0'].dev === false).toBeTruthy()
expect(lockfile.snapshots['/couleurs@5.0.0'].dev === false).toBeTruthy()
})
test('no lockfile', async () => {
@@ -811,22 +823,16 @@ test('packages installed via tarball URL from the default registry are normalize
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/dep-of-pkg-with-1-dep', '100.0.0'),
},
},
'/@pnpm.e2e/pkg-with-tarball-dep-from-registry@1.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
},
dev: false,
resolution: {
integrity: getIntegrity('@pnpm.e2e/pkg-with-tarball-dep-from-registry', '1.0.0'),
},
},
'@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {
dev: false,
engines: { node: '>=0.10.0' },
name: 'is-positive',
resolution: {
@@ -835,6 +841,20 @@ test('packages installed via tarball URL from the default registry are normalize
version: '1.0.0',
},
},
snapshots: {
'/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0': {
dev: false,
},
'/@pnpm.e2e/pkg-with-tarball-dep-from-registry@1.0.0': {
dependencies: {
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.0.0',
},
dev: false,
},
'@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz': {
dev: false,
},
},
})
})
@@ -863,7 +883,7 @@ test('lockfile file has correct format when lockfile directory does not equal th
expect(modules.pendingBuilds.length).toBe(0)
{
const lockfile: LockfileFile = readYamlFile(WANTED_LOCKFILE)
const lockfile: LockfileFileV7 = readYamlFile(WANTED_LOCKFILE)
const id = '/@pnpm.e2e/pkg-with-1-dep@100.0.0'
expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION)
@@ -876,7 +896,7 @@ test('lockfile file has correct format when lockfile directory does not equal th
expect(lockfile.importers?.project.dependencies!['@zkochan/foo']).toBeTruthy()
expect(lockfile.importers?.project.dependencies!['is-negative'].version).toContain('/')
expect(lockfile.packages![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.snapshots![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.packages![id].resolution).toHaveProperty(['integrity'])
expect(lockfile.packages![id].resolution).not.toHaveProperty(['tarball'])
@@ -897,7 +917,7 @@ test('lockfile file has correct format when lockfile directory does not equal th
}))
{
const lockfile = readYamlFile<LockfileFile>(path.join('..', WANTED_LOCKFILE))
const lockfile = readYamlFile<LockfileFileV7>(path.join('..', WANTED_LOCKFILE))
expect(lockfile.importers).toHaveProperty(['project-2'])
@@ -908,9 +928,9 @@ test('lockfile file has correct format when lockfile directory does not equal th
expect(lockfile.importers?.project.dependencies).toHaveProperty(['@zkochan/foo'])
expect(lockfile.importers?.project.dependencies!['is-negative'].version).toContain('/')
expect(lockfile.packages).toHaveProperty([id])
expect(lockfile.packages![id].dependencies).toBeTruthy()
expect(lockfile.packages![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.snapshots).toHaveProperty([id])
expect(lockfile.snapshots![id].dependencies).toBeTruthy()
expect(lockfile.snapshots![id].dependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep'])
expect(lockfile.packages![id].resolution).toHaveProperty(['integrity'])
expect(lockfile.packages![id].resolution).not.toHaveProperty(['tarball'])
@@ -985,7 +1005,7 @@ test(`doing named installation when shared ${WANTED_LOCKFILE} exists already`, a
})
)
const currentLockfile = readYamlFile<LockfileFile>(path.resolve('node_modules/.pnpm/lock.yaml'))
const currentLockfile = readYamlFile<LockfileFileV7>(path.resolve('node_modules/.pnpm/lock.yaml'))
expect(Object.keys(currentLockfile.importers ?? {})).toStrictEqual(['pkg2'])
@@ -1069,6 +1089,7 @@ test('broken lockfile is fixed even if it seems like up to date at first. Unless
const lockfile = project.readLockfile()
expect(lockfile.packages).toHaveProperty(['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0'])
delete lockfile.packages['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0']
delete lockfile.snapshots['/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0']
writeYamlFile(WANTED_LOCKFILE, lockfile, { lineWidth: 1000 })
}
@@ -1146,7 +1167,6 @@ test('tarball domain differs from registry domain', async () => {
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-positive@3.1.0': {
dev: false,
engines: { node: '>=0.10.0' },
resolution: {
integrity: 'sha1-hX21hKG6XRyymAUn/DtsQ103sP0=',
@@ -1154,6 +1174,11 @@ test('tarball domain differs from registry domain', async () => {
},
},
},
snapshots: {
'/is-positive@3.1.0': {
dev: false,
},
},
})
})
@@ -1197,7 +1222,6 @@ test('tarball installed through non-standard URL endpoint from the registry doma
lockfileVersion: LOCKFILE_VERSION,
packages: {
'@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz': {
dev: false,
engines: { node: '>=0.10.0' },
name: 'is-positive',
resolution: {
@@ -1206,6 +1230,11 @@ test('tarball installed through non-standard URL endpoint from the registry doma
version: '3.1.0',
},
},
snapshots: {
'@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz': {
dev: false,
},
},
})
})

View File

@@ -22,7 +22,7 @@ test('copy does not fail on package that self-requires itself', async () => {
expect(m).toBeTruthy() // requires-itself is available with packageImportMethod = copy
const lockfile = project.readLockfile()
expect(lockfile.packages['/@pnpm.e2e/requires-itself@1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' })
expect(lockfile.snapshots['/@pnpm.e2e/requires-itself@1.0.0'].dependencies).toStrictEqual({ 'is-positive': '1.0.0' })
})
test('packages are updated in node_modules, when packageImportMethod is set to copy and modules manifest and current lockfile are incorrect', async () => {

View File

@@ -335,7 +335,6 @@ test('uninstalling a dependency from package that uses shared lockfile', async (
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -344,6 +343,11 @@ test('uninstalling a dependency from package that uses shared lockfile', async (
},
},
},
snapshots: {
'/is-negative@1.0.0': {
dev: false,
},
},
})
})

View File

@@ -17,11 +17,16 @@ packages:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-EDvJzSLCEMnUnrrIGdV+IUWP/8w+nUjOuay2u0KW20Mnfnm3lyrdquQ+gKPNAOUfAsKL1y21np1nQN0PyP+57A==}
hasBin: true
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example@2.0.0:
resolution: {integrity: sha512-o1ULljloNzGcHI+k0NuY7aZigV5F551GpY9prYIrhMjIVNyMsERQMxLYZeKQJUnhZO5VKJNtGZlrUYkmJ1qDbw==}
requiresBuild: true
snapshots:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example@2.0.0:
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false

View File

@@ -19,25 +19,60 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/balanced-match@1.0.2:
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -48,40 +83,31 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -16,25 +16,56 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/balanced-match@1.0.2:
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -45,33 +76,26 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -16,21 +16,27 @@ packages:
/@pnpm.e2e/dep-of-optional-pkg@1.0.0:
resolution: {integrity: sha512-TBIWnj5MFb8i1cG4vh1WSaRHUsgrGXAuXH1QgKxc0D46l6c/o9bjiwTPZZb7a+CGolS9gNxIzZvc/D1XLCDStg==}
requiresBuild: true
dev: false
optional: true
/@pnpm.e2e/not-compatible-with-any-os@1.0.0:
resolution: {integrity: sha512-2g2bPBv7vBuBUbZH0DOWUkc9nKa0E7IHI4QyRUZGxr7R1TAG/oCj4Qrn3kK/XJKjhHwIZRUqaf0Kl3REgzQxSw==}
os: [this-os-does-not-exist]
requiresBuild: true
/@pnpm.e2e/pkg-with-optional@1.0.0:
resolution: {integrity: sha512-RzAje0bEtf/XhAXgrTNYuXbpRfnkxHlXIGtfmLkK34B0yPnKXNL8qC/jZYv6LOo7bR0+rBSU6nrVb9qzNHIUmA==}
snapshots:
/@pnpm.e2e/dep-of-optional-pkg@1.0.0:
dev: false
optional: true
/@pnpm.e2e/not-compatible-with-any-os@1.0.0:
dependencies:
'@pnpm.e2e/dep-of-optional-pkg': 1.0.0
dev: false
optional: true
/@pnpm.e2e/pkg-with-optional@1.0.0:
resolution: {integrity: sha512-RzAje0bEtf/XhAXgrTNYuXbpRfnkxHlXIGtfmLkK34B0yPnKXNL8qC/jZYv6LOo7bR0+rBSU6nrVb9qzNHIUmA==}
optionalDependencies:
'@pnpm.e2e/not-compatible-with-any-os': 1.0.0
dev: false

View File

@@ -18,4 +18,8 @@ packages:
resolution: {integrity: sha512-HP/5Rgt3pVFLzjmN9qJJ6vZMgCwoCIl/m2bPndYT283CUqnmFiMx0GeeIJ7SyK6TYoJM78SEvFEOQie++caHqw==, tarball: file:../tar-pkg-1.0.0.tgz}
name: tar-pkg
version: 1.0.0
snapshots:
file:../tar-pkg-1.0.0.tgz:
dev: false

View File

@@ -23,25 +23,64 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/is-negative@2.1.0:
dev: true
/is-positive@1.0.0:
dev: false
/rimraf@2.7.1:
dependencies:
glob: 7.2.3
dev: false
/glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -51,51 +90,42 @@ packages:
path-is-absolute: 1.0.1
dev: false
/fs.realpath@1.0.0:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
dev: true
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false
/inherits@2.0.4:
dev: false
/minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/balanced-match@1.0.2:
dev: false
/concat-map@0.0.1:
dev: false
/path-is-absolute@1.0.1:
dev: false

View File

@@ -27,50 +27,112 @@ packages:
peerDependenciesMeta:
supports-color:
optional: true
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
/destroy@1.0.4:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
/etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
/fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
/has-flag@1.0.0:
resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
engines: {node: '>=0.10.0'}
/http-errors@1.8.1:
resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
engines: {node: '>= 0.6'}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
/ms@1.0.0:
resolution: {integrity: sha512-85ytwCiGUnD84ui6ULG1KBFMaZgHW3jg5KPr9jt+ZPYt75+XK+JGbYddGrBQ+RSHXOhekCnCZwJywBoFvFl0kw==}
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
/on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
/range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
/send@0.17.2:
resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==}
engines: {node: '>= 0.8.0'}
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
/statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
snapshots:
/debug@2.6.9:
dependencies:
ms: 2.0.0
dev: false
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
dev: false
/destroy@1.0.4:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
dev: false
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: false
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
dev: false
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
dev: false
/etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
dev: false
/fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
dev: false
/has-flag@1.0.0:
resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
engines: {node: '>=0.10.0'}
dev: false
/http-errors@1.8.1:
resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
engines: {node: '>= 0.6'}
dependencies:
depd: 1.1.2
inherits: 2.0.4
@@ -80,42 +142,29 @@ packages:
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
dev: false
/ms@1.0.0:
resolution: {integrity: sha512-85ytwCiGUnD84ui6ULG1KBFMaZgHW3jg5KPr9jt+ZPYt75+XK+JGbYddGrBQ+RSHXOhekCnCZwJywBoFvFl0kw==}
dev: false
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
dev: false
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false
/on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
dependencies:
ee-first: 1.1.1
dev: false
/range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
dev: false
/send@0.17.2:
resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==}
engines: {node: '>= 0.8.0'}
dependencies:
debug: 2.6.9
depd: 1.1.2
@@ -135,15 +184,10 @@ packages:
dev: false
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
dev: false
/statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
dev: false
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
dev: false

View File

@@ -23,20 +23,30 @@ packages:
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
/wrappy@1.0.2: {}

View File

@@ -14,12 +14,28 @@ importers:
packages:
/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0):
/@pnpm.e2e/abc@1.0.0:
resolution: {integrity: sha512-pXCDz60zZZ33NeZpkHZtikJBbyAHjK42Nv33wgxGXV/bNDhLfXQ9yQTsVXfR1xOwJ55n2nV+Zkx/W0Lo5YL8ag==}
peerDependencies:
'@pnpm.e2e/peer-a': ^1.0.0
'@pnpm.e2e/peer-b': ^1.0.0
'@pnpm.e2e/peer-c': ^1.0.0
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: sha512-atUXGBNAbym4OioYcKt1qTjiH23CSfZ1K2N8JgCUewSE5gY/i9YoK7Ez6+CuEZbH+O3R+HKNrRIaZfnkv/93tg==}
/@pnpm.e2e/peer-a@1.0.1:
resolution: {integrity: sha512-cyU9jFho5DTPXyyUuMrR4eK5r9ExqStBjoqVOTxb748Q5G9SOgqjZduUDCxA27x6j8GWCmNTt2qOI5WcAROHuQ==}
/@pnpm.e2e/peer-b@1.0.0:
resolution: {integrity: sha512-/xEON+6CnPFjT8WUWdDI+ZaK+/foZqWhqhzEslQvjaRUZZPD9ClSa1VQqrRLK7DctB9X01rYorCDfRrCCgNU4w==}
/@pnpm.e2e/peer-c@1.0.0:
resolution: {integrity: sha512-mIxp7K4B8IeXU/fuEP/llay2xDR+hyyhwlqL9D+/3NewrXTyvJUjp8cNagIuEOjA/1VZCDcNQfI947LjsSe3qQ==}
snapshots:
/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0):
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.0.0
'@pnpm.e2e/peer-a': 1.0.1
@@ -28,17 +44,13 @@ packages:
dev: true
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.0.0:
resolution: {integrity: sha512-atUXGBNAbym4OioYcKt1qTjiH23CSfZ1K2N8JgCUewSE5gY/i9YoK7Ez6+CuEZbH+O3R+HKNrRIaZfnkv/93tg==}
dev: true
/@pnpm.e2e/peer-a@1.0.1:
resolution: {integrity: sha512-cyU9jFho5DTPXyyUuMrR4eK5r9ExqStBjoqVOTxb748Q5G9SOgqjZduUDCxA27x6j8GWCmNTt2qOI5WcAROHuQ==}
dev: true
/@pnpm.e2e/peer-b@1.0.0:
resolution: {integrity: sha512-/xEON+6CnPFjT8WUWdDI+ZaK+/foZqWhqhzEslQvjaRUZZPD9ClSa1VQqrRLK7DctB9X01rYorCDfRrCCgNU4w==}
dev: true
/@pnpm.e2e/peer-c@1.0.0:
resolution: {integrity: sha512-mIxp7K4B8IeXU/fuEP/llay2xDR+hyyhwlqL9D+/3NewrXTyvJUjp8cNagIuEOjA/1VZCDcNQfI947LjsSe3qQ==}
dev: true

View File

@@ -14,68 +14,280 @@ importers:
packages:
/@most/multicast@1.3.0(most@1.9.0):
/@most/multicast@1.3.0:
resolution: {integrity: sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==}
peerDependencies:
most: ^1.0.1
/@most/prelude@1.8.0:
resolution: {integrity: sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==}
/@types/common-tags@1.8.4:
resolution: {integrity: sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==}
/@types/node@9.6.61:
resolution: {integrity: sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==}
/@types/ramda@0.25.51:
resolution: {integrity: sha512-xcmtfHIgF9SYjhGdsZR1nQslxG4hu0cIpFfLQ4CWdw3KzHvl7ki1AzFLQUkbDTG42ZN3ZsQfdRzXRlkAvbIy5Q==}
/@types/semver@5.5.0:
resolution: {integrity: sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==}
/ansi-diff@1.1.1:
resolution: {integrity: sha512-XnTdFDQzbEewrDx8epWXdw7oqHMvv315vEtfqDiEhhWghIf4++h26c3/FMz7iTLhNrnj56DNIXpbxHZq+3s6qw==}
/ansi-regex@3.0.1:
resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
engines: {node: '>=4'}
/ansi-split@1.0.1:
resolution: {integrity: sha512-RRxQym4DFtDNmHIkW6aeFVvrXURb11lGAEPXNiryjCe8bK8RsANjzJ0M2aGOkvBYwP4Bl/xZ8ijtr6D3j1x/eg==}
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
/as-table@1.0.55:
resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
/cli-cursor@2.1.0:
resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
engines: {node: '>=4'}
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
/color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
/common-tags@1.8.2:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
/data-uri-to-buffer@2.0.2:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
/es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
/get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
/get-source@1.0.42:
resolution: {integrity: sha512-uM5xCIG5w2meVbiZaID4ajH6J8OfApqhlKXtZwsS/IIM9PLb0b2kc5sRdy78yEDfxsIYEWNk0OVxai6OpDCExA==}
/globalthis@1.0.3:
resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
engines: {node: '>= 0.4'}
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
/has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
engines: {node: '>= 0.4'}
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
/hasown@2.0.1:
resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
engines: {node: '>= 0.4'}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
/mimic-fn@1.2.0:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
engines: {node: '>=4'}
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
/most-last@1.0.1:
resolution: {integrity: sha512-ycc+leSrXoGRjxhsZJW/l+Sk0CXj9e/z6EP5ebZ8A+zDWGRq1v/oeNkyQF4TG95LnT5Q0ysG+5piJYSR86k58A==}
peerDependencies:
most: ^1.0.3
/most@1.9.0:
resolution: {integrity: sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==}
/ndjson@1.5.0:
resolution: {integrity: sha512-hUPLuaziboGjNF7wHngkgVc0FOclR8dDk/HfEvTtDr/iUrqBWiRcRSTK3/nLOqKH33th714BrMmTPtObI9gZxQ==}
hasBin: true
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
/onetime@2.0.1:
resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
engines: {node: '>=4'}
/pnpm-default-reporter@0.14.7:
resolution: {integrity: sha512-uHBIrBDxS/K82cGaxSQnhMYPJyYI4mX/28voWxqtFwIqhR0Gjf73EGN1wUc3lD38HdQDkCrSk5HBwp5N21AONw==}
engines: {node: '>=4'}
hasBin: true
peerDependencies:
supi: '>=0.12.5 <0.15.0'
/pretty-bytes@4.0.2:
resolution: {integrity: sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw==}
engines: {node: '>=4'}
/printable-characters@1.0.42:
resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
/ramda@0.25.0:
resolution: {integrity: sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==}
/readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
/restore-cursor@2.0.0:
resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
engines: {node: '>=4'}
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
/semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
/split2@2.2.0:
resolution: {integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==}
/stacktracey@1.2.127:
resolution: {integrity: sha512-tj3BObW/adLIAQGGQ0flRTADrCv6KQ4VgncUO8NrQ7pk/H6pGMtXxQLjZYw66eqPDTC1DHtnBwGSmG+Wx/D/kg==}
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
/symbol-observable@2.0.3:
resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==}
engines: {node: '>=0.10'}
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
/zen-observable@0.7.1:
resolution: {integrity: sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==}
/zen-push@0.2.1:
resolution: {integrity: sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==}
snapshots:
/@most/multicast@1.3.0(most@1.9.0):
dependencies:
'@most/prelude': 1.8.0
most: 1.9.0
dev: false
/@most/prelude@1.8.0:
resolution: {integrity: sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==}
dev: false
/@types/common-tags@1.8.4:
resolution: {integrity: sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==}
dev: false
/@types/node@9.6.61:
resolution: {integrity: sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==}
dev: false
/@types/ramda@0.25.51:
resolution: {integrity: sha512-xcmtfHIgF9SYjhGdsZR1nQslxG4hu0cIpFfLQ4CWdw3KzHvl7ki1AzFLQUkbDTG42ZN3ZsQfdRzXRlkAvbIy5Q==}
dev: false
/@types/semver@5.5.0:
resolution: {integrity: sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==}
dev: false
/ansi-diff@1.1.1:
resolution: {integrity: sha512-XnTdFDQzbEewrDx8epWXdw7oqHMvv315vEtfqDiEhhWghIf4++h26c3/FMz7iTLhNrnj56DNIXpbxHZq+3s6qw==}
dependencies:
ansi-split: 1.0.1
dev: false
/ansi-regex@3.0.1:
resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
engines: {node: '>=4'}
dev: false
/ansi-split@1.0.1:
resolution: {integrity: sha512-RRxQym4DFtDNmHIkW6aeFVvrXURb11lGAEPXNiryjCe8bK8RsANjzJ0M2aGOkvBYwP4Bl/xZ8ijtr6D3j1x/eg==}
dependencies:
ansi-regex: 3.0.1
dev: false
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
dev: false
/as-table@1.0.55:
resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
dependencies:
printable-characters: 1.0.42
dev: false
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
@@ -83,38 +295,28 @@ packages:
dev: false
/cli-cursor@2.1.0:
resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
engines: {node: '>=4'}
dependencies:
restore-cursor: 2.0.0
dev: false
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
dev: false
/color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
dev: false
/common-tags@1.8.2:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
dev: false
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: false
/data-uri-to-buffer@2.0.2:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
dev: false
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
@@ -122,8 +324,6 @@ packages:
dev: false
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
@@ -131,29 +331,20 @@ packages:
dev: false
/es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
dev: false
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
dev: false
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
dev: false
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
dev: false
/get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
@@ -163,84 +354,61 @@ packages:
dev: false
/get-source@1.0.42:
resolution: {integrity: sha512-uM5xCIG5w2meVbiZaID4ajH6J8OfApqhlKXtZwsS/IIM9PLb0b2kc5sRdy78yEDfxsIYEWNk0OVxai6OpDCExA==}
dependencies:
data-uri-to-buffer: 2.0.2
source-map: 0.6.1
dev: false
/globalthis@1.0.3:
resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.2.1
dev: false
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
get-intrinsic: 1.2.4
dev: false
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
dev: false
/has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
es-define-property: 1.0.0
dev: false
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
engines: {node: '>= 0.4'}
dev: false
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
dev: false
/hasown@2.0.1:
resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: false
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
dev: false
/mimic-fn@1.2.0:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
engines: {node: '>=4'}
dev: false
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: false
/most-last@1.0.1(most@1.9.0):
resolution: {integrity: sha512-ycc+leSrXoGRjxhsZJW/l+Sk0CXj9e/z6EP5ebZ8A+zDWGRq1v/oeNkyQF4TG95LnT5Q0ysG+5piJYSR86k58A==}
peerDependencies:
most: ^1.0.3
dependencies:
most: 1.9.0
dev: false
/most@1.9.0:
resolution: {integrity: sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==}
dependencies:
'@most/multicast': 1.3.0(most@1.9.0)
'@most/prelude': 1.8.0
@@ -249,8 +417,6 @@ packages:
dev: false
/ndjson@1.5.0:
resolution: {integrity: sha512-hUPLuaziboGjNF7wHngkgVc0FOclR8dDk/HfEvTtDr/iUrqBWiRcRSTK3/nLOqKH33th714BrMmTPtObI9gZxQ==}
hasBin: true
dependencies:
json-stringify-safe: 5.0.1
minimist: 1.2.8
@@ -259,23 +425,14 @@ packages:
dev: false
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
dev: false
/onetime@2.0.1:
resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
engines: {node: '>=4'}
dependencies:
mimic-fn: 1.2.0
dev: false
/pnpm-default-reporter@0.14.7:
resolution: {integrity: sha512-uHBIrBDxS/K82cGaxSQnhMYPJyYI4mX/28voWxqtFwIqhR0Gjf73EGN1wUc3lD38HdQDkCrSk5HBwp5N21AONw==}
engines: {node: '>=4'}
hasBin: true
peerDependencies:
supi: '>=0.12.5 <0.15.0'
dependencies:
'@types/common-tags': 1.8.4
'@types/node': 9.6.61
@@ -296,24 +453,18 @@ packages:
dev: false
/pretty-bytes@4.0.2:
resolution: {integrity: sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw==}
engines: {node: '>=4'}
dev: false
/printable-characters@1.0.42:
resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
dev: false
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: false
/ramda@0.25.0:
resolution: {integrity: sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==}
dev: false
/readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
dependencies:
core-util-is: 1.0.3
inherits: 2.0.4
@@ -325,84 +476,63 @@ packages:
dev: false
/restore-cursor@2.0.0:
resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
engines: {node: '>=4'}
dependencies:
onetime: 2.0.1
signal-exit: 3.0.7
dev: false
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
dev: false
/semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
dev: false
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: false
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: false
/split2@2.2.0:
resolution: {integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==}
dependencies:
through2: 2.0.5
dev: false
/stacktracey@1.2.127:
resolution: {integrity: sha512-tj3BObW/adLIAQGGQ0flRTADrCv6KQ4VgncUO8NrQ7pk/H6pGMtXxQLjZYw66eqPDTC1DHtnBwGSmG+Wx/D/kg==}
dependencies:
as-table: 1.0.55
get-source: 1.0.42
dev: false
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
dev: false
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
dev: false
/symbol-observable@2.0.3:
resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==}
engines: {node: '>=0.10'}
dev: false
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
dependencies:
readable-stream: 2.3.8
xtend: 4.0.2
dev: false
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: false
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
dev: false
/zen-observable@0.7.1:
resolution: {integrity: sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==}
dev: false
/zen-push@0.2.1:
resolution: {integrity: sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==}
dependencies:
zen-observable: 0.7.1
dev: false

View File

@@ -22,24 +22,39 @@ packages:
peerDependenciesMeta:
supports-color:
optional: true
/diskusage@1.2.0:
resolution: {integrity: sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==}
/es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
/expire-fs@2.2.3:
resolution: {integrity: sha512-ofQ0zNXKProir7/dtNAJiOucthMhraUznLiPd2MpoFexVi21BfGj0owPO5wMleO5cmSVOPRPJf8+XZqLpix4Ew==}
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
/nan@2.18.0:
resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==}
snapshots:
/debug@4.3.4:
dependencies:
ms: 2.1.2
dev: false
/diskusage@1.2.0:
resolution: {integrity: sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==}
requiresBuild: true
dependencies:
es6-promise: 4.2.8
nan: 2.18.0
dev: false
/es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
dev: false
/expire-fs@2.2.3:
resolution: {integrity: sha512-ofQ0zNXKProir7/dtNAJiOucthMhraUznLiPd2MpoFexVi21BfGj0owPO5wMleO5cmSVOPRPJf8+XZqLpix4Ew==}
dependencies:
debug: 4.3.4
diskusage: 1.2.0
@@ -48,9 +63,7 @@ packages:
dev: false
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: false
/nan@2.18.0:
resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==}
dev: false

View File

@@ -17,11 +17,16 @@ packages:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-EDvJzSLCEMnUnrrIGdV+IUWP/8w+nUjOuay2u0KW20Mnfnm3lyrdquQ+gKPNAOUfAsKL1y21np1nQN0PyP+57A==}
hasBin: true
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0:
resolution: {integrity: sha512-0jRoMb0OT36kI9yyTeu2tUkLkxglmpL1yFS1BUm+fvt4qc22geBqALefFFv3eVWY/6c6GiRHRs6Gba9YPH7QDw==}
requiresBuild: true
snapshots:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
dev: false
/@pnpm.e2e/pre-and-postinstall-scripts-example@1.0.0:
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false

View File

@@ -31,44 +31,92 @@ packages:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
resolution: {integrity: sha512-EDvJzSLCEMnUnrrIGdV+IUWP/8w+nUjOuay2u0KW20Mnfnm3lyrdquQ+gKPNAOUfAsKL1y21np1nQN0PyP+57A==}
hasBin: true
dev: false
/@pnpm.e2e/pkg-with-peer-having-bin@1.0.0:
resolution: {integrity: sha512-PjcOgsbOBI5KvVhVcKlP8cmzzszWgfdvwVzgMWdirrzU1zvq5O/fO1/5/YLLWw1RJ6M+VYu0t2GA08n1pqCxiA==}
peerDependencies:
'@pnpm.e2e/peer-with-bin': ^1.0.0
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/@pnpm.e2e/hello-world-js-bin@1.0.0:
dev: false
/@pnpm.e2e/pkg-with-peer-having-bin@1.0.0:
dependencies:
'@pnpm.e2e/hello-world-js-bin': 1.0.0
dev: false
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -79,50 +127,37 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
dev: true
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -30,32 +30,80 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/balanced-match@1.0.2:
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -66,55 +114,40 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
dev: true
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
dev: false
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -20,10 +20,20 @@ packages:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0:
resolution: {integrity: sha512-60+yiZtuRbojMieLzg4UxzBs5fxSVfRtTRNKvdfTaLTb/2XLZTZORTSWkz8ttCGmNbMv5Li2gP4TNgVFMbnYgw==}
dev: false
/@pnpm.e2e/pkg-with-good-optional@1.0.0:
resolution: {integrity: sha512-KfshZeGJiii1oEMjabBfxZ/rB14oJfE7wtFIRHmElIIZZHZlDtP1u4m8nBYrFKs4b8Dku4BCMV6pO0uMIVwHpQ==}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
snapshots:
/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0:
dev: false
/@pnpm.e2e/pkg-with-good-optional@1.0.0:
dependencies:
'@pnpm.e2e/dep-of-pkg-with-1-dep': 100.1.0
optionalDependencies:
@@ -31,8 +41,5 @@ packages:
dev: false
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
optional: true

View File

@@ -27,32 +27,76 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/balanced-match@1.0.2:
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/colors@1.2.0:
resolution: {integrity: sha512-lweugcX5nailCqZBttArTojZZpHGWhmFJX78KJHlxwhM8tLAy5QCgRgRxrubrksdvA+2Y3inWG5TToyyjL82BQ==}
engines: {node: '>=0.1.90'}
requiresBuild: true
dev: false
optional: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -63,50 +107,37 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/is-negative@2.1.0:
resolution: {integrity: sha512-+iCKT4ZcvjRnjkHnQjZ8/qfciLLGD8BFKS0GNR5VjDU6jEiwh899R0GSMkaYcuTNd7fEKXb3Qib0webe6HczNw==}
engines: {node: '>=0.10.0'}
dev: true
/is-positive@1.0.0:
resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==}
engines: {node: '>=0.10.0'}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -16,21 +16,54 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/glob@6.0.4:
resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==}
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/rimraf@2.5.1:
resolution: {integrity: sha512-CNymZDrSR9PfkqZnBWaIki7Wlba4c7GzSkSKsHHvjXswXmJA1hM8ZHFrNWIt4L/WcR9kOwvsJZpbxV4fygtXag==}
hasBin: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
snapshots:
/balanced-match@1.0.2:
dev: false
/brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: false
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
/glob@6.0.4:
resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==}
dependencies:
inflight: 1.0.6
inherits: 2.0.4
@@ -40,40 +73,31 @@ packages:
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: false
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: false
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: false
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: false
/rimraf@2.5.1:
resolution: {integrity: sha512-CNymZDrSR9PfkqZnBWaIki7Wlba4c7GzSkSKsHHvjXswXmJA1hM8ZHFrNWIt4L/WcR9kOwvsJZpbxV4fygtXag==}
hasBin: true
dependencies:
glob: 6.0.4
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false

View File

@@ -225,7 +225,7 @@ test('installing non-prod deps then all deps', async () => {
{
const lockfile = project.readLockfile()
expect(lockfile.packages['/is-positive@1.0.0'].dev === false).toBeTruthy()
expect(lockfile.snapshots['/is-positive@1.0.0'].dev === false).toBeTruthy()
}
{

View File

@@ -13,7 +13,7 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
},
},
},
@@ -20,18 +20,6 @@
@@ -20,99 +20,71 @@
},
"lockfileVersion": "7.0",
"packages": Object {
@@ -30,22 +30,25 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
- },
- },
"/ajv@6.12.6": Object {
"dependencies": Object {
"fast-deep-equal": "3.1.3",
@@ -42,24 +30,12 @@
"dev": false,
- "dependencies": Object {
- "fast-deep-equal": "3.1.3",
- "fast-json-stable-stringify": "2.1.0",
- "json-schema-traverse": "0.4.1",
- "uri-js": "4.4.1",
- },
- "dev": false,
"resolution": Object {
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- },
- },
},
},
- "/fast-deep-equal@2.0.1": Object {
- "dev": false,
- "resolution": Object {
- "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
},
},
- },
- },
"/fast-deep-equal@3.1.3": Object {
"dev": false,
- "dev": false,
"resolution": Object {
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- },
@@ -57,46 +60,92 @@ exports[`pnpm dedupe updates old resolutions from importers block and removes ol
},
},
"/fast-json-stable-stringify@2.1.0": Object {
@@ -73,16 +49,7 @@
- "dev": false,
"resolution": Object {
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
},
},
"/json-schema-traverse@0.4.1": Object {
- "dev": false,
"resolution": Object {
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
},
- },
},
- "/punycode@2.1.1": Object {
- "dev": false,
+ "/punycode@2.3.0": Object {
"engines": Object {
"node": ">=6",
},
"resolution": Object {
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ },
},
+ "/uri-js@4.4.1": Object {
+ "resolution": Object {
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
},
- "/punycode@2.3.0": Object {
- "dev": false,
- "engines": Object {
- "node": ">=6",
},
- "resolution": Object {
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- },
- },
"/punycode@2.3.0": Object {
"dev": false,
"engines": Object {
@@ -90,15 +57,6 @@
},
"resolution": Object {
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- },
- },
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
},
+ "settings": Object {
+ "autoInstallPeers": true,
+ "excludeLinksFromLockfile": false,
},
- "/uri-js@4.2.2": Object {
- "dependencies": Object {
+ "snapshots": Object {
+ "/ajv@6.12.6": Object {
"dependencies": Object {
- "punycode": "2.1.1",
- },
- "dev": false,
+ "fast-deep-equal": "3.1.3",
+ "fast-json-stable-stringify": "2.1.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.4.1",
+ },
+ "dev": false,
},
+ "/fast-deep-equal@3.1.3": Object {
"dev": false,
- "resolution": Object {
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
},
+ },
+ "/fast-json-stable-stringify@2.1.0": Object {
+ "dev": false,
},
"/uri-js@4.4.1": Object {"
+ "/json-schema-traverse@0.4.1": Object {
+ "dev": false,
},
+ "/punycode@2.3.0": Object {
+ "dev": false,
+ },
"/uri-js@4.4.1": Object {
"dependencies": Object {
"punycode": "2.3.0",
},
"dev": false,
- "resolution": Object {
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
},
- },
- },
- "settings": Object {
- "autoInstallPeers": true,
- "excludeLinksFromLockfile": false,
},
}"
`;
exports[`pnpm dedupe updates old resolutions from package block 1`] = `
"- Expected
+ Received
@@ -20,15 +20,6 @@
@@ -20,17 +20,7 @@
},
"lockfileVersion": "7.0",
"packages": Object {
@@ -110,15 +159,51 @@ exports[`pnpm dedupe updates old resolutions from package block 1`] = `
- },
- },
"/punycode@2.3.0": Object {
"dev": false,
- "dev": false,
"engines": Object {
@@ -40,7 +31,7 @@
"node": ">=6",
},
@@ -39,19 +29,11 @@
},
},
"/uri-js@4.2.2": Object {
"dependencies": Object {
- "dependencies": Object {
- "punycode": "2.1.1",
+ "punycode": "2.3.0",
- },
- "dev": false,
"resolution": Object {
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
},
"dev": false,
"resolution": Object {"
},
"/uri-js@4.4.1": Object {
- "dependencies": Object {
- "punycode": "2.3.0",
- },
- "dev": false,
"resolution": Object {
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
},
@@ -60,5 +42,22 @@
"settings": Object {
"autoInstallPeers": true,
"excludeLinksFromLockfile": false,
+ },
+ "snapshots": Object {
+ "/punycode@2.3.0": Object {
+ "dev": false,
+ },
+ "/uri-js@4.2.2": Object {
+ "dependencies": Object {
+ "punycode": "2.3.0",
+ },
+ "dev": false,
+ },
+ "/uri-js@4.4.1": Object {
+ "dependencies": Object {
+ "punycode": "2.3.0",
+ },
+ "dev": false,
+ },
},
}"
`;

35
pnpm-lock.yaml generated
View File

@@ -25,6 +25,9 @@ overrides:
packageExtensionsChecksum: c10f23a87945689e805208f26d04480d
patchedDependencies:
'@zkochan/js-yaml@0.0.6':
hash: wqtk5n3rzxb75j47xc7cwv6dje
path: __patches__/@zkochan__js-yaml@0.0.6.patch
graceful-fs@4.2.11:
hash: ivtm2a2cfr5pomcfbedhmr5v2q
path: __patches__/graceful-fs@4.2.11.patch
@@ -2106,6 +2109,9 @@ importers:
'@pnpm/lockfile-types':
specifier: workspace:*
version: link:../lockfile-types
'@pnpm/lockfile-utils':
specifier: workspace:*
version: link:../lockfile-utils
'@pnpm/logger':
specifier: ^5.0.0
version: 5.0.0
@@ -2126,7 +2132,7 @@ importers:
version: 1.0.0
js-yaml:
specifier: npm:@zkochan/js-yaml@0.0.6
version: /@zkochan/js-yaml@0.0.6
version: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
normalize-path:
specifier: ^3.0.0
version: 3.0.0
@@ -2672,6 +2678,12 @@ importers:
'@types/ramda':
specifier: 0.28.20
version: 0.28.20
execa:
specifier: npm:safe-execa@0.1.2
version: /safe-execa@0.1.2
pnpm:
specifier: workspace:^
version: link:../../pnpm
packages/parse-wanted-dependency:
dependencies:
@@ -7837,7 +7849,7 @@ packages:
globals: 13.24.0
ignore: 5.3.1
import-fresh: 3.3.0
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
@@ -9675,10 +9687,11 @@ packages:
istanbul-lib-report: 3.0.1
dev: true
/@zkochan/js-yaml@0.0.6:
/@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje):
resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==}
dependencies:
argparse: 2.0.1
patched: true
/@zkochan/retry@0.2.0:
resolution: {integrity: sha512-WhB+2B/ZPlW2Xy/kMJBrMbqecWXcbDDgn0K0wKBAgO2OlBTz1iLJrRWduo+DGGn0Akvz1Lu4Xvls7dJojximWw==}
@@ -9704,6 +9717,7 @@ packages:
/@zkochan/which@2.0.3:
resolution: {integrity: sha512-C1ReN7vt2/2O0fyTsx5xnbQuxBrmG5NMSbcIkPKCCfCTJgpZBsuRYzFXHj3nVq8vTfK7vxHUmzfCpSHgO7j4rg==}
engines: {node: '>= 8'}
hasBin: true
dependencies:
isexe: 2.0.0
@@ -10887,7 +10901,7 @@ packages:
engines: {node: '>=14'}
dependencies:
import-fresh: 3.3.0
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
parse-json: 5.2.0
path-type: 4.0.0
dev: true
@@ -10902,7 +10916,7 @@ packages:
optional: true
dependencies:
import-fresh: 3.3.0
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
parse-json: 5.2.0
path-type: 4.0.0
typescript: 5.3.3
@@ -11846,7 +11860,7 @@ packages:
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
@@ -15775,7 +15789,7 @@ packages:
resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==}
engines: {node: '>=10.13'}
dependencies:
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
strip-bom: 4.0.0
/readable-stream@2.3.8:
@@ -17525,7 +17539,7 @@ packages:
fast-safe-stringify: 2.1.1
handlebars: 4.7.7
http-errors: 2.0.0
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
jsonwebtoken: 9.0.0
kleur: 4.1.5
lodash: 4.17.21
@@ -17857,14 +17871,14 @@ packages:
resolution: {integrity: sha512-LwyucHy0uhWqbrOkh9cBluZBeNVxzHjDaE9mwepZG3n3ZlbM4v3ndrFw51zW/NXYFFqP+QWZ72ihtLWTh05e4Q==}
engines: {node: '>=10.13'}
dependencies:
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
write-file-atomic: 3.0.3
/write-yaml-file@5.0.0:
resolution: {integrity: sha512-FdNA4RyH1L43TlvGG8qOMIfcEczwA5ij+zLXUy3Z83CjxhLvcV7/Q/8pk22wnCgYw7PJhtK+7lhO+qqyT4NdvQ==}
engines: {node: '>=16.14'}
dependencies:
js-yaml: /@zkochan/js-yaml@0.0.6
js-yaml: /@zkochan/js-yaml@0.0.6(patch_hash=wqtk5n3rzxb75j47xc7cwv6dje)
write-file-atomic: 5.0.1
/xdg-basedir@5.1.0:
@@ -18001,4 +18015,5 @@ packages:
time:
/fuse-native@2.2.6: '2020-06-03T19:26:36.838Z'
/node-gyp@10.0.1: '2023-11-02T18:13:42.360Z'
/safe-execa@0.1.2: '2022-07-18T01:09:17.517Z'
/symlink-dir@5.2.1: '2023-12-24T23:15:15.543Z'

View File

@@ -275,7 +275,7 @@ test('adding or changing pnpmfile should change pnpmfileChecksum and module stru
const lockfile2 = project.readLockfile()
expect(lockfile2.pnpmfileChecksum).toBe(createBase32Hash(pnpmfile2))
expect(lockfile2.packages).toMatchObject({
expect(lockfile2.snapshots).toMatchObject({
'/@pnpm.e2e/foo@100.0.0': expect.any(Object),
'/@pnpm.e2e/bar@100.0.0': expect.any(Object),
'/@pnpm.e2e/pkg-with-good-optional@1.0.0': {

View File

@@ -1,8 +1,7 @@
import fs from 'fs'
import path from 'path'
import { type Lockfile } from '@pnpm/lockfile-types'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-types'
import { prepare, preparePackages } from '@pnpm/prepare'
import { createPeersDirSuffix } from '@pnpm/dependency-path'
import { sync as readYamlFile } from 'read-yaml-file'
import loadJsonFile from 'load-json-file'
import { sync as writeYamlFile } from 'write-yaml-file'
@@ -249,10 +248,10 @@ test('readPackage hook from pnpmfile at root of workspace', async () => {
process.chdir('..')
const lockfile = readYamlFile<Lockfile>('pnpm-lock.yaml')
expect(lockfile.packages!['/is-positive@1.0.0'].dependencies).toStrictEqual({
expect(lockfile.snapshots!['/is-positive@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0',
})
expect(lockfile.packages!['/is-negative@1.0.0'].dependencies).toStrictEqual({
expect(lockfile.snapshots!['/is-negative@1.0.0'].dependencies).toStrictEqual({
'@pnpm.e2e/dep-of-pkg-with-1-dep': '100.1.0',
})
})
@@ -613,8 +612,7 @@ test('readPackage hook is used during removal inside a workspace', async () => {
process.chdir('..')
const lockfile = readYamlFile<Lockfile>('pnpm-lock.yaml')
const suffix = createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: 'is-negative', version: '1.0.0' }])
expect(lockfile.packages![`/@pnpm.e2e/abc@1.0.0${suffix}`].peerDependencies!['is-negative']).toBe('1.0.0')
expect(lockfile.packages!['/@pnpm.e2e/abc@1.0.0'].peerDependencies!['is-negative']).toBe('1.0.0')
})
test('preResolution hook', async () => {

View File

@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import { type Lockfile } from '@pnpm/lockfile-types'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-types'
import { preparePackages } from '@pnpm/prepare'
import { addDistTag } from '@pnpm/registry-mock'
import { sync as readYamlFile } from 'read-yaml-file'
@@ -42,7 +42,7 @@ auto-install-peers=false`, 'utf8')
await execPnpm(['--filter=project-2', 'add', '@pnpm.e2e/abc@1.0.0'])
const lockfile = readYamlFile<Lockfile>(path.resolve(WANTED_LOCKFILE))
const depPaths = Object.keys(lockfile.packages ?? {})
const depPaths = Object.keys(lockfile.snapshots ?? {})
expect(depPaths.length).toBe(8)
expect(depPaths).toContain(`/@pnpm.e2e/abc@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-a', version: '1.0.0' }, { name: '@pnpm.e2e/peer-b', version: '1.0.0' }, { name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)
expect(depPaths).toContain(`/@pnpm.e2e/abc-parent-with-ab@1.0.0${createPeersDirSuffix([{ name: '@pnpm.e2e/peer-c', version: '1.0.0' }])}`)

View File

@@ -3,7 +3,7 @@ import fs from 'fs'
import path from 'path'
import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '@pnpm/constants'
import { findWorkspacePackages } from '@pnpm/workspace.find-packages'
import { type LockfileFile } from '@pnpm/lockfile-types'
import { type LockfileFileV7 as LockfileFile } from '@pnpm/lockfile-types'
import { readModulesManifest } from '@pnpm/modules-yaml'
import {
prepare,
@@ -975,7 +975,6 @@ test("shared-workspace-lockfile: don't install dependencies in projects that are
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-positive@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -984,6 +983,11 @@ test("shared-workspace-lockfile: don't install dependencies in projects that are
},
},
},
snapshots: {
'/is-positive@1.0.0': {
dev: false,
},
},
})
})
@@ -1076,7 +1080,6 @@ test('shared-workspace-lockfile: install dependencies in projects that are relat
lockfileVersion: LOCKFILE_VERSION,
packages: {
'/is-negative@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -1085,7 +1088,6 @@ test('shared-workspace-lockfile: install dependencies in projects that are relat
},
},
'/is-positive@1.0.0': {
dev: false,
engines: {
node: '>=0.10.0',
},
@@ -1094,6 +1096,14 @@ test('shared-workspace-lockfile: install dependencies in projects that are relat
},
},
},
snapshots: {
'/is-negative@1.0.0': {
dev: false,
},
'/is-positive@1.0.0': {
dev: false,
},
},
})
})
@@ -1847,7 +1857,7 @@ test('peer dependencies are resolved from the root of the workspace when a new d
await execPnpm(['add', 'ajv-keywords@1.5.0', '--strict-peer-dependencies', '--config.resolve-peers-from-workspace-root=true'])
const lockfile = projects['project-1'].readLockfile()
expect(lockfile.packages).toHaveProperty(['/ajv-keywords@1.5.0(ajv@4.10.4)'])
expect(lockfile.snapshots).toHaveProperty(['/ajv-keywords@1.5.0(ajv@4.10.4)'])
})
test('overrides in workspace project should be taken into account when shared-workspace-lockfiles is false', async () => {

View File

@@ -1,6 +1,6 @@
import fs from 'fs'
import { WANTED_LOCKFILE } from '@pnpm/constants'
import type { Lockfile } from '@pnpm/lockfile-types'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-types'
import { preparePackages } from '@pnpm/prepare'
import { sync as readYamlFile } from 'read-yaml-file'
import { sync as writeYamlFile } from 'write-yaml-file'
@@ -31,5 +31,5 @@ test('peer dependency is not unlinked when adding a new dependency', async () =>
await execPnpm(['--filter=project-1', 'add', 'is-odd@1.0.0'])
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
expect(Object.keys(lockfile!.packages!)).toContain('/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@@pnpm.e2e+peer-a)')
expect(Object.keys(lockfile!.snapshots!)).toContain('/@pnpm.e2e/abc@1.0.0(@pnpm.e2e/peer-a@@pnpm.e2e+peer-a)')
})

View File

@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import { prepare, preparePackages } from '@pnpm/prepare'
import { type Lockfile } from '@pnpm/lockfile-types'
import { type LockfileV7 as Lockfile } from '@pnpm/lockfile-types'
import { sync as readYamlFile } from 'read-yaml-file'
import { isCI } from 'ci-info'
import isWindows from 'is-windows'
@@ -228,7 +228,7 @@ test('recursive installation of packages in workspace ignores hooks in packages'
await execPnpm(['install'])
const lockfile = readYamlFile<Lockfile>('pnpm-lock.yaml')
const depPaths = Object.keys(lockfile.packages ?? [])
const depPaths = Object.keys(lockfile.snapshots ?? {})
expect(depPaths).not.toContain('/@pnpm.e2e/dep-of-pkg-with-1-dep@100.1.0')
expect(depPaths).toContain('/is-number@1.0.0')
})

View File

@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import { assertStore } from '@pnpm/assert-store'
import { type LockfileFile } from '@pnpm/lockfile-file'
import { type LockfileFileV7 as LockfileFile } from '@pnpm/lockfile-file'
import { store } from '@pnpm/plugin-commands-store'
import { prepare } from '@pnpm/prepare'
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
@@ -137,9 +137,9 @@ test('keep dependencies used by others', async () => {
// all dependencies are marked as dev
const lockfile = project.readLockfile() as LockfileFile
expect(isEmpty(lockfile.packages)).toBeFalsy()
expect(isEmpty(lockfile.snapshots)).toBeFalsy()
Object.entries(lockfile.packages ?? {}).forEach(([_, dep]) => {
Object.entries(lockfile.snapshots ?? {}).forEach(([_, dep]) => {
expect(dep.dev).toBeTruthy()
})