@neodx/vfs
Version:
Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover
61 lines (57 loc) • 1.94 kB
JavaScript
;
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