@neodx/vfs json plugin  
Set of integration for package.json files.
typescript
import { createVfs } from '@neodx/vfs';
const vfs = createVfs(process.cwd());
// top-level methods:
const json = await vfs.readJson('file.json');
await vfs.writeJson('file.json', { ...json, foo: 'bar' });
// same as
await vfs.updateJson('file.json', json => ({ ...json, foo: 'bar' }));
// file api:
const file = vfs.jsonFile('file.json');
const fileContent = await file.readJson();
await file.writeJson({ ...fileContent, foo: 'bar' });
await file.updateJson(json => ({ ...json, foo: 'bar' }));API 
typescript
interface JsonPluginApi {
  jsonFile<FileContents extends JSONValue | unknown = unknown>(
    path: string
  ): JsonFileApi<FileContents>;
  readJson<T extends JSONValue | unknown = unknown>(
    path: string,
    options?: ParseJsonParams
  ): Promise<T>;
  writeJson<T extends JSONValue | unknown = unknown>(
    path: string,
    json: T,
    options?: SerializeJsonParams
  ): Promise<void>;
  updateJson<T extends JSONValue | unknown = unknown>(
    path: string,
    updater: JsonUpdate<T>,
    options?: ParseJsonParams & SerializeJsonParams
  ): Promise<void>;
}
interface JsonFileApi<FileContents extends JSONValue | unknown = unknown> {
  read<T extends FileContents = FileContents>(options?: ParseJsonParams): Promise<T>;
  write<T extends FileContents = FileContents>(
    json: T,
    options?: SerializeJsonParams
  ): Promise<void>;
  update<T extends FileContents = FileContents>(
    updater: JsonUpdate<T>,
    options?: ParseJsonParams & SerializeJsonParams
  ): Promise<void>;
}
type JsonUpdate<T> = (json: T) => T | void | Promise<T | void>;