mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-13 02:55:56 -04:00
Add eslint-plugin-simple-import-sort to enforce consistent import ordering: - Node.js builtins first - External packages second - Relative imports last - Named imports sorted alphabetically within each statement
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import type {
|
|
PackageExtension,
|
|
PackageManifest,
|
|
ProjectManifest,
|
|
ReadPackageHook,
|
|
} from '@pnpm/types'
|
|
import { packageExtensions as compatPackageExtensions } from '@yarnpkg/extensions'
|
|
import { isEmpty, pipeWith } from 'ramda'
|
|
|
|
import { createOptionalDependenciesRemover } from './createOptionalDependenciesRemover.js'
|
|
import { createPackageExtender } from './createPackageExtender.js'
|
|
import { createVersionsOverrider, type VersionOverrideWithoutRawSelector } from './createVersionsOverrider.js'
|
|
|
|
export function createReadPackageHook (
|
|
{
|
|
ignoreCompatibilityDb,
|
|
lockfileDir,
|
|
overrides,
|
|
ignoredOptionalDependencies,
|
|
packageExtensions,
|
|
readPackageHook,
|
|
}: {
|
|
ignoreCompatibilityDb?: boolean
|
|
lockfileDir: string
|
|
overrides?: VersionOverrideWithoutRawSelector[]
|
|
ignoredOptionalDependencies?: string[]
|
|
packageExtensions?: Record<string, PackageExtension>
|
|
readPackageHook?: ReadPackageHook[] | ReadPackageHook
|
|
}
|
|
): ReadPackageHook | undefined {
|
|
const hooks: ReadPackageHook[] = []
|
|
if (!ignoreCompatibilityDb) {
|
|
hooks.push(createPackageExtender(Object.fromEntries(compatPackageExtensions)))
|
|
}
|
|
if (!isEmpty(packageExtensions ?? {})) {
|
|
hooks.push(createPackageExtender(packageExtensions!))
|
|
}
|
|
if (Array.isArray(readPackageHook)) {
|
|
hooks.push(...readPackageHook)
|
|
} else if (readPackageHook) {
|
|
hooks.push(readPackageHook)
|
|
}
|
|
if (!isEmpty(overrides ?? {})) {
|
|
hooks.push(createVersionsOverrider(overrides!, lockfileDir))
|
|
}
|
|
if (ignoredOptionalDependencies && !isEmpty(ignoredOptionalDependencies)) {
|
|
hooks.push(createOptionalDependenciesRemover(ignoredOptionalDependencies))
|
|
}
|
|
|
|
if (hooks.length === 0) {
|
|
return undefined
|
|
}
|
|
const readPackageAndExtend = hooks.length === 1
|
|
? hooks[0]
|
|
: ((pkg: PackageManifest | ProjectManifest, dir: string) => pipeWith(async (f, res) => f(await res, dir), hooks as any)(pkg, dir)) as ReadPackageHook // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
return readPackageAndExtend
|
|
}
|