json-schema-to-typescript
Advanced tools
Comparing version 14.0.0 to 14.0.1
@@ -5,2 +5,10 @@ # Changelog | ||
## 14.0.2 | ||
- 9ec0c70 Added .yaml support (#577) | ||
## 14.0.1 | ||
- 2f29f19 Added `customName` option | ||
## 14.0.0 | ||
@@ -7,0 +15,0 @@ |
@@ -42,12 +42,15 @@ #!/usr/bin/env node | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const minimist = require("minimist"); | ||
const minimist_1 = __importDefault(require("minimist")); | ||
const fs_1 = require("mz/fs"); | ||
const mkdirp = __importStar(require("mkdirp")); | ||
const glob_1 = require("glob"); | ||
const isGlob = require("is-glob"); | ||
const is_glob_1 = __importDefault(require("is-glob")); | ||
const path_1 = require("path"); | ||
const index_1 = require("./index"); | ||
const utils_1 = require("./utils"); | ||
main(minimist(process.argv.slice(2), { | ||
main((0, minimist_1.default)(process.argv.slice(2), { | ||
alias: { | ||
@@ -79,3 +82,3 @@ help: ['h'], | ||
const argOut = argv._[1] || argv.output; // the output can be omitted so this can be undefined | ||
const ISGLOB = isGlob(argIn); | ||
const ISGLOB = (0, is_glob_1.default)(argIn); | ||
const ISDIR = isDir(argIn); | ||
@@ -82,0 +85,0 @@ if ((ISGLOB || ISDIR) && argOut && argOut.includes('.d.ts')) { |
import { JSONSchema4 } from 'json-schema'; | ||
import { ParserOptions as $RefOptions } from '@apidevtools/json-schema-ref-parser'; | ||
import { Options as PrettierOptions } from 'prettier'; | ||
import { JSONSchema as LinkedJSONSchema } from './types/JSONSchema'; | ||
export { EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema } from './types/JSONSchema'; | ||
@@ -19,2 +20,6 @@ export interface Options { | ||
/** | ||
* Custom function to provide a type name for a given schema | ||
*/ | ||
customName?: (schema: LinkedJSONSchema, keyNameFromDefinition: string | undefined) => string | undefined; | ||
/** | ||
* Root directory for resolving [`$ref`](https://tools.ietf.org/id/draft-pbryan-zyp-json-ref-03.html)s. | ||
@@ -21,0 +26,0 @@ */ |
@@ -11,2 +11,5 @@ "use strict"; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -28,2 +31,3 @@ exports.ValidationError = exports.compile = exports.compileFromFile = exports.DEFAULT_OPTIONS = void 0; | ||
const optionValidator_1 = require("./optionValidator"); | ||
const js_yaml_1 = __importDefault(require("js-yaml")); | ||
exports.DEFAULT_OPTIONS = { | ||
@@ -58,11 +62,22 @@ $refOptions: {}, | ||
function compileFromFile(filename, options = exports.DEFAULT_OPTIONS) { | ||
const schema = parseAsJSONSchema(filename); | ||
return compile(schema, (0, utils_1.stripExtension)(filename), Object.assign({ cwd: (0, path_1.dirname)(filename) }, options)); | ||
} | ||
exports.compileFromFile = compileFromFile; | ||
function parseAsJSONSchema(filename) { | ||
const contents = (0, utils_1.Try)(() => (0, fs_1.readFileSync)(filename), () => { | ||
throw new ReferenceError(`Unable to read file "${filename}"`); | ||
}); | ||
const schema = (0, utils_1.Try)(() => JSON.parse(contents.toString()), () => { | ||
if (isYaml(filename)) { | ||
return (0, utils_1.Try)(() => js_yaml_1.default.load(contents.toString()), () => { | ||
throw new TypeError(`Error parsing YML in file "${filename}"`); | ||
}); | ||
} | ||
return (0, utils_1.Try)(() => JSON.parse(contents.toString()), () => { | ||
throw new TypeError(`Error parsing JSON in file "${filename}"`); | ||
}); | ||
return compile(schema, (0, utils_1.stripExtension)(filename), Object.assign({ cwd: (0, path_1.dirname)(filename) }, options)); | ||
} | ||
exports.compileFromFile = compileFromFile; | ||
function isYaml(filename) { | ||
return filename.endsWith('.yaml') || filename.endsWith('.yml'); | ||
} | ||
function compile(schema_1, name_1) { | ||
@@ -69,0 +84,0 @@ return __awaiter(this, arguments, void 0, function* (schema, name, options = {}) { |
@@ -87,3 +87,3 @@ "use strict"; | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.allOf.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -93,3 +93,3 @@ type: 'INTERSECTION', | ||
case 'ANY': | ||
return Object.assign(Object.assign({}, (options.unknownAny ? AST_1.T_UNKNOWN : AST_1.T_ANY)), { comment: schema.description, deprecated: schema.deprecated, keyName, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames) }); | ||
return Object.assign(Object.assign({}, (options.unknownAny ? AST_1.T_UNKNOWN : AST_1.T_ANY)), { comment: schema.description, deprecated: schema.deprecated, keyName, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options) }); | ||
case 'ANY_OF': | ||
@@ -100,3 +100,3 @@ return { | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.anyOf.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -110,3 +110,3 @@ type: 'UNION', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'BOOLEAN', | ||
@@ -120,3 +120,3 @@ }; | ||
params: schema.tsType, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'CUSTOM_TYPE', | ||
@@ -129,3 +129,3 @@ }; | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition !== null && keyNameFromDefinition !== void 0 ? keyNameFromDefinition : keyName, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition !== null && keyNameFromDefinition !== void 0 ? keyNameFromDefinition : keyName, usedNames, options), | ||
params: schema.enum.map((_, n) => ({ | ||
@@ -144,3 +144,3 @@ ast: parseLiteral(_, undefined), | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NEVER', | ||
@@ -153,3 +153,3 @@ }; | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NULL', | ||
@@ -162,3 +162,3 @@ }; | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NUMBER', | ||
@@ -170,3 +170,3 @@ }; | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'OBJECT', | ||
@@ -180,3 +180,3 @@ deprecated: schema.deprecated, | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.oneOf.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -192,3 +192,3 @@ type: 'UNION', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'STRING', | ||
@@ -207,3 +207,3 @@ }; | ||
minItems, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.items.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -225,3 +225,3 @@ type: 'TUPLE', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: parse(schema.items, options, `{keyNameFromDefinition}Items`, processed, usedNames), | ||
@@ -236,3 +236,3 @@ type: 'ARRAY', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.type.map(type => { | ||
@@ -249,3 +249,3 @@ const member = Object.assign(Object.assign({}, (0, lodash_1.omit)(schema, '$id', 'description', 'title')), { type }); | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.enum.map(_ => parseLiteral(_, undefined)), | ||
@@ -272,3 +272,3 @@ type: 'UNION', | ||
spreadParam: maxItems >= 0 ? undefined : params, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'TUPLE', | ||
@@ -282,3 +282,3 @@ }; | ||
params, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'ARRAY', | ||
@@ -291,4 +291,5 @@ }; | ||
*/ | ||
function standaloneName(schema, keyNameFromDefinition, usedNames) { | ||
const name = schema.title || schema.$id || keyNameFromDefinition; | ||
function standaloneName(schema, keyNameFromDefinition, usedNames, options) { | ||
var _a; | ||
const name = ((_a = options.customName) === null || _a === void 0 ? void 0 : _a.call(options, schema, keyNameFromDefinition)) || schema.title || schema.$id || keyNameFromDefinition; | ||
if (name) { | ||
@@ -299,3 +300,3 @@ return (0, utils_1.generateName)(name, usedNames); | ||
function newInterface(schema, options, processed, usedNames, keyName, keyNameFromDefinition) { | ||
const name = standaloneName(schema, keyNameFromDefinition, usedNames); | ||
const name = standaloneName(schema, keyNameFromDefinition, usedNames, options); | ||
return { | ||
@@ -302,0 +303,0 @@ comment: schema.description, |
{ | ||
"name": "json-schema-to-typescript", | ||
"version": "14.0.0", | ||
"version": "14.0.1", | ||
"description": "compile json schema to typescript typings", | ||
@@ -44,3 +44,3 @@ "main": "dist/src/index.js", | ||
], | ||
"author": "Boris Cherny <boris@performancejs.com> (http://performancejs.com/)", | ||
"author": "Boris Cherny <boris@borischerny.com> (https://borischerny.com)", | ||
"license": "MIT", | ||
@@ -55,3 +55,2 @@ "bugs": { | ||
"@types/lodash": "^4.17.0", | ||
"@types/prettier": "^3.0.0", | ||
"cli-color": "^2.0.4", | ||
@@ -84,3 +83,3 @@ "glob": "^10.3.12", | ||
"concurrently": "^8.2.2", | ||
"eslint": "^9.1.0", | ||
"eslint": "^8.56.0", | ||
"eslint-config-prettier": "^9.1.0", | ||
@@ -87,0 +86,0 @@ "eslint-plugin-prettier": "^5.1.3", |
@@ -1,2 +0,2 @@ | ||
# json-schema-to-typescript [![Build Status][build]](https://github.com/bcherny/json-schema-to-typescript/actions?query=branch%3Amaster+workflow%3ACI) [![npm]](https://www.npmjs.com/package/json-schema-to-typescript) [![mit]](https://opensource.org/licenses/MIT) | ||
# json-schema-to-typescript [![Build Status][build]](https://github.com/bcherny/json-schema-to-typescript/actions?query=branch%3Amaster+workflow%3ACI) [![npm]](https://www.npmjs.com/package/json-schema-to-typescript) [![mit]](https://opensource.org/licenses/MIT) ![node] | ||
@@ -6,4 +6,5 @@ [build]: https://img.shields.io/github/actions/workflow/status/bcherny/json-schema-to-typescript/ci.yml?style=flat-square | ||
[mit]: https://img.shields.io/npm/l/json-schema-to-typescript.svg?style=flat-square | ||
[node]: https://img.shields.io/badge/Node.js-16+-417e37?style=flat-square | ||
> Compile json schema to typescript typings | ||
> Compile json/yaml schema to typescript typings | ||
@@ -89,2 +90,3 @@ ## Example | ||
| bannerComment | string | `"/* eslint-disable */\n/**\n* This file was automatically generated by json-schema-to-typescript.\n* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n* and run json-schema-to-typescript to regenerate this file.\n*/"` | Disclaimer comment prepended to the top of each generated file | | ||
| customName | `(LinkedJSONSchema, string | undefined) => string | undefined` | `undefined` | Custom function to provide a type name for a given schema | ||
| cwd | string | `process.cwd()` | Root directory for resolving [`$ref`](https://tools.ietf.org/id/draft-pbryan-zyp-json-ref-03.html)s | | ||
@@ -91,0 +93,0 @@ | declareExternallyReferenced | boolean | `true` | Declare external schemas referenced via `$ref`? | |
#!/usr/bin/env node | ||
import minimist = require('minimist') | ||
import minimist from 'minimist' | ||
import {readFile, writeFile, existsSync, lstatSync, readdirSync} from 'mz/fs' | ||
import * as mkdirp from 'mkdirp' | ||
import {glob} from 'glob' | ||
import isGlob = require('is-glob') | ||
import isGlob from 'is-glob' | ||
import {join, resolve, dirname, basename} from 'path' | ||
@@ -9,0 +9,0 @@ import {compile, DEFAULT_OPTIONS, Options} from './index' |
@@ -18,2 +18,4 @@ import {readFileSync} from 'fs' | ||
import {validateOptions} from './optionValidator' | ||
import {JSONSchema as LinkedJSONSchema} from './types/JSONSchema' | ||
import yaml from 'js-yaml' | ||
@@ -36,2 +38,6 @@ export {EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema} from './types/JSONSchema' | ||
/** | ||
* Custom function to provide a type name for a given schema | ||
*/ | ||
customName?: (schema: LinkedJSONSchema, keyNameFromDefinition: string | undefined) => string | undefined | ||
/** | ||
* Root directory for resolving [`$ref`](https://tools.ietf.org/id/draft-pbryan-zyp-json-ref-03.html)s. | ||
@@ -113,2 +119,7 @@ */ | ||
export function compileFromFile(filename: string, options: Partial<Options> = DEFAULT_OPTIONS): Promise<string> { | ||
const schema = parseAsJSONSchema(filename) | ||
return compile(schema, stripExtension(filename), {cwd: dirname(filename), ...options}) | ||
} | ||
function parseAsJSONSchema(filename: string): JSONSchema4 { | ||
const contents = Try( | ||
@@ -120,3 +131,13 @@ () => readFileSync(filename), | ||
) | ||
const schema = Try<JSONSchema4>( | ||
if (isYaml(filename)) { | ||
return Try( | ||
() => yaml.load(contents.toString()) as JSONSchema4, | ||
() => { | ||
throw new TypeError(`Error parsing YML in file "${filename}"`) | ||
}, | ||
) | ||
} | ||
return Try( | ||
() => JSON.parse(contents.toString()), | ||
@@ -127,5 +148,8 @@ () => { | ||
) | ||
return compile(schema, stripExtension(filename), {cwd: dirname(filename), ...options}) | ||
} | ||
function isYaml(filename: string) { | ||
return filename.endsWith('.yaml') || filename.endsWith('.yml') | ||
} | ||
export async function compile(schema: JSONSchema4, name: string, options: Partial<Options> = {}): Promise<string> { | ||
@@ -132,0 +156,0 @@ validateOptions(options) |
@@ -150,3 +150,3 @@ import {JSONSchema4Type, JSONSchema4TypeName} from 'json-schema' | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.allOf!.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -161,3 +161,3 @@ type: 'INTERSECTION', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
} | ||
@@ -169,3 +169,3 @@ case 'ANY_OF': | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.anyOf!.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -179,3 +179,3 @@ type: 'UNION', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'BOOLEAN', | ||
@@ -189,3 +189,3 @@ } | ||
params: schema.tsType!, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'CUSTOM_TYPE', | ||
@@ -198,3 +198,3 @@ } | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition ?? keyName, usedNames)!, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition ?? keyName, usedNames, options)!, | ||
params: schema.enum!.map((_, n) => ({ | ||
@@ -213,3 +213,3 @@ ast: parseLiteral(_, undefined), | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NEVER', | ||
@@ -222,3 +222,3 @@ } | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NULL', | ||
@@ -231,3 +231,3 @@ } | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'NUMBER', | ||
@@ -239,3 +239,3 @@ } | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'OBJECT', | ||
@@ -249,3 +249,3 @@ deprecated: schema.deprecated, | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.oneOf!.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -261,3 +261,3 @@ type: 'UNION', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'STRING', | ||
@@ -276,3 +276,3 @@ } | ||
minItems, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.items.map(_ => parse(_, options, undefined, processed, usedNames)), | ||
@@ -292,3 +292,3 @@ type: 'TUPLE', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: parse(schema.items!, options, `{keyNameFromDefinition}Items`, processed, usedNames), | ||
@@ -303,3 +303,3 @@ type: 'ARRAY', | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: (schema.type as JSONSchema4TypeName[]).map(type => { | ||
@@ -316,3 +316,3 @@ const member: LinkedJSONSchema = {...omit(schema, '$id', 'description', 'title'), type} | ||
keyName, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
params: schema.enum!.map(_ => parseLiteral(_, undefined)), | ||
@@ -339,3 +339,3 @@ type: 'UNION', | ||
spreadParam: maxItems >= 0 ? undefined : params, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'TUPLE', | ||
@@ -350,3 +350,3 @@ } | ||
params, | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), | ||
standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames, options), | ||
type: 'ARRAY', | ||
@@ -364,4 +364,6 @@ } | ||
usedNames: UsedNames, | ||
options: Options, | ||
): string | undefined { | ||
const name = schema.title || schema.$id || keyNameFromDefinition | ||
const name = | ||
options.customName?.(schema, keyNameFromDefinition) || schema.title || schema.$id || keyNameFromDefinition | ||
if (name) { | ||
@@ -380,3 +382,3 @@ return generateName(name, usedNames) | ||
): TInterface { | ||
const name = standaloneName(schema, keyNameFromDefinition, usedNames)! | ||
const name = standaloneName(schema, keyNameFromDefinition, usedNames, options)! | ||
return { | ||
@@ -383,0 +385,0 @@ comment: schema.description, |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2361531
13
13568
220
- Removed@types/prettier@^3.0.0
- Removed@types/prettier@3.0.0(transitive)