mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-08 15:08:27 -05:00
fix: built packages should not modify the original files in the store (#4898)
This commit is contained in:
5
.changeset/good-taxis-laugh.md
Normal file
5
.changeset/good-taxis-laugh.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/build-modules": patch
|
||||
---
|
||||
|
||||
`requiresBuild` may be of any value. This is just a workaround to a typing issue. `requiresBuild` will always be boolean.
|
||||
5
.changeset/hungry-dogs-draw.md
Normal file
5
.changeset/hungry-dogs-draw.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/resolve-dependencies": major
|
||||
---
|
||||
|
||||
`requiresBuild` is sometimes a function that return a boolean promise.
|
||||
7
.changeset/seven-cats-lie.md
Normal file
7
.changeset/seven-cats-lie.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"@pnpm/core": patch
|
||||
"@pnpm/headless": patch
|
||||
"pnpm": patch
|
||||
---
|
||||
|
||||
Packages that should be built are always cloned or copied from the store. This is required to prevent the postinstall scripts from modifying the original source files of the package.
|
||||
5
.changeset/sour-stingrays-tell.md
Normal file
5
.changeset/sour-stingrays-tell.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/package-requester": patch
|
||||
---
|
||||
|
||||
Use `safe-promise-defer`.
|
||||
6
.changeset/stale-cheetahs-warn.md
Normal file
6
.changeset/stale-cheetahs-warn.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@pnpm/create-cafs-store": minor
|
||||
"@pnpm/fetcher-base": minor
|
||||
---
|
||||
|
||||
New optional option added to package importer: `requiresBuild`. When `requiresBuild` is `true`, the package should only be imported using cloning or copying.
|
||||
5
.changeset/tiny-ravens-brake.md
Normal file
5
.changeset/tiny-ravens-brake.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/create-cafs-store": minor
|
||||
---
|
||||
|
||||
New import method added: `clone-or-copy`.
|
||||
@@ -39,7 +39,7 @@
|
||||
"@commitlint/prompt-cli": "^16.0.0",
|
||||
"@pnpm/eslint-config": "workspace:*",
|
||||
"@pnpm/meta-updater": "0.0.6",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/tsconfig": "workspace:*",
|
||||
"@types/jest": "^27.4.0",
|
||||
"@types/node": "^14.17.32",
|
||||
|
||||
@@ -14,7 +14,8 @@ export interface DependenciesGraphNode {
|
||||
isBuilt?: boolean
|
||||
optional: boolean
|
||||
optionalDependencies: Set<string>
|
||||
requiresBuild?: boolean
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
requiresBuild?: boolean | any // this is a durty workaround added in https://github.com/pnpm/pnpm/pull/4898
|
||||
}
|
||||
|
||||
export interface DependenciesGraph {
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/package-store": "workspace:13.0.7",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/store-path": "workspace:6.0.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
|
||||
@@ -843,8 +843,13 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => {
|
||||
// we can use concat here because we always only append new packages, which are guaranteed to not be there by definition
|
||||
ctx.pendingBuilds = ctx.pendingBuilds
|
||||
.concat(
|
||||
result.newDepPaths
|
||||
.filter((depPath) => dependenciesGraph[depPath].requiresBuild)
|
||||
await pFilter(result.newDepPaths,
|
||||
(depPath) => {
|
||||
const requiresBuild = dependenciesGraph[depPath].requiresBuild
|
||||
if (typeof requiresBuild === 'function') return requiresBuild()
|
||||
return requiresBuild
|
||||
}
|
||||
)
|
||||
)
|
||||
} else if (result.newDepPaths?.length) {
|
||||
// postinstall hooks
|
||||
|
||||
@@ -408,10 +408,14 @@ async function linkAllPkgs (
|
||||
if (opts.sideEffectsCacheRead && filesResponse.sideEffects && !isEmpty(filesResponse.sideEffects)) {
|
||||
targetEngine = calcDepState(depNode.depPath, opts.depGraph, opts.depsStateCache)
|
||||
}
|
||||
if (typeof depNode.requiresBuild === 'function') {
|
||||
depNode.requiresBuild = await depNode.requiresBuild()
|
||||
}
|
||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||
filesResponse,
|
||||
force: opts.force,
|
||||
targetEngine,
|
||||
requiresBuild: depNode.requiresBuild,
|
||||
})
|
||||
if (importMethod) {
|
||||
progressLogger.debug({
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import { promises as fs, readFileSync } from 'fs'
|
||||
import path from 'path'
|
||||
import { addDependenciesToPackage } from '@pnpm/core'
|
||||
import { PackageFilesIndex } from '@pnpm/cafs'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { getFilePathInCafs, PackageFilesIndex } from '@pnpm/cafs'
|
||||
import { getIntegrity, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { prepareEmpty } from '@pnpm/prepare'
|
||||
import { ENGINE_NAME } from '@pnpm/constants'
|
||||
import rimraf from '@zkochan/rimraf'
|
||||
@@ -159,3 +159,28 @@ test('uploading errors do not interrupt installation', async () => {
|
||||
const filesIndex = await loadJsonFile<PackageFilesIndex>(filesIndexFile)
|
||||
expect(filesIndex.sideEffects).toBeFalsy()
|
||||
})
|
||||
|
||||
test('a postinstall script does not modify the original sources added to the store', async () => {
|
||||
prepareEmpty()
|
||||
|
||||
const opts = await testDefaults({
|
||||
fastUnpack: false,
|
||||
sideEffectsCacheRead: true,
|
||||
sideEffectsCacheWrite: true,
|
||||
}, {}, {}, { packageImportMethod: 'hardlink' })
|
||||
await addDependenciesToPackage({}, ['@pnpm/postinstall-modifies-source@1.0.0'], opts)
|
||||
|
||||
expect(readFileSync('node_modules/@pnpm/postinstall-modifies-source/empty-file.txt', 'utf8')).toContain('hello')
|
||||
|
||||
const cafsDir = path.join(opts.storeDir, 'files')
|
||||
const filesIndexFile = getFilePathInCafs(cafsDir, getIntegrity('@pnpm/postinstall-modifies-source', '1.0.0'), 'index')
|
||||
const filesIndex = await loadJsonFile<PackageFilesIndex>(filesIndexFile)
|
||||
const patchedFileIntegrity = filesIndex.sideEffects?.[`${ENGINE_NAME}-{}`]['empty-file.txt']?.integrity
|
||||
expect(patchedFileIntegrity).toBeTruthy()
|
||||
const originalFileIntegrity = filesIndex.files['empty-file.txt'].integrity
|
||||
expect(originalFileIntegrity).toBeTruthy()
|
||||
// The integrity of the original file differs from the integrity of the patched file
|
||||
expect(originalFileIntegrity).not.toEqual(patchedFileIntegrity)
|
||||
|
||||
expect(readFileSync(getFilePathInCafs(cafsDir, originalFileIntegrity, 'nonexec'), 'utf8')).toEqual('')
|
||||
})
|
||||
|
||||
@@ -19,13 +19,13 @@ interface ImportOptions {
|
||||
type ImportFunction = (to: string, opts: ImportOptions) => Promise<string | undefined>
|
||||
|
||||
export default (
|
||||
packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone'
|
||||
packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone' | 'clone-or-copy'
|
||||
): ImportFunction => {
|
||||
const importPackage = createImportPackage(packageImportMethod)
|
||||
return async (to, opts) => limitLinking(async () => importPackage(to, opts))
|
||||
}
|
||||
|
||||
function createImportPackage (packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone') {
|
||||
function createImportPackage (packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone' | 'clone-or-copy') {
|
||||
// this works in the following way:
|
||||
// - hardlink: hardlink the packages, no fallback
|
||||
// - clone: clone the packages, no fallback
|
||||
@@ -41,6 +41,8 @@ function createImportPackage (packageImportMethod?: 'auto' | 'hardlink' | 'copy'
|
||||
case 'auto': {
|
||||
return createAutoImporter()
|
||||
}
|
||||
case 'clone-or-copy':
|
||||
return createCloneOrCopyImporter()
|
||||
case 'copy':
|
||||
packageImportMethodLogger.debug({ method: 'copy' })
|
||||
return copyPkg
|
||||
@@ -87,6 +89,29 @@ function createAutoImporter (): ImportFunction {
|
||||
}
|
||||
}
|
||||
|
||||
function createCloneOrCopyImporter (): ImportFunction {
|
||||
let auto = initialAuto
|
||||
|
||||
return async (to, opts) => auto(to, opts)
|
||||
|
||||
async function initialAuto (
|
||||
to: string,
|
||||
opts: ImportOptions
|
||||
): Promise<string | undefined> {
|
||||
try {
|
||||
if (!await clonePkg(to, opts)) return undefined
|
||||
packageImportMethodLogger.debug({ method: 'clone' })
|
||||
auto = clonePkg
|
||||
return 'clone'
|
||||
} catch (err: any) { // eslint-disable-line
|
||||
// ignore
|
||||
}
|
||||
packageImportMethodLogger.debug({ method: 'copy' })
|
||||
auto = copyPkg
|
||||
return auto(to, opts)
|
||||
}
|
||||
}
|
||||
|
||||
async function clonePkg (
|
||||
to: string,
|
||||
opts: ImportOptions
|
||||
|
||||
@@ -23,7 +23,10 @@ function createPackageImporter (
|
||||
const gfm = getFlatMap.bind(null, opts.cafsDir)
|
||||
return async (to, opts) => {
|
||||
const { filesMap, isBuilt } = gfm(opts.filesResponse, opts.targetEngine)
|
||||
const impPkg = cachedImporterCreator(opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
||||
const pkgImportMethod = (opts.requiresBuild && !isBuilt)
|
||||
? 'clone-or-copy'
|
||||
: (opts.filesResponse.packageImportMethod ?? packageImportMethod)
|
||||
const impPkg = cachedImporterCreator(pkgImportMethod)
|
||||
const importMethod = await impPkg(to, { filesMap, fromStore: opts.filesResponse.fromStore, force: opts.force })
|
||||
return { importMethod, isBuilt }
|
||||
}
|
||||
|
||||
@@ -21,13 +21,16 @@ export type PackageFilesResponse = {
|
||||
filesIndex: Record<string, PackageFileInfo>
|
||||
})
|
||||
|
||||
export interface ImportPackageOpts {
|
||||
requiresBuild?: boolean
|
||||
targetEngine?: string
|
||||
filesResponse: PackageFilesResponse
|
||||
force: boolean
|
||||
}
|
||||
|
||||
export type ImportPackageFunction = (
|
||||
to: string,
|
||||
opts: {
|
||||
targetEngine?: string
|
||||
filesResponse: PackageFilesResponse
|
||||
force: boolean
|
||||
}
|
||||
opts: ImportPackageOpts
|
||||
) => Promise<{ isBuilt: boolean, importMethod: undefined | string }>
|
||||
|
||||
export interface Cafs {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"@pnpm/package-store": "workspace:13.0.7",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-projects-context": "workspace:6.0.4",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/store-path": "workspace:6.0.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
|
||||
@@ -686,6 +686,7 @@ async function linkAllPkgs (
|
||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||
filesResponse,
|
||||
force: opts.force,
|
||||
requiresBuild: depNode.requiresBuild,
|
||||
targetEngine,
|
||||
})
|
||||
if (importMethod) {
|
||||
|
||||
@@ -105,6 +105,7 @@ async function linkAllPkgsInOrder (
|
||||
const { importMethod, isBuilt } = await storeController.importPackage(depNode.dir, {
|
||||
filesResponse,
|
||||
force: opts.force || depNode.depPath !== prevGraph[dir]?.depPath,
|
||||
requiresBuild: depNode.requiresBuild,
|
||||
targetEngine,
|
||||
})
|
||||
if (importMethod) {
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"promise-share": "^1.0.0",
|
||||
"ramda": "^0.27.1",
|
||||
"rename-overwrite": "^4.0.2",
|
||||
"safe-promise-defer": "^1.0.1",
|
||||
"semver": "^7.3.4",
|
||||
"ssri": "^8.0.1"
|
||||
},
|
||||
@@ -65,7 +66,7 @@
|
||||
"@pnpm/create-cafs-store": "workspace:1.0.3",
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/package-requester": "workspace:18.0.7",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/normalize-path": "^3.0.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
|
||||
@@ -51,7 +51,7 @@ import renameOverwrite from 'rename-overwrite'
|
||||
import semver from 'semver'
|
||||
import ssri from 'ssri'
|
||||
import equalOrSemverEqual from './equalOrSemverEqual'
|
||||
import safeDeferredPromise from './safeDeferredPromise'
|
||||
import safePromiseDefer from 'safe-promise-defer'
|
||||
|
||||
const TARBALL_INTEGRITY_FILENAME = 'tarball-integrity'
|
||||
const packageRequestLogger = logger('package-requester')
|
||||
@@ -441,7 +441,7 @@ function fetchToStore (
|
||||
|
||||
if ((pkgFilesIndex?.files) != null) {
|
||||
const manifest = opts.fetchRawManifest
|
||||
? safeDeferredPromise<DependencyManifest | undefined>()
|
||||
? safePromiseDefer<DependencyManifest | undefined>()
|
||||
: undefined
|
||||
if (
|
||||
(
|
||||
@@ -498,7 +498,7 @@ Actual package in the store by the given integrity: ${pkgFilesIndex.name}@${pkgF
|
||||
const priority = (++ctx.requestsQueue['counter'] % ctx.requestsQueue['concurrency'] === 0 ? -1 : 1) * 1000 // eslint-disable-line
|
||||
|
||||
const fetchManifest = opts.fetchRawManifest
|
||||
? safeDeferredPromise<DependencyManifest | undefined>()
|
||||
? safePromiseDefer<DependencyManifest | undefined>()
|
||||
: undefined
|
||||
if (fetchManifest != null) {
|
||||
fetchManifest()
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
import pShare from 'promise-share'
|
||||
|
||||
export default function safeDeferredPromise<T> () {
|
||||
let _resolve!: (v: T) => void
|
||||
let _reject!: (err: Error) => void
|
||||
|
||||
const promiseFn = pShare(new Promise<T>((resolve, reject) => {
|
||||
_resolve = resolve
|
||||
_reject = reject
|
||||
}))
|
||||
|
||||
return Object.assign(promiseFn, { resolve: _resolve, reject: _reject })
|
||||
}
|
||||
@@ -39,7 +39,7 @@
|
||||
"@pnpm/modules-yaml": "workspace:10.0.2",
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.1.1",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/is-ci": "^3.0.0",
|
||||
"@types/proxyquire": "^1.3.28",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.1.1",
|
||||
"@pnpm/plugin-commands-listing": "workspace:5.0.12",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"execa": "npm:safe-execa@^0.1.1",
|
||||
"strip-ansi": "^6.0.0",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.1.1",
|
||||
"@pnpm/plugin-commands-outdated": "workspace:6.0.12",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@types/lru-cache": "^5.1.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/wrap-ansi": "^3.0.0",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-publishing": "workspace:5.0.13",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@types/cross-spawn": "^6.0.2",
|
||||
"@types/is-ci": "^3.0.0",
|
||||
"@types/is-windows": "^1.0.0",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-rebuild": "workspace:6.1.11",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/semver": "^7.3.4",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-script-runners": "workspace:5.0.15",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@types/is-windows": "^1.0.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"is-windows": "^1.0.2",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-store": "workspace:5.1.11",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@types/archy": "0.0.31",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/ssri": "^7.1.0",
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-package-json": "workspace:6.0.3",
|
||||
"@pnpm/read-project-manifest": "workspace:3.0.3",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/run-npm": "workspace:4.0.1",
|
||||
"@pnpm/tabtab": "^0.1.2",
|
||||
"@pnpm/types": "workspace:8.1.0",
|
||||
|
||||
@@ -51,9 +51,11 @@
|
||||
"is-inner-link": "^4.0.0",
|
||||
"is-subdir": "^1.1.1",
|
||||
"path-exists": "^4.0.0",
|
||||
"promise-share": "^1.0.0",
|
||||
"ramda": "^0.27.1",
|
||||
"rename-overwrite": "^4.0.2",
|
||||
"replace-string": "^3.1.0",
|
||||
"safe-promise-defer": "^1.0.1",
|
||||
"semver": "^7.3.4",
|
||||
"semver-range-intersect": "^0.3.1",
|
||||
"version-selector-type": "^3.0.0"
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
ProjectManifest,
|
||||
Registries,
|
||||
} from '@pnpm/types'
|
||||
import promiseShare from 'promise-share'
|
||||
import difference from 'ramda/src/difference'
|
||||
import getWantedDependencies, { WantedDependency } from './getWantedDependencies'
|
||||
import depPathToRef from './depPathToRef'
|
||||
@@ -210,7 +211,7 @@ export default async function (
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
||||
(opts.allowBuild != null && !opts.allowBuild(pkg.name)) ||
|
||||
(opts.wantedLockfile.packages?.[depPath] == null) ||
|
||||
pkg.requiresBuild
|
||||
pkg.requiresBuild === true
|
||||
) continue
|
||||
pendingRequiresBuilds.push(depPath)
|
||||
}
|
||||
@@ -222,7 +223,7 @@ export default async function (
|
||||
return {
|
||||
dependenciesByProjectId,
|
||||
dependenciesGraph,
|
||||
finishLockfileUpdates: finishLockfileUpdates.bind(null, dependenciesGraph, pendingRequiresBuilds, newLockfile),
|
||||
finishLockfileUpdates: promiseShare(finishLockfileUpdates(dependenciesGraph, pendingRequiresBuilds, newLockfile)),
|
||||
outdatedDependencies,
|
||||
linkedDependenciesByProjectId,
|
||||
newLockfile,
|
||||
@@ -239,15 +240,16 @@ async function finishLockfileUpdates (
|
||||
) {
|
||||
return Promise.all(pendingRequiresBuilds.map(async (depPath) => {
|
||||
const depNode = dependenciesGraph[depPath]
|
||||
let requiresBuild!: boolean
|
||||
if (depNode.optional) {
|
||||
// We assume that all optional dependencies have to be built.
|
||||
// Optional dependencies are not always downloaded, so there is no way to know whether they need to be built or not.
|
||||
depNode.requiresBuild = true
|
||||
requiresBuild = true
|
||||
} else if (depNode.fetchingBundledManifest != null) {
|
||||
const filesResponse = await depNode.fetchingFiles()
|
||||
// The npm team suggests to always read the package.json for deciding whether the package has lifecycle scripts
|
||||
const pkgJson = await depNode.fetchingBundledManifest()
|
||||
depNode.requiresBuild = Boolean(
|
||||
requiresBuild = Boolean(
|
||||
pkgJson?.scripts != null && (
|
||||
Boolean(pkgJson.scripts.preinstall) ||
|
||||
Boolean(pkgJson.scripts.install) ||
|
||||
@@ -260,10 +262,13 @@ async function finishLockfileUpdates (
|
||||
// This should never ever happen
|
||||
throw new Error(`Cannot create ${WANTED_LOCKFILE} because raw manifest (aka package.json) wasn't fetched for "${depPath}"`)
|
||||
}
|
||||
if (typeof depNode.requiresBuild === 'function') {
|
||||
depNode.requiresBuild['resolve'](requiresBuild)
|
||||
}
|
||||
|
||||
// TODO: try to cover with unit test the case when entry is no longer available in lockfile
|
||||
// It is an edge that probably happens if the entry is removed during lockfile prune
|
||||
if (depNode.requiresBuild && newLockfile.packages![depPath]) {
|
||||
if (requiresBuild && newLockfile.packages![depPath]) {
|
||||
newLockfile.packages![depPath].requiresBuild = true
|
||||
}
|
||||
}))
|
||||
|
||||
@@ -50,6 +50,7 @@ import {
|
||||
splitNodeId,
|
||||
} from './nodeIdUtils'
|
||||
import wantedDepIsLocallyAvailable from './wantedDepIsLocallyAvailable'
|
||||
import safePromiseDefer, { SafePromiseDefer } from 'safe-promise-defer'
|
||||
|
||||
const dependencyResolvedLogger = logger('_dependency_resolved')
|
||||
|
||||
@@ -196,7 +197,7 @@ export interface ResolvedPackage {
|
||||
hasBundledDependencies: boolean
|
||||
prepare: boolean
|
||||
depPath: string
|
||||
requiresBuild: boolean | undefined // added to fix issue #1201
|
||||
requiresBuild: boolean | SafePromiseDefer<boolean>
|
||||
additionalInfo: {
|
||||
deprecated?: string
|
||||
bundleDependencies?: string[]
|
||||
@@ -1020,7 +1021,7 @@ function getResolvedPackage (
|
||||
const peerDependencies = peerDependenciesWithoutOwn(options.pkg)
|
||||
|
||||
const requiresBuild = (options.allowBuild == null || options.allowBuild(options.pkg.name))
|
||||
? ((options.dependencyLockfile != null) ? Boolean(options.dependencyLockfile.requiresBuild) : undefined)
|
||||
? ((options.dependencyLockfile != null) ? Boolean(options.dependencyLockfile.requiresBuild) : safePromiseDefer<boolean>())
|
||||
: false
|
||||
|
||||
return {
|
||||
|
||||
@@ -156,7 +156,9 @@ function toLockfileDependency (
|
||||
if (pkg.hasBin) {
|
||||
result['hasBin'] = true
|
||||
}
|
||||
if (pkg.requiresBuild !== undefined) {
|
||||
const requiresBuildIsKnown = typeof pkg.requiresBuild === 'boolean'
|
||||
let pending = false
|
||||
if (requiresBuildIsKnown) {
|
||||
if (pkg.requiresBuild) {
|
||||
result['requiresBuild'] = true
|
||||
}
|
||||
@@ -172,8 +174,11 @@ function toLockfileDependency (
|
||||
result['requiresBuild'] = true
|
||||
} else {
|
||||
pendingRequiresBuilds.push(opts.depPath)
|
||||
pending = true
|
||||
}
|
||||
if (!requiresBuildIsKnown && !pending) {
|
||||
pkg.requiresBuild['resolve'](result['requiresBuild'] ?? false)
|
||||
}
|
||||
pkg.requiresBuild = result['requiresBuild']
|
||||
/* eslint-enable @typescript-eslint/dot-notation */
|
||||
return result
|
||||
}
|
||||
|
||||
209
pnpm-lock.yaml
generated
209
pnpm-lock.yaml
generated
@@ -41,7 +41,7 @@ importers:
|
||||
'@commitlint/prompt-cli': ^16.0.0
|
||||
'@pnpm/eslint-config': workspace:*
|
||||
'@pnpm/meta-updater': 0.0.6
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/tsconfig': workspace:*
|
||||
'@types/jest': ^27.4.0
|
||||
'@types/node': ^14.17.32
|
||||
@@ -72,7 +72,7 @@ importers:
|
||||
'@commitlint/prompt-cli': 16.3.0
|
||||
'@pnpm/eslint-config': link:utils/eslint-config
|
||||
'@pnpm/meta-updater': 0.0.6
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/tsconfig': link:utils/tsconfig
|
||||
'@types/jest': 27.5.2
|
||||
'@types/node': 14.18.21
|
||||
@@ -432,7 +432,7 @@ importers:
|
||||
'@pnpm/read-modules-dir': workspace:4.0.0
|
||||
'@pnpm/read-package-json': workspace:6.0.3
|
||||
'@pnpm/read-project-manifest': workspace:3.0.3
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/remove-bins': workspace:3.0.3
|
||||
'@pnpm/resolve-dependencies': workspace:27.2.0
|
||||
'@pnpm/resolver-base': workspace:9.0.2
|
||||
@@ -539,7 +539,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/package-store': link:../package-store
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/store-path': link:../store-path
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/fs-extra': 9.0.13
|
||||
@@ -1136,7 +1136,7 @@ importers:
|
||||
'@pnpm/read-project-manifest': workspace:3.0.3
|
||||
'@pnpm/read-projects-context': workspace:6.0.4
|
||||
'@pnpm/real-hoist': workspace:0.2.4
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/store-controller-types': workspace:13.0.3
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/symlink-dependency': workspace:5.0.2
|
||||
@@ -1197,7 +1197,7 @@ importers:
|
||||
'@pnpm/package-store': link:../package-store
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/read-projects-context': link:../read-projects-context
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/store-path': link:../store-path
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/fs-extra': 9.0.13
|
||||
@@ -1871,7 +1871,7 @@ importers:
|
||||
'@pnpm/package-is-installable': workspace:6.0.4
|
||||
'@pnpm/package-requester': workspace:18.0.7
|
||||
'@pnpm/read-package-json': workspace:6.0.3
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/resolver-base': workspace:9.0.2
|
||||
'@pnpm/store-controller-types': workspace:13.0.3
|
||||
'@pnpm/test-fixtures': workspace:*
|
||||
@@ -1892,6 +1892,7 @@ importers:
|
||||
promise-share: ^1.0.0
|
||||
ramda: ^0.27.1
|
||||
rename-overwrite: ^4.0.2
|
||||
safe-promise-defer: ^1.0.1
|
||||
semver: ^7.3.4
|
||||
ssri: ^8.0.1
|
||||
tempy: ^1.0.0
|
||||
@@ -1915,6 +1916,7 @@ importers:
|
||||
promise-share: 1.0.0
|
||||
ramda: 0.27.2
|
||||
rename-overwrite: 4.0.2
|
||||
safe-promise-defer: 1.0.1
|
||||
semver: 7.3.7
|
||||
ssri: 8.0.1
|
||||
devDependencies:
|
||||
@@ -1922,7 +1924,7 @@ importers:
|
||||
'@pnpm/create-cafs-store': link:../create-cafs-store
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/package-requester': 'link:'
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/normalize-path': 3.0.0
|
||||
'@types/ramda': 0.27.39
|
||||
@@ -2194,7 +2196,7 @@ importers:
|
||||
'@pnpm/pnpmfile': workspace:2.0.3
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-project-manifest': workspace:3.0.3
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/resolver-base': workspace:9.0.2
|
||||
'@pnpm/semver-diff': ^1.0.2
|
||||
'@pnpm/sort-packages': workspace:3.0.3
|
||||
@@ -2291,7 +2293,7 @@ importers:
|
||||
'@pnpm/modules-yaml': link:../modules-yaml
|
||||
'@pnpm/plugin-commands-installation': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/is-ci': 3.0.0
|
||||
'@types/proxyquire': 1.3.28
|
||||
@@ -2322,7 +2324,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': workspace:10.1.1
|
||||
'@pnpm/plugin-commands-listing': workspace:5.0.12
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/types': workspace:8.1.0
|
||||
'@types/ramda': 0.27.39
|
||||
execa: npm:safe-execa@^0.1.1
|
||||
@@ -2346,7 +2348,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': link:../plugin-commands-installation
|
||||
'@pnpm/plugin-commands-listing': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@types/ramda': 0.27.39
|
||||
execa: /safe-execa/0.1.1
|
||||
strip-ansi: 6.0.1
|
||||
@@ -2370,7 +2372,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': workspace:10.1.1
|
||||
'@pnpm/plugin-commands-outdated': workspace:6.0.12
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/semver-diff': ^1.0.2
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/types': workspace:8.1.0
|
||||
@@ -2413,7 +2415,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': link:../plugin-commands-installation
|
||||
'@pnpm/plugin-commands-outdated': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@types/lru-cache': 5.1.1
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/wrap-ansi': 3.0.0
|
||||
@@ -2434,7 +2436,7 @@ importers:
|
||||
'@pnpm/pick-registry-for-package': workspace:3.0.2
|
||||
'@pnpm/plugin-commands-publishing': workspace:5.0.13
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/resolver-base': workspace:9.0.2
|
||||
'@pnpm/run-npm': workspace:4.0.1
|
||||
'@pnpm/sort-packages': workspace:3.0.3
|
||||
@@ -2498,7 +2500,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-publishing': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@types/cross-spawn': 6.0.2
|
||||
'@types/is-ci': 3.0.0
|
||||
'@types/is-windows': 1.0.0
|
||||
@@ -2536,7 +2538,7 @@ importers:
|
||||
'@pnpm/normalize-registries': workspace:3.0.2
|
||||
'@pnpm/plugin-commands-rebuild': workspace:6.1.11
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/sort-packages': workspace:3.0.3
|
||||
'@pnpm/store-connection-manager': workspace:4.1.10
|
||||
'@pnpm/store-controller-types': workspace:13.0.3
|
||||
@@ -2595,7 +2597,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-rebuild': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/semver': 7.3.9
|
||||
@@ -2621,7 +2623,7 @@ importers:
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-package-json': workspace:6.0.3
|
||||
'@pnpm/read-project-manifest': workspace:3.0.3
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/sort-packages': workspace:3.0.3
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/types': workspace:8.1.0
|
||||
@@ -2664,7 +2666,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-script-runners': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@types/is-windows': 1.0.0
|
||||
'@types/ramda': 0.27.39
|
||||
is-windows: 1.0.2
|
||||
@@ -2754,7 +2756,7 @@ importers:
|
||||
'@pnpm/pick-registry-for-package': workspace:3.0.2
|
||||
'@pnpm/plugin-commands-store': workspace:5.1.11
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/store-connection-manager': workspace:4.1.10
|
||||
'@pnpm/store-controller-types': workspace:13.0.3
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
@@ -2801,7 +2803,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-store': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@types/archy': 0.0.31
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/ssri': 7.1.1
|
||||
@@ -2849,7 +2851,7 @@ importers:
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-package-json': workspace:6.0.3
|
||||
'@pnpm/read-project-manifest': workspace:3.0.3
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/run-npm': workspace:4.0.1
|
||||
'@pnpm/tabtab': ^0.1.2
|
||||
'@pnpm/types': workspace:8.1.0
|
||||
@@ -2937,7 +2939,7 @@ importers:
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/read-package-json': link:../read-package-json
|
||||
'@pnpm/read-project-manifest': link:../read-project-manifest
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/run-npm': link:../run-npm
|
||||
'@pnpm/tabtab': 0.1.2
|
||||
'@pnpm/types': link:../types
|
||||
@@ -3224,9 +3226,11 @@ importers:
|
||||
is-inner-link: ^4.0.0
|
||||
is-subdir: ^1.1.1
|
||||
path-exists: ^4.0.0
|
||||
promise-share: ^1.0.0
|
||||
ramda: ^0.27.1
|
||||
rename-overwrite: ^4.0.2
|
||||
replace-string: ^3.1.0
|
||||
safe-promise-defer: ^1.0.1
|
||||
semver: ^7.3.4
|
||||
semver-range-intersect: ^0.3.1
|
||||
version-selector-type: ^3.0.0
|
||||
@@ -3253,9 +3257,11 @@ importers:
|
||||
is-inner-link: 4.0.0
|
||||
is-subdir: 1.2.0
|
||||
path-exists: 4.0.0
|
||||
promise-share: 1.0.0
|
||||
ramda: 0.27.2
|
||||
rename-overwrite: 4.0.2
|
||||
replace-string: 3.1.0
|
||||
safe-promise-defer: 1.0.1
|
||||
semver: 7.3.7
|
||||
semver-range-intersect: 0.3.1
|
||||
version-selector-type: 3.0.0
|
||||
@@ -3535,7 +3541,7 @@ importers:
|
||||
'@pnpm/constants': workspace:6.1.0
|
||||
'@pnpm/lockfile-types': workspace:4.0.2
|
||||
'@pnpm/modules-yaml': workspace:10.0.2
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/types': workspace:8.1.0
|
||||
'@types/is-windows': ^1.0.0
|
||||
'@types/isexe': 2.0.0
|
||||
@@ -3550,7 +3556,7 @@ importers:
|
||||
'@pnpm/constants': link:../../packages/constants
|
||||
'@pnpm/lockfile-types': link:../../packages/lockfile-types
|
||||
'@pnpm/modules-yaml': link:../../packages/modules-yaml
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
'@pnpm/types': link:../../packages/types
|
||||
is-windows: 1.0.2
|
||||
isexe: 2.0.0
|
||||
@@ -3567,11 +3573,11 @@ importers:
|
||||
specifiers:
|
||||
'@pnpm/assert-store': workspace:*
|
||||
'@pnpm/cafs': workspace:4.0.4
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
path-exists: ^4.0.0
|
||||
dependencies:
|
||||
'@pnpm/cafs': link:../../packages/cafs
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/registry-mock': 2.20.0
|
||||
path-exists: 4.0.0
|
||||
devDependencies:
|
||||
'@pnpm/assert-store': 'link:'
|
||||
@@ -5253,8 +5259,8 @@ packages:
|
||||
strip-bom: 4.0.0
|
||||
dev: true
|
||||
|
||||
/@pnpm/registry-mock/2.19.0:
|
||||
resolution: {integrity: sha512-nPrpSr6PWl150NIY26FsXKqlk4NL6dR29HC+4H4pVUS6GZloQU/NUlwvLCJ6FrV16YyV6cOvbDMCxVjri1rltg==}
|
||||
/@pnpm/registry-mock/2.20.0:
|
||||
resolution: {integrity: sha512-ADVI/RsdN+l4GHD9gKJvXpNd/UBX5W0Nfv/PEuc4kf++aBzDvEHd2n0QAnk5LZTidCHXvYCagFgcCy/oFkkIJg==}
|
||||
engines: {node: '>=10.13'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@@ -5264,7 +5270,7 @@ packages:
|
||||
read-yaml-file: 2.1.0
|
||||
rimraf: 3.0.2
|
||||
tempy: 1.0.1
|
||||
verdaccio: 5.11.0
|
||||
verdaccio: 5.13.0
|
||||
write-yaml-file: 4.2.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
@@ -5437,7 +5443,7 @@ packages:
|
||||
/@types/byline/4.2.33:
|
||||
resolution: {integrity: sha512-LJYez7wrWcJQQDknqZtrZuExMGP0IXmPl1rOOGDqLbu+H7UNNRfKNuSxCBcQMLH1EfjeWidLedC/hCc5dDfBog==}
|
||||
dependencies:
|
||||
'@types/node': 17.0.41
|
||||
'@types/node': 18.0.0
|
||||
dev: true
|
||||
|
||||
/@types/cacheable-request/6.0.2:
|
||||
@@ -5602,6 +5608,10 @@ packages:
|
||||
/@types/node/17.0.41:
|
||||
resolution: {integrity: sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw==}
|
||||
|
||||
/@types/node/18.0.0:
|
||||
resolution: {integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==}
|
||||
dev: true
|
||||
|
||||
/@types/normalize-package-data/2.4.1:
|
||||
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
||||
dev: true
|
||||
@@ -5942,6 +5952,13 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
lockfile: 1.0.4
|
||||
dev: true
|
||||
|
||||
/@verdaccio/file-locking/10.3.0:
|
||||
resolution: {integrity: sha512-FE5D5H4wy/nhgR/d2J5e1Na9kScj2wMjlLPBHz7XF4XZAVSRdm45+kL3ZmrfA6b2HTADP/uH7H05/cnAYW8bhw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
lockfile: 1.0.4
|
||||
|
||||
/@verdaccio/local-storage/10.2.1:
|
||||
resolution: {integrity: sha512-0ff8TnHvhPu+HSZJvmm8Yb7VRGa/yf7vwpJMQngo2xYg++73CgnUP5hI65NJeKJyg8DX5E0YgCw6HoTbNxBxhg==}
|
||||
@@ -5957,6 +5974,22 @@ packages:
|
||||
mkdirp: 1.0.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@verdaccio/local-storage/10.3.0:
|
||||
resolution: {integrity: sha512-qpzYVqJ4NN9gYGkpuQ8N2IRRg6m8+dTvSZ69H/41rHEfeeC0LW3cZjQV7hZ8RfNNvY7hLtf1E+n6DKCGx/bSLg==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
'@verdaccio/commons-api': 10.2.0
|
||||
'@verdaccio/file-locking': 10.3.0
|
||||
'@verdaccio/streams': 10.2.0
|
||||
async: 3.2.3
|
||||
debug: 4.3.4
|
||||
lodash: 4.17.21
|
||||
lowdb: 1.0.0
|
||||
mkdirp: 1.0.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
/@verdaccio/readme/10.3.4:
|
||||
resolution: {integrity: sha512-E4SHDjVt7eJ3CwNNvkB3N0zV3Zza8i6yQf6+qE4AZsy1L18OaxXBFmp4O4HxxIahB3npVhip230FVVAWUZjK+w==}
|
||||
@@ -6598,6 +6631,9 @@ packages:
|
||||
/async/3.2.3:
|
||||
resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==}
|
||||
|
||||
/async/3.2.4:
|
||||
resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
|
||||
|
||||
/asynckit/0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
|
||||
@@ -7664,6 +7700,10 @@ packages:
|
||||
|
||||
/dayjs/1.11.2:
|
||||
resolution: {integrity: sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==}
|
||||
dev: true
|
||||
|
||||
/dayjs/1.11.3:
|
||||
resolution: {integrity: sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==}
|
||||
|
||||
/debug/2.6.9:
|
||||
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
|
||||
@@ -9495,7 +9535,7 @@ packages:
|
||||
source-map: 0.6.1
|
||||
wordwrap: 1.0.0
|
||||
optionalDependencies:
|
||||
uglify-js: 3.16.0
|
||||
uglify-js: 3.16.1
|
||||
|
||||
/har-schema/2.0.0:
|
||||
resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
|
||||
@@ -11131,11 +11171,11 @@ packages:
|
||||
/lru-cache/7.10.1:
|
||||
resolution: {integrity: sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/lru-cache/7.9.0:
|
||||
resolution: {integrity: sha512-lkcNMUKqdJk96TuIXUidxaPuEg5sJo/+ZyVE2BDFnuZGzwXem7d8582eG8vbu4todLfT14snP6iHriCHXXi5Rw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: true
|
||||
|
||||
/lru-queue/0.1.0:
|
||||
resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==}
|
||||
@@ -11249,6 +11289,11 @@ packages:
|
||||
engines: {node: '>= 12'}
|
||||
hasBin: true
|
||||
|
||||
/marked/4.0.17:
|
||||
resolution: {integrity: sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==}
|
||||
engines: {node: '>= 12'}
|
||||
hasBin: true
|
||||
|
||||
/mdast-util-compact/1.0.4:
|
||||
resolution: {integrity: sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==}
|
||||
dependencies:
|
||||
@@ -11479,6 +11524,13 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
brace-expansion: 2.0.1
|
||||
dev: true
|
||||
|
||||
/minimatch/5.1.0:
|
||||
resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
brace-expansion: 2.0.1
|
||||
|
||||
/minimist-options/4.1.0:
|
||||
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
|
||||
@@ -11814,7 +11866,7 @@ packages:
|
||||
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
|
||||
dependencies:
|
||||
hosted-git-info: 3.0.8
|
||||
resolve: 1.22.0
|
||||
resolve: 1.22.1
|
||||
semver: 5.7.1
|
||||
validate-npm-package-license: 3.0.4
|
||||
|
||||
@@ -13185,6 +13237,14 @@ packages:
|
||||
path-parse: 1.0.7
|
||||
supports-preserve-symlinks-flag: 1.0.0
|
||||
|
||||
/resolve/1.22.1:
|
||||
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
is-core-module: 2.9.0
|
||||
path-parse: 1.0.7
|
||||
supports-preserve-symlinks-flag: 1.0.0
|
||||
|
||||
/responselike/2.0.0:
|
||||
resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==}
|
||||
dependencies:
|
||||
@@ -13289,6 +13349,13 @@ packages:
|
||||
execa: 5.1.1
|
||||
path-name: 1.0.0
|
||||
|
||||
/safe-promise-defer/1.0.1:
|
||||
resolution: {integrity: sha512-nKdAwtdSxWQpV2AIjU9rw5j/Pgt9+u+pegXJahWQY9D8G0tNvHnJnpL3zVJ1kKtWTo7s/Rvp9ZUDBtPPMpLctA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
promise-share: 1.0.0
|
||||
dev: false
|
||||
|
||||
/safe-regex/1.1.0:
|
||||
resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
|
||||
dependencies:
|
||||
@@ -14486,15 +14553,15 @@ packages:
|
||||
is-typedarray: 1.0.0
|
||||
|
||||
/typedarray/0.0.6:
|
||||
resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=}
|
||||
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
||||
|
||||
/typescript/4.6.4:
|
||||
resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
|
||||
engines: {node: '>=4.2.0'}
|
||||
hasBin: true
|
||||
|
||||
/uglify-js/3.16.0:
|
||||
resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==}
|
||||
/uglify-js/3.16.1:
|
||||
resolution: {integrity: sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==}
|
||||
engines: {node: '>=0.8.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
@@ -14738,6 +14805,17 @@ packages:
|
||||
bcryptjs: 2.4.3
|
||||
http-errors: 1.8.1
|
||||
unix-crypt-td-js: 1.1.4
|
||||
dev: true
|
||||
|
||||
/verdaccio-htpasswd/10.4.0:
|
||||
resolution: {integrity: sha512-Q5b8nVxoUDBXgzc7yIclnIcrGoBRYno+SVcv8+ZLz3H1KfTqSfn4+UBbb2mHEix7KNvk1W3KhHBG6n1dYRpC7A==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
'@verdaccio/file-locking': 10.3.0
|
||||
apache-md5: 1.1.7
|
||||
bcryptjs: 2.4.3
|
||||
http-errors: 1.8.1
|
||||
unix-crypt-td-js: 1.1.4
|
||||
|
||||
/verdaccio/5.11.0:
|
||||
resolution: {integrity: sha512-wKQ4dVBuUm+sHTakxlGPyOQSvJtpkzk7FTUKfGP92LV8AdQSyNflXomiP3KK7WfoG6Er18+aC+sDhosTs02l6g==}
|
||||
@@ -14792,6 +14870,61 @@ packages:
|
||||
- encoding
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/verdaccio/5.13.0:
|
||||
resolution: {integrity: sha512-0IVlOfpltlYusmUb/y3oK6kY4QfSHdGzgc3HB6NUhVe7nrCKa6qznLdW+eG3fk167xVpu/3OV5ipxUk/G5teGw==}
|
||||
engines: {node: '>=12', npm: '>=6'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@verdaccio/commons-api': 10.2.0
|
||||
'@verdaccio/local-storage': 10.3.0
|
||||
'@verdaccio/readme': 10.3.4
|
||||
'@verdaccio/streams': 10.2.0
|
||||
'@verdaccio/ui-theme': 6.0.0-6-next.24
|
||||
async: 3.2.4
|
||||
body-parser: 1.20.0
|
||||
clipanion: 3.2.0-rc.6
|
||||
compression: 1.7.4
|
||||
cookies: 0.8.0
|
||||
cors: 2.8.5
|
||||
dayjs: 1.11.3
|
||||
debug: 4.3.4
|
||||
envinfo: 7.8.1
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
express: 4.18.1
|
||||
express-rate-limit: 5.5.1
|
||||
fast-safe-stringify: 2.1.1
|
||||
handlebars: 4.7.7
|
||||
http-errors: 1.8.1
|
||||
js-yaml: /@zkochan/js-yaml/0.0.6
|
||||
JSONStream: 1.3.5
|
||||
jsonwebtoken: 8.5.1
|
||||
kleur: 4.1.4
|
||||
lodash: 4.17.21
|
||||
lru-cache: 7.10.1
|
||||
lunr-mutable-indexes: 2.3.2
|
||||
marked: 4.0.17
|
||||
memoizee: 0.4.15
|
||||
mime: 3.0.0
|
||||
minimatch: 5.1.0
|
||||
mkdirp: 1.0.4
|
||||
mv: 2.1.1
|
||||
pino: 6.14.0
|
||||
pkginfo: 0.4.1
|
||||
prettier-bytes: 1.0.4
|
||||
pretty-ms: 7.0.1
|
||||
request: 2.88.0
|
||||
semver: 7.3.7
|
||||
validator: 13.7.0
|
||||
verdaccio-audit: 10.2.2
|
||||
verdaccio-htpasswd: 10.4.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- canvas
|
||||
- encoding
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
|
||||
/verror/1.10.0:
|
||||
resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=}
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"@pnpm/constants": "workspace:6.1.0",
|
||||
"@pnpm/lockfile-types": "workspace:4.0.2",
|
||||
"@pnpm/modules-yaml": "workspace:10.0.2",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"@pnpm/types": "workspace:8.1.0",
|
||||
"is-windows": "^1.0.2",
|
||||
"isexe": "2.0.0",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@pnpm/cafs": "workspace:4.0.4",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/registry-mock": "2.20.0",
|
||||
"path-exists": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
Reference in New Issue
Block a user