@orion-js/schema
Advanced tools
Comparing version 3.0.0-alpha.12 to 3.0.0-alpha.13
@@ -1,3 +0,3 @@ | ||
import { CurrentNodeInfo, SchemaMetaFieldType, SchemaNode, SchemaNodeType } from '../types/schema'; | ||
import { CurrentNodeInfo, SchemaMetaFieldType, SchemaNode } from '../types/schema'; | ||
import { FieldValidatorType } from '../types/fieldValidators'; | ||
export default function cleanType<T extends SchemaNodeType>(type: SchemaMetaFieldType<T> | FieldValidatorType, fieldSchema: Partial<SchemaNode<T>>, value: T, info: CurrentNodeInfo<any>, ...args: any[]): Promise<T>; | ||
export default function cleanType(type: SchemaMetaFieldType | FieldValidatorType, fieldSchema: Partial<SchemaNode>, value: any, info: CurrentNodeInfo, ...args: any[]): Promise<any>; |
@@ -16,3 +16,3 @@ "use strict"; | ||
if (rootFieldClean && !(0, isNil_1.default)(value)) { | ||
value = (await rootFieldClean(value, info, ...args)); | ||
value = await rootFieldClean(value, info, ...args); | ||
} | ||
@@ -46,3 +46,3 @@ let needReClean = false; | ||
if (needReClean && rootFieldClean && !(0, isNil_1.default)(value)) { | ||
value = (await rootFieldClean(value, info, ...args)); | ||
value = await rootFieldClean(value, info, ...args); | ||
} | ||
@@ -49,0 +49,0 @@ return value; |
@@ -1,2 +0,2 @@ | ||
import { SchemaNode, SchemaNodeType } from '../types/schema'; | ||
export default function getObjectNode<T extends SchemaNodeType>(schema: Partial<SchemaNode<T>>, value: T | T[]): SchemaNode<object> | void; | ||
import { SchemaNode } from '../types/schema'; | ||
export default function getObjectNode(schema: Partial<SchemaNode>, value: any): SchemaNode | void; |
@@ -6,3 +6,2 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const schema_1 = require("../types/schema"); | ||
const index_1 = __importDefault(require("./index")); | ||
@@ -129,3 +128,3 @@ test('autoconverts values', async () => { | ||
const schema = { | ||
texts: (0, schema_1.asSchemaNode)({ | ||
texts: { | ||
type: [String], | ||
@@ -135,3 +134,3 @@ autoValue(values) { | ||
} | ||
}) | ||
} | ||
}; | ||
@@ -319,3 +318,3 @@ const doc = { | ||
const item = { | ||
name: (0, schema_1.asSchemaNode)({ | ||
name: { | ||
type: String, | ||
@@ -326,6 +325,6 @@ async autoValue(name, { currentDoc }) { | ||
} | ||
}) | ||
} | ||
}; | ||
const schema = { | ||
items: (0, schema_1.asSchemaNode)({ | ||
items: { | ||
type: [item], | ||
@@ -336,3 +335,3 @@ async autoValue(items, { currentDoc }) { | ||
} | ||
}) | ||
} | ||
}; | ||
@@ -348,3 +347,5 @@ expect.assertions(2); | ||
}, | ||
__clean() { } | ||
__clean() { | ||
return undefined; | ||
} | ||
}; | ||
@@ -351,0 +352,0 @@ const schema = { |
@@ -1,3 +0,3 @@ | ||
import { CurrentNodeInfo, SchemaNodeType } from '../types/schema'; | ||
declare const clean: <T extends SchemaNodeType>(info: CurrentNodeInfo<T, any>) => Promise<T>; | ||
import { CurrentNodeInfo } from '../types/schema'; | ||
declare const clean: (info: CurrentNodeInfo) => Promise<any>; | ||
export default clean; |
@@ -1,13 +0,13 @@ | ||
import { CleanFunction, SchemaNodeType, ValidateFunction } from './types/schema'; | ||
export interface FieldTypeOpts<T extends SchemaNodeType> { | ||
import { CleanFunction, ValidateFunction } from './types/schema'; | ||
export interface FieldTypeOpts { | ||
name: string; | ||
validate?: ValidateFunction<T>; | ||
clean?: CleanFunction<T>; | ||
validate?: ValidateFunction; | ||
clean?: CleanFunction; | ||
} | ||
export interface FieldType<T extends SchemaNodeType> { | ||
export interface FieldType { | ||
name: string; | ||
validate: ValidateFunction<T>; | ||
clean: CleanFunction<T>; | ||
validate: ValidateFunction; | ||
clean: CleanFunction; | ||
_isFieldType: boolean; | ||
} | ||
export default function fieldType<T extends SchemaNodeType>(opts: FieldTypeOpts<T>): FieldType<T>; | ||
export default function fieldType(opts: FieldTypeOpts): FieldType; |
@@ -1,3 +0,2 @@ | ||
import { SchemaNodeType } from '../types/schema'; | ||
declare const _default: import("../fieldType").FieldType<SchemaNodeType>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<string>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<string>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
declare const _default: { | ||
array: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
plainObject: import("../fieldType").FieldType<object>; | ||
string: import("../fieldType").FieldType<string>; | ||
date: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
integer: import("../fieldType").FieldType<number>; | ||
number: import("../fieldType").FieldType<number>; | ||
ID: import("../fieldType").FieldType<string>; | ||
boolean: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
email: import("../fieldType").FieldType<string>; | ||
blackbox: import("../fieldType").FieldType<import("..").SchemaNodeType>; | ||
array: import("../fieldType").FieldType; | ||
plainObject: import("../fieldType").FieldType; | ||
string: import("../fieldType").FieldType; | ||
date: import("../fieldType").FieldType; | ||
integer: import("../fieldType").FieldType; | ||
number: import("../fieldType").FieldType; | ||
ID: import("../fieldType").FieldType; | ||
boolean: import("../fieldType").FieldType; | ||
email: import("../fieldType").FieldType; | ||
blackbox: import("../fieldType").FieldType; | ||
}; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<number>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<number>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<object>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
declare const _default: import("../fieldType").FieldType<string>; | ||
declare const _default: import("../fieldType").FieldType; | ||
export default _default; |
@@ -1,2 +0,2 @@ | ||
import { CurrentNodeInfo, SchemaNodeType } from '../types/schema'; | ||
export default function doValidation<T extends SchemaNodeType>(params: CurrentNodeInfo<T>): Promise<void>; | ||
import { CurrentNodeInfo } from '../types/schema'; | ||
export default function doValidation(params: CurrentNodeInfo): Promise<void>; |
@@ -27,4 +27,5 @@ "use strict"; | ||
if ((0, isPlainObject_1.default)(currentSchema.type)) { | ||
if (typeof currentSchema.type?.__skipChildValidation === 'function') { | ||
if (await currentSchema.type?.__skipChildValidation(value, info)) { | ||
const type = currentSchema.type; | ||
if (typeof type?.__skipChildValidation === 'function') { | ||
if (await type?.__skipChildValidation(value, info)) { | ||
return; | ||
@@ -60,3 +61,3 @@ } | ||
const keyItemKeys = (0, clone_1.default)(keys); | ||
keyItemKeys.push(i); | ||
keyItemKeys.push(i.toString()); | ||
await doValidation({ | ||
@@ -63,0 +64,0 @@ ...info, |
@@ -1,4 +0,4 @@ | ||
import { SchemaMetaFieldType, SchemaNodeType } from '../../types/schema'; | ||
import { SchemaMetaFieldType } from '../../types/schema'; | ||
import { FieldValidatorType } from '../../types/fieldValidators'; | ||
import { FieldType } from '../../fieldType'; | ||
export default function getFieldType<T extends SchemaNodeType>(type: SchemaMetaFieldType<T> | FieldValidatorType | any): FieldType<T>; | ||
export default function getFieldType(type: SchemaMetaFieldType | FieldValidatorType | any): FieldType; |
@@ -1,2 +0,2 @@ | ||
import { CurrentNodeInfo, SchemaNodeType } from '../../types/schema'; | ||
export default function getValidationErrors<T extends SchemaNodeType>(params: CurrentNodeInfo<T>): Promise<object | string | void>; | ||
import { CurrentNodeInfo } from '../../types/schema'; | ||
export default function getValidationErrors(params: CurrentNodeInfo): Promise<object | string | void>; |
@@ -35,4 +35,5 @@ "use strict"; | ||
} | ||
if (currentSchema.type.__validate) { | ||
const typeError = await currentSchema.type.__validate(value, info, ...args); | ||
const type = currentSchema.type; | ||
if (type.__validate) { | ||
const typeError = await type.__validate(value, info, ...args); | ||
if (typeError) { | ||
@@ -39,0 +40,0 @@ return typeError; |
@@ -1,2 +0,2 @@ | ||
import { Schema, SchemaNodeType } from '../types/schema'; | ||
export default function getValidationErrors<T extends SchemaNodeType>(schema: Schema, doc: T, passedOptions?: {}, ...args: any[]): Promise<any>; | ||
import { Schema } from '../types/schema'; | ||
export default function getValidationErrors(schema: Schema, doc: any, passedOptions?: {}, ...args: any[]): Promise<any>; |
@@ -1,2 +0,2 @@ | ||
import { Schema, SchemaNodeType } from './types/schema'; | ||
export default function isValid<T extends SchemaNodeType>(schema: Schema, doc: T, passedOptions?: {}, ...args: any[]): Promise<boolean>; | ||
import { Schema } from './types/schema'; | ||
export default function isValid(schema: Schema, doc: any, passedOptions?: {}, ...args: any[]): Promise<boolean>; |
@@ -0,30 +1,23 @@ | ||
import { FieldType } from '../fieldType'; | ||
export declare type Constructor<T> = new (...args: any[]) => T; | ||
export declare type SpecialSchemaString = 'ID' | 'email' | 'string'; | ||
export declare type SpecialSchemaNumber = 'integer' | 'number'; | ||
export declare type SpecialSchemaObject = 'blackbox'; | ||
export declare type FieldTypesList = 'string' | 'date' | 'integer' | 'number' | 'ID' | 'boolean' | 'email' | 'blackbox'; | ||
export declare type ConstructorsTypesList = Constructor<String> | Constructor<Number> | Constructor<Boolean> | Constructor<Date>; | ||
export declare type SchemaRecursiveNodeTypeExtras = { | ||
__clean?: CleanFunction<any>; | ||
__validate?: ValidateFunction<any>; | ||
__clean?: CleanFunction; | ||
__validate?: ValidateFunction; | ||
__skipChildValidation?: (value: any, info: CurrentNodeInfo) => Promise<boolean>; | ||
}; | ||
export declare type SchemaRecursiveType = { | ||
[key: string]: SchemaNode<SchemaNodeType> | Function; | ||
}; | ||
export declare type SchemaRecursiveNodeType = SchemaRecursiveType & SchemaRecursiveNodeTypeExtras; | ||
export declare type SchemaNodeType = string | Date | number | boolean | object | SchemaNodeArrayType; | ||
export declare type SchemaNodeArrayType = Array<string> | Array<Date> | Array<number> | Array<boolean> | Array<object>; | ||
/** | ||
* Converts the SchemaNodeType to its abstraction. | ||
* E.g. if the Node has type string, it will return the String constructor. | ||
*/ | ||
export declare type StringAllowedTypeValues = SpecialSchemaString | Constructor<String>; | ||
export declare type NumberAllowedTypeValues = SpecialSchemaNumber | Constructor<Number>; | ||
export declare type ObjectAllowedTypeValues = SpecialSchemaObject | SchemaRecursiveNodeType; | ||
export declare type SchemaMetaFieldType<T> = T extends string ? StringAllowedTypeValues : T extends number ? NumberAllowedTypeValues : T extends boolean ? Constructor<Boolean> : T extends Date ? Constructor<Date> : T extends Array<infer U> ? Array<SchemaMetaFieldType<U>> : T extends object ? ObjectAllowedTypeValues : T; | ||
export declare type ValidateFunction<T extends SchemaNodeType> = (value: T, info?: Partial<CurrentNodeInfo<T>>, ...args: any[]) => object | string | void | Promise<object | string | void>; | ||
export declare type CleanFunction<T extends SchemaNodeType> = (value: T, info?: Partial<CurrentNodeInfo<T>>, ...args: any[]) => T | Promise<T>; | ||
export interface SchemaNode<T extends SchemaNodeType = SchemaNodeType> { | ||
export interface Schema { | ||
[key: string]: SchemaNode | Function; | ||
} | ||
export declare type SchemaRecursiveNodeType = Schema & SchemaRecursiveNodeTypeExtras; | ||
export declare type SchemaMetaFieldTypeSingle = FieldTypesList | ConstructorsTypesList | SchemaRecursiveNodeType | FieldType; | ||
export declare type SchemaMetaFieldType = SchemaMetaFieldTypeSingle | [SchemaMetaFieldTypeSingle]; | ||
export declare type ValidateFunction = (value: any, info?: Partial<CurrentNodeInfo>, ...args: any[]) => object | string | void | Promise<object | string | void>; | ||
export declare type CleanFunction = (value: any, info?: Partial<CurrentNodeInfo>, ...args: any[]) => any | Promise<any>; | ||
export interface SchemaNode { | ||
/** | ||
* The type of the field. Used for type validations. Can also contain a subschema. | ||
*/ | ||
type: SchemaMetaFieldType<T>; | ||
type: SchemaMetaFieldType; | ||
/** | ||
@@ -34,13 +27,13 @@ * Defaults to false | ||
optional?: boolean; | ||
allowedValues?: Array<T>; | ||
defaultValue?: T | ((info: CurrentNodeInfo<T>, ...args: any[]) => T | Promise<T>); | ||
allowedValues?: Array<any>; | ||
defaultValue?: ((info: CurrentNodeInfo, ...args: any[]) => any | Promise<any>) | any; | ||
/** | ||
* Function that takes a value and returns an error message if there are any errors. Must return null or undefined otherwise. | ||
*/ | ||
validate?: ValidateFunction<T>; | ||
validate?: ValidateFunction; | ||
/** | ||
* Function that preprocesses a value before it is set. | ||
*/ | ||
clean?: CleanFunction<T>; | ||
autoValue?: (value: T, info: CurrentNodeInfo<T>, ...args: any[]) => T | Promise<T>; | ||
clean?: CleanFunction; | ||
autoValue?: (value: any, info: CurrentNodeInfo, ...args: any[]) => any | Promise<any>; | ||
/** | ||
@@ -61,9 +54,4 @@ * The minimum value if it's a number, the minimum length if it's a string or array. | ||
*/ | ||
custom?: ValidateFunction<T>; | ||
custom?: ValidateFunction; | ||
} | ||
/** | ||
* It's the same as defining the object directly, but works better with TypeScript for type inference. | ||
*/ | ||
export declare const asSchemaNode: <T extends SchemaNodeType>(schemaNode: SchemaNode<T>) => SchemaNode<T>; | ||
export declare type Schema = SchemaRecursiveType; | ||
export interface CurrentNodeInfoOptions { | ||
@@ -77,3 +65,3 @@ autoConvert?: boolean; | ||
} | ||
export interface CurrentNodeInfo<T extends SchemaNodeType, S extends SchemaNodeType = any> { | ||
export interface CurrentNodeInfo { | ||
/** | ||
@@ -83,15 +71,15 @@ * The global schema, prefaced by {type: {...}} to be compatible with subschemas | ||
*/ | ||
schema?: SchemaNode<T> | Schema; | ||
schema?: SchemaNode | Schema; | ||
/** | ||
* The current node subschema | ||
*/ | ||
currentSchema?: Partial<SchemaNode<S>>; | ||
value: T; | ||
doc?: T; | ||
currentDoc?: T; | ||
currentSchema?: Partial<SchemaNode>; | ||
value: any; | ||
doc?: any; | ||
currentDoc?: any; | ||
options?: CurrentNodeInfoOptions; | ||
args?: any[]; | ||
type?: SchemaMetaFieldType<T>; | ||
type?: SchemaMetaFieldType; | ||
keys?: string[]; | ||
addError?: (keys: string[], code: string | object) => void; | ||
} |
"use strict"; | ||
/* eslint-disable @typescript-eslint/ban-types */ | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.asSchemaNode = void 0; | ||
/** | ||
* It's the same as defining the object directly, but works better with TypeScript for type inference. | ||
*/ | ||
const asSchemaNode = (schemaNode) => schemaNode; | ||
exports.asSchemaNode = asSchemaNode; |
@@ -1,2 +0,2 @@ | ||
import { Schema, SchemaNodeType } from './types/schema'; | ||
export default function validate<T extends SchemaNodeType>(schema: Schema, doc: T, passedOptions?: {}, ...args: any[]): Promise<void>; | ||
import { Schema } from './types/schema'; | ||
export default function validate(schema: Schema, doc: any, passedOptions?: {}, ...args: any[]): Promise<void>; |
@@ -6,24 +6,26 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const __1 = require(".."); | ||
const dotGetSchema_1 = __importDefault(require("./dotGetSchema")); | ||
const tag = { | ||
name: (0, __1.asSchemaNode)({ | ||
name: { | ||
type: String | ||
}) | ||
}, | ||
other: { | ||
type: 'string' | ||
} | ||
}; | ||
const car = { | ||
brand: (0, __1.asSchemaNode)({ | ||
brand: { | ||
type: String | ||
}), | ||
tags: (0, __1.asSchemaNode)({ | ||
}, | ||
tags: { | ||
type: [tag] | ||
}) | ||
} | ||
}; | ||
const schema = { | ||
name: (0, __1.asSchemaNode)({ | ||
name: { | ||
type: String | ||
}), | ||
car: (0, __1.asSchemaNode)({ | ||
}, | ||
car: { | ||
type: car | ||
}) | ||
} | ||
}; | ||
@@ -57,5 +59,5 @@ test('handle deep schemas', async () => { | ||
const schema = { | ||
services: (0, __1.asSchemaNode)({ | ||
services: { | ||
type: 'blackbox' | ||
}) | ||
} | ||
}; | ||
@@ -62,0 +64,0 @@ expect((0, dotGetSchema_1.default)(schema, 'services')).toBe(schema.services); |
@@ -20,3 +20,3 @@ "use strict"; | ||
name: { | ||
type: String | ||
type: 'string' | ||
} | ||
@@ -26,3 +26,3 @@ }; | ||
brand: { | ||
type: String | ||
type: 'string' | ||
}, | ||
@@ -35,3 +35,3 @@ tags: { | ||
name: { | ||
type: String | ||
type: 'string' | ||
}, | ||
@@ -38,0 +38,0 @@ car: { |
{ | ||
"name": "@orion-js/schema", | ||
"version": "3.0.0-alpha.12", | ||
"version": "3.0.0-alpha.13", | ||
"main": "lib/index.js", | ||
@@ -13,4 +13,5 @@ "types": "lib/index.d.ts", | ||
"prepare": "yarn run build", | ||
"build": "tsc", | ||
"watch": "tsc -w", | ||
"clean": "rm -rf ./lib", | ||
"build": "yarn run clean && tsc", | ||
"watch": "yarn run clean && tsc -w", | ||
"test": "jest --config jest.config.js" | ||
@@ -30,2 +31,3 @@ }, | ||
"@types/jest": "27.0.2", | ||
"@types/lodash": "4.14.176", | ||
"@types/node": "16.11.1", | ||
@@ -43,3 +45,3 @@ "@typescript-eslint/eslint-plugin": "5.1.0", | ||
}, | ||
"gitHead": "57034d6f442e89a9c8f5dfc076e1ab366d401110" | ||
"gitHead": "82c882da5213349bbec68e8692e18895aeb56e07" | ||
} |
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
112
2835
101817
15