@neodx/vfs
Version:
Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover
1 lines • 4.5 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, hasOwn, 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 { createJsonFileApi } from './json';\n\nexport interface PackageJsonPluginApi {\n packageJson(path?: string): PackageJsonApi;\n}\n\nexport type PackageJsonApi = ReturnType<typeof createVfsPackageJsonFileApi>;\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) {\n const file = createJsonFileApi<PackageJson>(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 hasDependency(name: string) {\n const pkg = await file.read<PackageJson>();\n\n return allDeps.some(type => hasOwn(pkg[type] ?? {}, name));\n },\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","hasDependency","name","pkg","read","allDeps","some","type","hasOwn","addDependencies","deps","addPackageJsonDependencies","match","with","stringOrArray","dependencies","fromKeys","toArray","P","_","identity","exhaustive","removeDependencies","removePackageJsonDependencies","string","or","array"],"mappings":";;;;;;;;AAeO,SAASA,WAAAA,GAAAA;IACd,OAAOC,+BAAAA,CAAsC,eAAeC,CAAAA,GAAAA,GAAAA;AAC1DA,QAAAA,GAAAA,CAAIF,WAAW,GAAG,CAACG,OAAO,cAAc,GAAKC,4BAA4BF,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;QAC9E,OAAOD,GAAAA,CAAAA;AACT,KAAA,CAAA,CAAA;AACF,CAAA;AAEO,SAASE,2BAAAA,CAA4BF,GAAY,EAAEC,IAAY,EAAA;IACpE,MAAME,IAAAA,GAAOC,+BAA+BJ,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;AACjD,IAAA,MAAMI,OAAO,OAAOC,OAAAA,GAAAA;AAClB,QAAA,IAAIA,OAAS,EAAA,MAAMH,IAAKI,CAAAA,KAAK,CAACD,OAAAA,CAAAA,CAAAA;AAC9B,QAAA,OAAOE,OAAQF,CAAAA,OAAAA,CAAAA,CAAAA;AACjB,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,GAAGH,IAAI;AACP,QAAA,MAAMM,eAAcC,IAAY,EAAA;YAC9B,MAAMC,GAAAA,GAAM,MAAMR,IAAAA,CAAKS,IAAI,EAAA,CAAA;YAE3B,OAAOC,OAAAA,CAAQC,IAAI,CAACC,CAAAA,IAAAA,GAAQC,UAAOL,CAAAA,GAAG,CAACI,IAAAA,CAAK,IAAI,EAAIL,EAAAA,IAAAA,CAAAA,CAAAA,CAAAA;AACtD,SAAA;AACA,QAAA,MAAMO,iBAAgBC,IAAiD,EAAA;AACrE,YAAA,OAAOb,IACLc,CAAAA,kCAAAA,CACE,MAAMhB,IAAAA,CAAKS,IAAI,EAAA,EACfQ,eAAMF,CAAAA,IAAAA,CAAAA,CACHG,IAAI,CAACC,aAAeZ,EAAAA,CAAAA,QAAS;oBAC5Ba,YAAcC,EAAAA,YAAAA,CAASC,WAAQf,CAAAA,IAAAA,CAAAA,EAAO,IAAM,GAAA,CAAA;AAC9C,iBAAA,GACCW,IAAI,CAACK,YAAEC,CAAC,EAAEC,cACVC,UAAU,EAAA,CAAA,CAAA,CAAA;AAGnB,SAAA;AACA,QAAA,MAAMC,oBAAmBZ,IAAgD,EAAA;YACvE,OAAOb,IAAAA,CACL0B,qCACE,CAAA,MAAM5B,IAAKS,CAAAA,IAAI,IACfQ,eAAMF,CAAAA,IAAAA,CAAAA,CACHG,IAAI,CAACC,aAAeZ,EAAAA,CAAAA,OAAQc,YAASX,CAAAA,OAAAA,EAAS,IAAMY,WAAAA,CAAQf,IAC5DW,CAAAA,CAAAA,CAAAA,CAAAA,IAAI,CAACK,WAAEC,CAAAA,CAAC,EAAEC,YAAAA,CAAAA,CACVC,UAAU,EAAA,CAAA,CAAA,CAAA;AAGnB,SAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEA,MAAMP,aAAAA,GAAgBI,WAAEM,CAAAA,MAAM,CAACC,EAAE,CAACP,WAAEQ,CAAAA,KAAK,CAACR,WAAAA,CAAEM,MAAM,CAAA,CAAA,CAAA;AAClD,MAAMnB,OAAU,GAAA;AAAC,IAAA,cAAA;AAAgB,IAAA,iBAAA;AAAmB,IAAA,kBAAA;AAAoB,IAAA,sBAAA;AAAuB,CAAA;;;;;"}