name: pnpm description: Profile for pnpm, extending npm-restrictive with pnpm write paths and environment variables inherits: npm-restrictive package_managers: - pnpm environment: # The npm-restrictive base allows no environment variables. pnpm uses the # npm auth and config conventions (.npmrc with env interpolation, # npm_config_*). Sibling tokens (YARN_NPM_AUTH_*, BUN_AUTH_TOKEN) stay # scrubbed. allow: - NPM_TOKEN - NPM_AUTH_TOKEN - NODE_AUTH_TOKEN - npm_config_* - NPM_CONFIG_* - NODE_EXTRA_CA_CERTS filesystem: allow_read: # pnpm cache on macOS lives under ~/Library/Caches (lockfile verification, # metadata). The base profile only covers the XDG path ~/.cache/pnpm. - ${HOME}/Library/Caches/pnpm/** allow_write: # pnpm needs write access here - ${HOME}/Library/pnpm/.tools/** - ${HOME}/.pnpm-store/** - ${HOME}/Library/Caches/pnpm/** # `pnpm i` creates the tmp files in local dir, at least on MacOS - ${CWD}/_tmp_* # pnpm self-update (or likely update) creates temporary package.json files # for writing. This is likely for atomic update using filesystem rename operation # which guarantees atomicity - ${CWD}/package.json.* # pnpm install/update writes pnpm-lock.yaml atomically via a sibling # temp file (e.g. pnpm-lock.yaml.139703784) followed by rename. - ${CWD}/pnpm-lock.yaml.* # Need access for dependency resolution - ${CWD}/.pnpm-store # Workspaces (monorepos): pnpm creates a node_modules inside every # workspace package to symlink its direct dependencies. The bare # **/node_modules form is required in addition to **/node_modules/**: # the automatic parent-directory allowance only works for literal # parents, and this parent contains a glob, so mkdir of the directory # itself must be matched explicitly. - ${CWD}/**/node_modules - ${CWD}/**/node_modules/**