Add types for json-schema-compare (#40085)

* Add types for json-schema-compare

* Use JSONSchemaDefinition instead of only schema
This commit is contained in:
Emily Marigold Klassen 2019-11-05 09:32:36 -08:00 committed by Nathan Shively-Sanders
parent 0410320f11
commit 60bd0fc81e
4 changed files with 92 additions and 0 deletions

42
types/json-schema-compare/index.d.ts vendored Normal file
View File

@ -0,0 +1,42 @@
// Type definitions for json-schema-compare 0.2
// Project: https://github.com/mokkabonna/json-schema-compare#readme
// Definitions by: Emily Marigold Klassen <https://github.com/forivall>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.8
import { JSONSchema4, JSONSchema6, JSONSchema7, JSONSchema6Definition, JSONSchema7Definition } from 'json-schema';
export = compare;
type JSONSchemaComparee = JSONSchema4 | JSONSchema6Definition | JSONSchema7Definition | undefined;
type KnownKeys<T> = {
[K in keyof T]: string extends K ? never : K
} extends { [_ in keyof T]: infer U } ? U : never;
/**
* The `string & {''?: never}` is a workaround for
* [Microsoft/TypeScript#29729](https://github.com/Microsoft/TypeScript/issues/29729).
* It will be removed as soon as it's not needed anymore.
*/
type JSONSchemaKeys = KnownKeys<JSONSchema4> | keyof JSONSchema6 | keyof JSONSchema7 | string & {''?: never};
interface Options {
/**
* Ignores certain keywords, useful to exclude meta keywords like title,
* description etc or custom keywords. If all you want to know if they are
* the same in terms of validation keywords.
*
* @default []
*/
ignore?: JSONSchemaKeys[];
}
/**
* Compare json schemas correctly.
*
* - Ignores sort for arrays where sort does not matter, like required, enum, type, anyOf, oneOf, anyOf, dependencies (if array)
* - Compares correctly type when array or string
* - Ignores duplicate values before comparing
* - For schemas and sub schemas `undefined`, `true` and `{}` are equal
* - For minLength, minItems and minProperties `undefined` and `0` are equal
* - For uniqueItems, `undefined` and `false` are equal
*/
declare function compare(a: JSONSchemaComparee, b: JSONSchemaComparee, options?: Options): boolean;

View File

@ -0,0 +1,26 @@
import compare = require('json-schema-compare');
// @ExpectType boolean
compare({
title: 'title 1',
type: ['object'],
uniqueItems: false,
dependencies: {
name: ['age', 'lastName']
},
required: ['name', 'age', 'name']
}, {
title: 'title 2',
type: 'object',
required: ['age', 'name'],
dependencies: {
name: ['lastName', 'age']
},
properties: {
name: {
minLength: 0
}
}
}, {
ignore: ['title', 'customKey']
});

View File

@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"json-schema-compare-tests.ts"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }