UNPKG

@neodx/vfs

Version:

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

61 lines (57 loc) 1.94 kB
'use strict'; var pkgMisc = require('@neodx/pkg-misc'); var std = require('@neodx/std'); var tsPattern = require('ts-pattern'); var createVfsPlugin = require('../_internal/create-vfs-plugin-1jK9qNm1.cjs'); var plugins_json = require('./json.cjs'); function packageJson() { return createVfsPlugin.createVfsPlugin('packageJson', vfs => { vfs.packageJson = (path = 'package.json') => createVfsPackageJsonFileApi(vfs, path); return vfs; }); } function createVfsPackageJsonFileApi(vfs, path) { const file = plugins_json.createJsonFileApi(vfs, path); const sync = async content => { if (content) await file.write(content); return Boolean(content); }; return { ...file, async hasDependency(name) { const pkg = await file.read(); return allDeps.some(type => std.hasOwn(pkg[type] ?? {}, name)); }, async addDependencies(deps) { return sync( pkgMisc.addPackageJsonDependencies( await file.read(), tsPattern .match(deps) .with(stringOrArray, name => ({ dependencies: std.fromKeys(std.toArray(name), () => '*') })) .with(tsPattern.P._, std.identity) .exhaustive() ) ); }, async removeDependencies(deps) { return sync( pkgMisc.removePackageJsonDependencies( await file.read(), tsPattern .match(deps) .with(stringOrArray, name => std.fromKeys(allDeps, () => std.toArray(name))) .with(tsPattern.P._, std.identity) .exhaustive() ) ); } }; } const stringOrArray = tsPattern.P.string.or(tsPattern.P.array(tsPattern.P.string)); const allDeps = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']; exports.createVfsPackageJsonFileApi = createVfsPackageJsonFileApi; exports.packageJson = packageJson; //# sourceMappingURL=package-json.cjs.map