UNPKG

@neodx/vfs

Version:

Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover

1 lines 3.57 kB
{"version":3,"file":"package-json.mjs","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":["packageJson","createVfsPlugin","vfs","path","createVfsPackageJsonFileApi","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"],"mappings":"0TAmBO,SAASA,IACd,OAAOC,EAAsC,cAAeC,AAAAA,IAC1DA,EAAIF,WAAW,CAAG,CAACG,EAAO,cAAc,GAAKC,EAA4BF,EAAKC,GACvED,GAEX,CAEO,SAASE,EAA4BF,CAAY,CAAEC,CAAY,EACpE,IAAME,EAAOC,EAAkBJ,EAAKC,GAC9BI,EAAO,MAAOC,IACdA,GAAS,MAAMH,EAAKI,KAAK,CAACD,GACvBE,CAAAA,CAAQF,GAGjB,MAAO,CACL,GAAGH,CAAI,CACDM,gBAAN,MAAsBC,GACbL,EACLM,EACE,MAAMR,EAAKS,IAAI,GACfC,EAAMH,GACHI,IAAI,CAACC,EAAeC,AAAAA,GAAS,CAAA,CAC5BC,aAAcC,EAASC,EAAQH,GAAO,IAAM,IAC9C,CAAA,GACCF,IAAI,CAACM,EAAEC,CAAC,CAAEC,GACVC,UAAU,KAIbC,mBAAN,MAAyBd,GAChBL,EACLoB,EACE,MAAMtB,EAAKS,IAAI,GACfC,EAAMH,GACHI,IAAI,CAACC,EAAeC,AAAAA,GAAQE,EAASQ,EAAS,IAAMP,EAAQH,KAC5DF,IAAI,CAACM,EAAEC,CAAC,CAAEC,GACVC,UAAU,IAIrB,CACF,CAEA,IAAMR,EAAgBK,EAAEO,MAAM,CAACC,EAAE,CAACR,EAAES,KAAK,CAACT,EAAEO,MAAM,GAC5CD,EAAU,CAAC,eAAgB,kBAAmB,mBAAoB,uBAAuB"}