@neodx/vfs
Version:
Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover
1 lines • 3.74 kB
Source Map (JSON)
{"version":3,"file":"package-json.cjs","sources":["../../../src/plugins/package-json.ts"],"sourcesContent":["import type { PackageJsonDependencies } from '@neodx/pkg-misc';\nimport { addPackageJsonDependencies, removePackageJsonDependencies } from '@neodx/pkg-misc';\nimport { fromKeys, identity, toArray } from '@neodx/std';\nimport type { PackageJson } from 'pkg-types';\nimport { match, P } from 'ts-pattern';\nimport type { BaseVfs } from '../core/types';\nimport { createVfsPlugin } from '../create-vfs-plugin';\nimport type { JsonFileApi } from './json';\nimport { createJsonFileApi } from './json';\n\nexport interface PackageJsonPluginApi {\n packageJson(path?: string): PackageJsonApi;\n}\n\nexport interface PackageJsonApi extends JsonFileApi<PackageJson> {\n addDependencies(deps: string | string[] | PackageJsonDependencies): Promise<boolean>;\n removeDependencies(deps: Record<string, string>): Promise<boolean>;\n}\n\nexport function packageJson() {\n return createVfsPlugin<PackageJsonPluginApi>('packageJson', vfs => {\n vfs.packageJson = (path = 'package.json') => createVfsPackageJsonFileApi(vfs, path);\n return vfs;\n });\n}\n\nexport function createVfsPackageJsonFileApi(vfs: BaseVfs, path: string): PackageJsonApi {\n const file = createJsonFileApi(vfs, path);\n const sync = async (content: unknown) => {\n if (content) await file.write(content);\n return Boolean(content);\n };\n\n return {\n ...file,\n async addDependencies(deps: string | string[] | PackageJsonDependencies) {\n return sync(\n addPackageJsonDependencies(\n await file.read(),\n match(deps)\n .with(stringOrArray, name => ({\n dependencies: fromKeys(toArray(name), () => '*')\n }))\n .with(P._, identity)\n .exhaustive()\n )\n );\n },\n async removeDependencies(deps: string | string[] | Record<string, string>) {\n return sync(\n removePackageJsonDependencies(\n await file.read(),\n match(deps)\n .with(stringOrArray, name => fromKeys(allDeps, () => toArray(name)))\n .with(P._, identity)\n .exhaustive()\n )\n );\n }\n };\n}\n\nconst stringOrArray = P.string.or(P.array(P.string));\nconst allDeps = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];\n"],"names":["createVfsPackageJsonFileApi","vfs","path","file","createJsonFileApi","sync","content","write","Boolean","addDependencies","deps","addPackageJsonDependencies","read","match","with","stringOrArray","name","dependencies","fromKeys","toArray","P","_","identity","exhaustive","removeDependencies","removePackageJsonDependencies","allDeps","string","or","array","createVfsPlugin","packageJson"],"mappings":"kKA0BO,SAASA,EAA4BC,CAAY,CAAEC,CAAY,EACpE,IAAMC,EAAOC,EAAAA,kBAAkBH,EAAKC,GAC9BG,EAAO,MAAOC,IACdA,GAAS,MAAMH,EAAKI,KAAK,CAACD,GACvBE,CAAAA,CAAQF,GAGjB,MAAO,CACL,GAAGH,CAAI,CACDM,gBAAN,MAAsBC,GACbL,EACLM,EAAAA,0BAAAA,CACE,MAAMR,EAAKS,IAAI,GACfC,OAAMH,CAAAA,GACHI,IAAI,CAACC,EAAeC,AAAAA,GAAS,CAAA,CAC5BC,aAAcC,EAAAA,QAAAA,CAASC,EAAAA,OAAQH,CAAAA,GAAO,IAAM,IAC9C,CAAA,GACCF,IAAI,CAACM,IAAEC,CAAC,CAAEC,EAAAA,UACVC,UAAU,KAIbC,mBAAN,MAAyBd,GAChBL,EACLoB,EAAAA,6BACE,CAAA,MAAMtB,EAAKS,IAAI,GACfC,OAAMH,CAAAA,GACHI,IAAI,CAACC,EAAeC,AAAAA,GAAQE,EAAAA,QAASQ,CAAAA,EAAS,IAAMP,EAAAA,OAAAA,CAAQH,KAC5DF,IAAI,CAACM,GAAEC,CAAAA,CAAC,CAAEC,EAAAA,QAAAA,EACVC,UAAU,IAIrB,CACF,CAEA,MAAMR,EAAgBK,EAAAA,CAAEO,CAAAA,MAAM,CAACC,EAAE,CAACR,EAAES,CAAAA,CAAAA,KAAK,CAACT,EAAAA,CAAAA,CAAEO,MAAM,GAC5CD,EAAU,CAAC,eAAgB,kBAAmB,mBAAoB,uBAAuB,2DA5CxF,WACL,OAAOI,EAAAA,eAAAA,CAAsC,cAAe7B,AAAAA,IAC1DA,EAAI8B,WAAW,CAAG,CAAC7B,EAAO,cAAc,GAAKF,EAA4BC,EAAKC,GACvED,GAEX"}