warehouse
Version:
Simple JSON-based database
172 lines (171 loc) • 4.91 kB
TypeScript
import SchemaType from './schematype';
import * as Types from './types/index';
import BluebirdPromise from 'bluebird';
import SchemaTypeVirtual from './types/virtual';
import type { AddSchemaTypeOptions, Options, queryCallback, queryFilterCallback, queryParseCallback } from './types';
import type Model from './model';
import type Document from './document';
declare class Schema<T = any> {
paths: Record<string, SchemaType<any>>;
statics: Record<string, (this: Model<T>, ...args: any[]) => any>;
methods: Record<string, (this: T, ...args: any[]) => any>;
hooks: {
pre: {
save: ((data: any) => BluebirdPromise<any>)[];
remove: ((data: any) => BluebirdPromise<any>)[];
};
post: {
save: ((data: any) => BluebirdPromise<any>)[];
remove: ((data: any) => BluebirdPromise<any>)[];
};
};
stacks: {
getter: ((data: object) => void)[];
setter: ((data: object) => void)[];
import: ((data: object) => void)[];
export: ((data: object) => void)[];
};
/**
* Schema constructor.
*
* @param {Object} [schema]
*/
constructor(schema?: Record<string, AddSchemaTypeOptions>);
/**
* Adds paths.
*
* @param {Object} schema
* @param {String} prefix
*/
add(schema: Record<string, AddSchemaTypeOptions>, prefix?: string): void;
/**
* Gets/Sets a path.
*
* @param {String} name
* @param {*} obj
* @return {SchemaType | undefined}
*/
path(name: string): SchemaType<any>;
path(name: string, obj: AddSchemaTypeOptions): void;
/**
* Updates cache stacks.
*
* @param {String} name
* @param {SchemaType} type
* @private
*/
_updateStack(name: string, type: SchemaType<unknown>): void;
/**
* Adds a virtual path.
*
* @param {String} name
* @param {Function} [getter]
* @return {SchemaType.Virtual}
*/
virtual(name: string, getter?: (this: T) => any): SchemaTypeVirtual<T>;
/**
* Adds a pre-hook.
*
* @param {String} type Hook type. One of `save` or `remove`.
* @param {Function} fn
*/
pre(type: keyof Schema['hooks']['pre'], fn: (...args: any[]) => void): void;
/**
* Adds a post-hook.
*
* @param {String} type Hook type. One of `save` or `remove`.
* @param {Function} fn
*/
post(type: keyof Schema['hooks']['post'], fn: (...args: any[]) => void): void;
/**
* Adds a instance method.
*
* @param {String} name
* @param {Function} fn
*/
method(name: string, fn: (this: T, ...args: any[]) => any): void;
/**
* Adds a static method.
*
* @param {String} name
* @param {Function} fn
*/
static(name: string, fn: (this: Model<T>, ...args: any[]) => any): void;
/**
* Apply getters.
*
* @param {Object} data
* @return {void}
* @private
*/
_applyGetters(data: object): void;
/**
* Apply setters.
*
* @param {Object} data
* @return {void}
* @private
*/
_applySetters(data: object): void;
/**
* Parses database.
*
* @param {Object} data
* @return {Object}
* @private
*/
_parseDatabase(data: object): any;
/**
* Exports database.
*
* @param {Object} data
* @return {Object}
* @private
*/
_exportDatabase(data: object): any;
/**
* Parses updating expressions and returns a stack.
*
* @param {Object} updates
* @return {queryCallback[]}
* @private
*/
_parseUpdate(updates: object): queryCallback<T>[];
/**
* Returns a function for querying.
*
* @param {Object} query
* @return {queryFilterCallback}
* @private
*/
_execQuery(query: object): queryFilterCallback;
/**
* Parses sorting expressions and returns a stack.
*
* @param {Object} sorts
* @param {string} [prefix]
* @param {queryParseCallback[]} [stack]
* @return {queryParseCallback[]}
* @private
*/
_parseSort(sorts: Record<string, number | string | Record<string, any>>, prefix?: string, stack?: queryParseCallback<Document<T>>[]): queryParseCallback<Document<T>>[];
/**
* Returns a function for sorting.
*
* @param {Object} sorts
* @return {queryParseCallback}
* @private
*/
_execSort(sorts: Record<string, number | string | Record<string, any>>): queryParseCallback<Document<T>>;
/**
* Parses population expression and returns a stack.
*
* @param {String|Object} expr
* @return {PopulateResult[]}
* @private
*/
_parsePopulate(expr: string | string[] | Partial<Options>[] | Partial<Options>): Partial<Options>[];
Types: typeof Types;
static Types: typeof Types;
}
export default Schema;