mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-28 12:01:37 -04:00
- Rename `installing/core` → `installing/deps-installer` and `installing/headless` → `installing/deps-restorer` for clearer naming
- Rename all `plugin-commands-*` directories to use `-commands` suffix convention
- Merge multiple command packages per domain into a single `commands/` directory (one commands package per domain rule):
- `building/{build-commands,policy-commands}` → `building/commands`
- `deps/compliance/{audit-commands,licenses-commands,sbom-commands}` → `deps/compliance/commands`
- `deps/inspection/{listing-commands,outdated-commands}` → `deps/inspection/commands`
- `store/{store-commands,inspecting-commands}` → `store/commands`
- `releasing/{publish-commands,deploy-commands}` → `releasing/commands`
- `cli/{completion-commands,doctor-commands}` → `cli/commands`
- `engine/pm/{self-updater-commands,setup-commands}` → `engine/pm/commands`
- `engine/runtime/{runtime-commands,env-commands}` → `engine/runtime/commands`
- `cache/cache-commands` → `cache/commands`
- Fix relative paths in merged test files (pnpmBin, __typings__ references)
- Update jest config to ignore `utils/` dirs at any nesting depth under `test/`
- Fix stale package names in changeset files
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import util from 'node:util'
|
|
|
|
export type EditDir = string & { __brand: 'patch-edit-dir' }
|
|
|
|
export interface EditDirState {
|
|
patchedPkg: string
|
|
applyToAll: boolean
|
|
}
|
|
|
|
export type State = Record<EditDir, EditDirState>
|
|
|
|
export interface EditDirKeyInput {
|
|
editDir: string
|
|
}
|
|
|
|
const createEditDirKey = (opts: EditDirKeyInput): EditDir => opts.editDir as EditDir
|
|
|
|
export interface ReadEditDirStateOptions extends EditDirKeyInput {
|
|
modulesDir: string
|
|
}
|
|
|
|
export function readEditDirState (opts: ReadEditDirStateOptions): EditDirState | undefined {
|
|
const state = readStateFile(opts.modulesDir)
|
|
if (!state) return undefined
|
|
const key = createEditDirKey(opts)
|
|
return state[key]
|
|
}
|
|
|
|
export interface WriteEditDirStateOptions extends ReadEditDirStateOptions, EditDirState {}
|
|
|
|
export function writeEditDirState (opts: WriteEditDirStateOptions): void {
|
|
modifyStateFile(opts.modulesDir, state => {
|
|
const key = createEditDirKey(opts)
|
|
state[key] = {
|
|
patchedPkg: opts.patchedPkg,
|
|
applyToAll: opts.applyToAll,
|
|
}
|
|
})
|
|
}
|
|
|
|
function modifyStateFile (modulesDir: string, modifyState: (state: State) => void): void {
|
|
const filePath = getStateFilePath(modulesDir)
|
|
let state = readStateFile(modulesDir)
|
|
if (!state) {
|
|
state = {}
|
|
fs.mkdirSync(path.dirname(filePath), { recursive: true })
|
|
}
|
|
modifyState(state)
|
|
fs.writeFileSync(filePath, JSON.stringify(state, undefined, 2))
|
|
}
|
|
|
|
function readStateFile (modulesDir: string): State | undefined {
|
|
let fileContent: string
|
|
try {
|
|
fileContent = fs.readFileSync(getStateFilePath(modulesDir), 'utf-8')
|
|
} catch (err) {
|
|
if (util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') {
|
|
return undefined
|
|
}
|
|
throw err
|
|
}
|
|
return JSON.parse(fileContent)
|
|
}
|
|
|
|
function getStateFilePath (modulesDir: string): string {
|
|
return path.join(modulesDir, '.pnpm_patches', 'state.json')
|
|
}
|