{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-store/store.ts"],
  "sourcesContent": ["import { docsUrl } from '../cli-utils/index.ts';\nimport { type Config, types as allTypes } from '../config/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { logger } from '../logger/index.ts';\nimport {\n  createOrConnectStoreController,\n  type CreateStoreControllerOptions,\n} from '../store-connection-manager/index.ts';\nimport { getStorePath } from '../store-path/index.ts';\nimport pick from 'ramda/src/pick';\nimport renderHelp from 'render-help';\nimport { storeAdd } from './storeAdd.ts';\nimport { storePrune } from './storePrune.ts';\nimport { storeStatus } from './storeStatus/index.ts';\nimport type { StoreServerController } from '../server/connectStoreController.ts';\nimport type { PackageResponse } from '../store-controller-types/index.ts';\nimport type { ReporterFunction } from '../headless/index.ts';\nimport type { LockFileDir } from '../types/project.ts';\n\nexport const skipPackageManagerCheck = true;\n\nexport const rcOptionsTypes = cliOptionsTypes;\n\nexport function cliOptionsTypes(): Record<string, unknown> {\n  return pick.default(['registry', 'store-dir', 'force'], allTypes);\n}\n\nexport const commandNames = ['store'];\n\nexport function help(): string {\n  return renderHelp({\n    description:\n      'Reads and performs actions on pnpm store that is on the current filesystem.',\n    descriptionLists: [\n      {\n        title: 'Commands',\n\n        list: [\n          {\n            description:\n              '\\\nChecks for modified packages in the store. \\\nReturns exit code 0 if the content of the package is the same as it was at the time of unpacking',\n            name: 'status',\n          },\n          {\n            description:\n              'Adds new packages to the store. Example: pnpm store add express@4 typescript@2.1.0',\n            name: 'add <pkg>...',\n          },\n          {\n            description:\n              '\\\nRemoves unreferenced (extraneous, orphan) packages from the store. \\\nPruning the store is not harmful, but might slow down future installations. \\\nVisit the documentation for more information on unreferenced packages and why they occur',\n            name: 'prune',\n          },\n          {\n            description:\n              'If there are alien directories in the store, this command removes them. \\\nAlien directories are directories/files that were not created by the package manager.',\n            name: 'prune --force',\n          },\n          {\n            description: 'Returns the path to the active store directory.',\n            name: 'path',\n          },\n        ],\n      },\n    ],\n    url: docsUrl('store'),\n    usages: ['pnpm store <command>'],\n  });\n}\n\nclass StoreStatusError extends PnpmError {\n  modified: string[];\n  constructor(modified: string[]) {\n    super('MODIFIED_DEPENDENCY', '');\n    this.modified = modified;\n  }\n}\n\nexport type StoreCommandOptions = Pick<\n  Config,\n  'dir' | 'registries' | 'tag' | 'storeDir' | 'force' | 'dlxCacheMaxAge'\n> &\n  CreateStoreControllerOptions & {\n    reporter?: ReporterFunction | undefined;\n  };\n\nexport async function handler(\n  opts: StoreCommandOptions,\n  params: string[]\n  // biome-ignore lint/suspicious/noConfusingVoidType: <explanation>\n): Promise<string | void> {\n  let store: {\n    ctrl: StoreServerController<\n      PackageResponse,\n      PackageResponse,\n      {\n        isBuilt: boolean;\n        importMethod?: string | undefined;\n      }\n    >;\n    dir: string;\n  };\n\n  switch (params[0]) {\n    case 'status': {\n      return statusCmd(opts) as Promise<undefined>;\n    }\n\n    case 'path': {\n      return getStorePath({\n        pkgRoot: opts.dir,\n        storePath: opts.storeDir,\n        pnpmHomeDir: opts.pnpmHomeDir,\n      });\n    }\n\n    case 'prune': {\n      store = await createOrConnectStoreController(opts);\n\n      const storePruneOptions = Object.assign(opts, {\n        storeController: store.ctrl,\n        storeDir: store.dir,\n        removeAlienFiles: opts.force,\n        cacheDir: opts.cacheDir,\n        dlxCacheMaxAge: opts.dlxCacheMaxAge,\n      });\n\n      return storePrune(storePruneOptions) as Promise<undefined>;\n    }\n\n    case 'add':\n      store = await createOrConnectStoreController(opts);\n\n      return storeAdd(params.slice(1), {\n        prefix: opts.dir as LockFileDir,\n        registries: opts.registries,\n        reporter: opts.reporter,\n        storeController: store.ctrl,\n        tag: opts.tag,\n      });\n    default: {\n      return help();\n    }\n  }\n}\n\nasync function statusCmd(opts: StoreCommandOptions): Promise<void> {\n  const modifiedPkgs = await storeStatus(\n    Object.assign(opts, {\n      force: opts.force ?? false,\n      storeDir: await getStorePath({\n        pkgRoot: opts.dir,\n        storePath: opts.storeDir,\n        pnpmHomeDir: opts.pnpmHomeDir,\n      }),\n    })\n  );\n\n  if (modifiedPkgs.length === 0) {\n    logger.info({\n      message: 'Packages in the store are untouched',\n      prefix: opts.dir,\n    });\n    return;\n  }\n\n  throw new StoreStatusError(modifiedPkgs);\n}\n"],
  "mappings": "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",
  "names": []
}
