Files
pnpm/patching/commands/src/stateFile.ts
Zoltan Kochan 7a304b17c4 refactor: rename directories and unify command packages per domain (#10993)
- 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
2026-03-17 17:42:20 +01:00

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')
}