Files
pnpm/patching/plugin-commands-patching/src/writePackage.ts
2023-01-13 18:36:31 +02:00

33 lines
1.1 KiB
TypeScript

import { Config } from '@pnpm/config'
import {
createOrConnectStoreController,
CreateStoreControllerOptions,
} from '@pnpm/store-connection-manager'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { parseWantedDependency, ParseWantedDependencyResult } from '@pnpm/parse-wanted-dependency'
export { ParseWantedDependencyResult }
export type WritePackageOptions = CreateStoreControllerOptions & Pick<Config, 'registries'>
export async function writePackage (pkg: string, dest: string, opts: WritePackageOptions): Promise<ParseWantedDependencyResult> {
const dep = parseWantedDependency(pkg)
const store = await createOrConnectStoreController({
...opts,
packageImportMethod: 'clone-or-copy',
})
const pkgResponse = await store.ctrl.requestPackage(dep, {
downloadPriority: 1,
lockfileDir: opts.dir,
preferredVersions: {},
projectDir: opts.dir,
registry: (dep.alias && pickRegistryForPackage(opts.registries, dep.alias)) ?? opts.registries.default,
})
const filesResponse = await pkgResponse.files!()
await store.ctrl.importPackage(dest, {
filesResponse,
force: true,
})
return dep
}