Socket
Socket
Sign inDemoInstall

json-schema-to-typescript

Package Overview
Dependencies
Maintainers
1
Versions
114
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-schema-to-typescript - npm Package Compare versions

Comparing version 14.0.0 to 14.0.1

8

CHANGELOG.md

@@ -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 @@

11

dist/src/cli.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc