mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-05-29 00:51:29 +08:00
1010 lines
34 KiB
TypeScript
1010 lines
34 KiB
TypeScript
// Type definitions for nodal 0.12.8
|
|
// Project: https://github.com/keithwhor/nodal
|
|
// Definitions by: Adam Charron <https://github.com/charrondev>
|
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
|
|
/// <reference types="node"/>
|
|
|
|
import * as fxn from 'fxn';
|
|
|
|
export class APIConstructor {
|
|
format(obj: any, arrInterface?: string[]): {
|
|
meta: {
|
|
total: number;
|
|
count: number;
|
|
offset: number;
|
|
error: any;
|
|
summary: string | null | undefined;
|
|
resource: any;
|
|
};
|
|
data: any;
|
|
};
|
|
meta(total: number, count: number, offset: number, error: any, summary?: string | null, resource?: any): {
|
|
total: number;
|
|
count: number;
|
|
offset: number;
|
|
error: any;
|
|
summary: string | null | undefined;
|
|
resource: any;
|
|
};
|
|
error(message: string, details: string): {
|
|
meta: {
|
|
total: number;
|
|
count: number;
|
|
offset: number;
|
|
error: any;
|
|
summary: string | null | undefined;
|
|
resource: any;
|
|
};
|
|
data: never[];
|
|
};
|
|
spoof(obj: any, useResource?: boolean): {
|
|
meta: {
|
|
total: number;
|
|
count: number;
|
|
offset: number;
|
|
error: any;
|
|
summary: string | null | undefined;
|
|
resource: any;
|
|
};
|
|
data: any;
|
|
};
|
|
response(itemArray: any, arrInterface: any, useResource?: boolean): {
|
|
meta: {
|
|
total: number;
|
|
count: number;
|
|
offset: number;
|
|
error: any;
|
|
summary: string | null | undefined;
|
|
resource: any;
|
|
};
|
|
data: any;
|
|
};
|
|
resourceFromArray(arr: any[]): {
|
|
name: string;
|
|
fields: any[];
|
|
};
|
|
resourceFromModelArray(modelArray: any, arrInterface: any): any;
|
|
}
|
|
|
|
export const API: APIConstructor;
|
|
|
|
export const APIResource: any;
|
|
|
|
export class Application extends fxn.Application {
|
|
constructor();
|
|
/**
|
|
* HTTP Error
|
|
*/
|
|
error(req: any, res: any, start: any, status: number, message: string, err: any): void;
|
|
}
|
|
|
|
export class Controller extends fxn.Controller {
|
|
/**
|
|
* Set HTTP status code for this response. If OPTIONS mode, default to 200.
|
|
* @param {Number} code
|
|
*/
|
|
status(value: number): boolean;
|
|
/**
|
|
* Using API formatting, send an http.ServerResponse indicating there was a Bad Request (400)
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
badRequest(msg: string, details: any): boolean;
|
|
/**
|
|
* Using API formatting, send an http.ServerResponse indicating there was an Unauthorized request (401)
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
unauthorized(msg: string, details: any): boolean;
|
|
/**
|
|
* Using API formatting, send an http.ServerResponse indicating the requested resource was Not Found (404)
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
notFound(msg: string, details: any): boolean;
|
|
/**
|
|
* Endpoint not implemented
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
notImplemented(msg: string, details: any): boolean;
|
|
/**
|
|
* Using API formatting, send an http.ServerResponse indicating there were Too Many Requests (429) (i.e. the client is being rate limited)
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
tooManyRequests(msg: string, details: any): boolean;
|
|
/**
|
|
* Using API formatting, send an http.ServerResponse indicating there was an Internal Server Error (500)
|
|
* @param {string} msg Error message to send
|
|
* @param {Object} details Any additional details for the error (must be serializable)
|
|
* @return {boolean}
|
|
*/
|
|
error(msg: string, details: any): boolean;
|
|
/**
|
|
* Using API formatting, generate an error or respond with model / object data.
|
|
* @param {Error|Object|Array|Nodal.Model|Nodal.ModelArray} data Object to be formatted for API response
|
|
* @param {optional Array} The interface to use for the data being returned, if not an error.
|
|
* @return {boolean}
|
|
*/
|
|
respond(data: Error | Object | any[] | Model | ModelArray<Model>, arrInterface?: string[]): boolean;
|
|
}
|
|
|
|
export interface IComparison {
|
|
[item: string]: any;
|
|
__order?: string;
|
|
__offset?: number;
|
|
__count?: number;
|
|
}
|
|
|
|
export class Composer<T extends Model> {
|
|
db: Database;
|
|
Model: T;
|
|
private _parent;
|
|
private _command;
|
|
/**
|
|
* Created by Model#query, used for composing SQL queries based on Models
|
|
* @param {Nodal.Model} Model The model class the composer is querying from
|
|
* @param {Nodal.Composer} [parent=null] The composer's parent (another composer instance)
|
|
*/
|
|
constructor(modelConstructor: typeof Model, parent?: Composer<any>);
|
|
/**
|
|
* Given rows with repeated data (due to joining in multiple children),
|
|
* return only parent models (but include references to their children)
|
|
* @param {Array} rows Rows from sql result
|
|
* @param {Boolean} grouped Are these models grouped, if so, different procedure
|
|
* @return {Nodal.ModelArray}
|
|
* @private
|
|
*/
|
|
private __parseModelsFromRows__(rows, grouped?);
|
|
/**
|
|
* Collapses linked list of queries into an array (for .reduce, .map etc)
|
|
* @return {Array}
|
|
* @private
|
|
*/
|
|
private __collapse__();
|
|
/**
|
|
* Removes last limit command from a collapsed array of composer commands
|
|
* @param {Array} [composerArray] Array of composer commands
|
|
* @return {Array}
|
|
* @private
|
|
*/
|
|
private __removeLastLimitCommand__(composerArray);
|
|
/**
|
|
* Gets last limit command from a collapsed array of composer commands
|
|
* @param {Array} [composerArray] Array of composer commands
|
|
* @return {Array}
|
|
* @private
|
|
*/
|
|
private __getLastLimitCommand__(composerArray);
|
|
/**
|
|
* Determines whether this composer query represents a grouped query or not
|
|
* @return {Boolean}
|
|
* @private
|
|
*/
|
|
private __isGrouped__();
|
|
/**
|
|
* Reduces an array of composer queries to a single query information object
|
|
* @param {Array} [composerArray]
|
|
* @return {Object} Looks like {commands: [], joins: []}
|
|
* @private
|
|
*/
|
|
private __reduceToQueryInformation__(composerArray);
|
|
/**
|
|
* Reduces an array of commands from query informtion to a SQL query
|
|
* @param {Array} [commandArray]
|
|
* @param {Array} [includeColumns=*] Which columns to include, includes all by default
|
|
* @return {Object} Looks like {sql: [], params: []}
|
|
* @private
|
|
*/
|
|
private __reduceCommandsToQuery__(commandArray, includeColumns?);
|
|
/**
|
|
* Retrieve all joined column data for a given join
|
|
* @param {string} joinName The name of the join relationship
|
|
* @private
|
|
*/
|
|
private __joinedColumns__(joinName);
|
|
/**
|
|
* Generate a SQL query and its associated parameters from the current composer instance
|
|
* @param {Array} [includeColumns=*] Which columns to include, includes all by default
|
|
* @param {boolean} [disableJoins=false] Disable joins if you just want a subset of data
|
|
* @return {Object} Has "params" and "sql" properties.
|
|
* @private
|
|
*/
|
|
private __generateQuery__(includeColumns?, disableJoins?);
|
|
/**
|
|
* Generate a SQL count query
|
|
* @param {boolean} [useLimit=false] Generates COUNT using limit command as well
|
|
* @return {Object} Has "params" and "sql" properties.
|
|
* @private
|
|
*/
|
|
private __generateCountQuery__(useLimit?);
|
|
/**
|
|
* Add Joins to a query from queryInfo
|
|
* @param {Object} query Must be format {sql: '', params: []}
|
|
* @param {Object} queryInfo Must be format {commands: [], joins: []}
|
|
* @param {Array} [includeColumns=*] Which columns to include, includes all by default
|
|
* @return {Object} Has "params" and "sql" properties.
|
|
* @private
|
|
*/
|
|
private __addJoinsToQuery__(query, queryInfo, includeColumns?);
|
|
/**
|
|
* When using Composer#where, format all provided comparisons
|
|
* @param {Object} comparisons Comparisons object. {age__lte: 27}, for example.
|
|
* @param {Nodal.Model} Model the model to use as the basis for comparison. Default to current model.
|
|
* @return {Array}
|
|
* @private
|
|
*/
|
|
private __parseComparisons__(comparisons, model?);
|
|
private __filterHidden__(modelConstructor, comparisonsArray);
|
|
/**
|
|
* Add comparisons to SQL WHERE clause. Does not allow filtering if Model.hides() has been called.
|
|
* @param {Object} comparisons Comparisons object. {age__lte: 27}, for example.
|
|
* @return {Nodal.Composer} new Composer instance
|
|
*/
|
|
safeWhere(...comparisonsArray: IComparison[]): this;
|
|
/**
|
|
* Join in a relationship. Filters out hidden fields from comparisons.
|
|
* @param {string} joinName The name of the joined relationship
|
|
* @param {array} comparisonsArray comparisons to perform on this join (can be overloaded)
|
|
*/
|
|
safeJoin(joinName: string, ...comparisonsArray: IComparison[]): this;
|
|
/**
|
|
* Add comparisons to SQL WHERE clause.
|
|
* @param {Object} comparisons Comparisons object. {age__lte: 27}, for example.
|
|
* @return {Nodal.Composer} new Composer instance
|
|
*/
|
|
where(...comparisonsArray: IComparison[]): this;
|
|
/**
|
|
* Order by field belonging to the current Composer instance's model.
|
|
* @param {string} field Field to order by
|
|
* @param {string} direction Must be 'ASC' or 'DESC'
|
|
* @return {Nodal.Composer} new Composer instance
|
|
*/
|
|
orderBy(field: string, direction?: 'ASC' | 'DSC' | any): this;
|
|
/**
|
|
* Limit to an offset and count
|
|
* @param {number} offset The offset at which to set the limit. If this is the only argument provided, it will be the count instead.
|
|
* @param {number} count The number of results to be returned. Can be omitted, and if omitted, first argument is used for count.
|
|
* @return {Nodal.Composer} new Composer instance
|
|
*/
|
|
limit(offset: number | string, count?: number | string): this;
|
|
/**
|
|
* Join in a relationship.
|
|
* @param {string} joinName The name of the joined relationship
|
|
* @param {array} comparisonsArray comparisons to perform on this join (can be overloaded)
|
|
*/
|
|
join(joinName: string, comparisonsArray?: IComparison[] | IComparison, orderBy?: 'ASC' | 'DESC', count?: number, offset?: number): this;
|
|
/**
|
|
* Groups by a specific field, or a transformation on a field
|
|
* @param {String} column The column to group by
|
|
*/
|
|
groupBy(column: string): this;
|
|
/**
|
|
* Aggregates a field
|
|
* @param {String} alias The alias for the new aggregate field
|
|
* @param {Function} transformation The transformation to apply to create the aggregate
|
|
*/
|
|
aggregate(alias: string, transformation?: Function): this;
|
|
/**
|
|
* Counts the results in the query
|
|
* @param {function} callback Supplied with an error and the integer value of the count
|
|
*/
|
|
count(callback: (err: Error, count: number) => void): void;
|
|
/**
|
|
* Execute the query you've been composing.
|
|
* @param {function({Error}, {Nodal.ModelArray})} callback The method to execute when the query is complete
|
|
*/
|
|
end(callback: (err: Error, modelArray: ModelArray<T>) => void): void;
|
|
/**
|
|
* Shortcut for .limit(1).end(callback) that only returns a model object or error if not found
|
|
* @param {Function} callback Callback to execute, provides an error and model parameter
|
|
*/
|
|
first(callback: (err: Error, model: Model) => void): void;
|
|
/**
|
|
* Execute query as an update query, changed all fields specified.
|
|
* @param {Object} fields The object containing columns (keys) and associated values you'd like to update
|
|
* @param {function({Error}, {Nodal.ModelArray})} callback The callback for the update query
|
|
*/
|
|
update(fields: IAnyObject, callback: (err: Error, modelArray: ModelArray<T>) => void): void;
|
|
}
|
|
|
|
export const CLI: any;
|
|
|
|
export class Daemon extends fxn.Daemon {
|
|
constructor();
|
|
error(req: any, res: any, err: any): void;
|
|
}
|
|
|
|
export class Database {
|
|
adapter: any;
|
|
__logColorFuncs: Function[];
|
|
private _useLogColor;
|
|
constructor();
|
|
connect(cfg: any): boolean;
|
|
close(callback: Function): boolean;
|
|
log(sql: string, params?: any, time?: number): boolean;
|
|
info(message: string): void;
|
|
error(message: string): boolean;
|
|
query(...args: any[]): void;
|
|
transaction(...args: any[]): void;
|
|
drop(): void;
|
|
create(): void;
|
|
}
|
|
|
|
export class GraphQuery {
|
|
private 'constructor';
|
|
identifier: string;
|
|
name: string;
|
|
Model: typeof Model;
|
|
structure: any;
|
|
joins: any;
|
|
/**
|
|
* Create a GraphQuery object
|
|
* @param {String} str The query to execute
|
|
* @param {Number} maxDepth The maximum depth of graph to traverse
|
|
* @param {Nodal.Model} [Model=null] The Model to base your query around (used for testing)
|
|
*/
|
|
constructor(str: string, maxDepth: number, mModel?: typeof Model);
|
|
/**
|
|
* Create and execute a GraphQuery object
|
|
* @param {String} str The query to execute
|
|
* @param {Number} maxDepth The maximum depth of graph to traverse
|
|
* @param {Function} callback The function to execute upon completion
|
|
*/
|
|
static query(str: string, maxDepth: number, callback: Function): boolean;
|
|
/**
|
|
* Parse syntax tree of a GraphQL query
|
|
*/
|
|
static parseSyntaxTree(str: string, state?: string, arr?: any[]): any;
|
|
/**
|
|
* Fully parse a GraphQL query, get necessary joins to make in SQL
|
|
*/
|
|
static parse(str: string, max: number): {
|
|
structure: any;
|
|
joins: {};
|
|
};
|
|
/**
|
|
* Format a parsed syntax tree in a way that the Composer expects
|
|
*/
|
|
static formatTree(tree: any[], max: number, joins: any, parents?: any): any[];
|
|
/**
|
|
* Query the GraphQuery object from the database
|
|
* @param {Function} callback The function to execute upon completion
|
|
*/
|
|
query(callback: Function): this;
|
|
}
|
|
|
|
export interface IArrayMetadata {
|
|
total?: number;
|
|
offset?: number;
|
|
[other: string]: any;
|
|
}
|
|
|
|
export class ItemArray<T> extends Array<T> {
|
|
private _meta;
|
|
constructor();
|
|
static from(arr: Object[]): ItemArray<{}>;
|
|
setMeta(data: IArrayMetadata): IArrayMetadata;
|
|
toObject(arrInterface: string[]): Object;
|
|
}
|
|
|
|
export class Migration {
|
|
private db;
|
|
private id;
|
|
private schema;
|
|
constructor(db: Database);
|
|
up(): string[];
|
|
down(): string[];
|
|
executeUp(callback: (err: Error) => void): void;
|
|
executeDown(callback: (err: Error) => void, prevId?: string): void;
|
|
createTable(table: string, arrFieldData: Object[], modelName: string): any;
|
|
dropTable(table: string): any;
|
|
renameTable(table: string, newTableName: string, renameModel: string, newModelName: string): any;
|
|
alterColumn(table: string, column: string, type: DataType, properties: IColumnProperties): any;
|
|
addColumn(table: string, column: string, type: DataType, properties: IColumnProperties): any;
|
|
dropColumn(table: string, column: string): any;
|
|
renameColumn(table: string, column: string, newColumn: string): any;
|
|
createIndex(table: string, column: string, type: DataType): any;
|
|
dropIndex(table: string, column: string): any;
|
|
addForeignKey(table: string, referenceTable: string): any;
|
|
dropForeignKey(table: string, referenceTable: string): any;
|
|
}
|
|
|
|
export const mime: any;
|
|
|
|
/**
|
|
* Model Stuff
|
|
*/
|
|
export interface IErrorsObject {
|
|
_query?: any;
|
|
[field: string]: string[];
|
|
}
|
|
export interface ICalculation {
|
|
fields: string[];
|
|
calculate: Function;
|
|
}
|
|
export interface ICalculations {
|
|
[calculations: string]: ICalculation;
|
|
}
|
|
export class Model {
|
|
'constructor': typeof Model;
|
|
db: Database | any;
|
|
schema: {
|
|
table: string;
|
|
columns: IColumn[];
|
|
};
|
|
data: any;
|
|
externalInterface: string[];
|
|
aggregateBy: {
|
|
id: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
};
|
|
formatters: IAnyObject;
|
|
_inStorage: boolean;
|
|
private _isSeeding;
|
|
private _changed;
|
|
private _errors;
|
|
private _joinsList;
|
|
private _joinsCache;
|
|
private _data;
|
|
_calculations: ICalculations;
|
|
private static _relationshipCache;
|
|
_validations: IAnyObject;
|
|
_validationsList: any[];
|
|
_calculationsList: string[];
|
|
_verificationsList: any;
|
|
_hides: IAnyObject;
|
|
_table: string;
|
|
_columnLookup: {
|
|
[key: string]: any;
|
|
};
|
|
_columnNames: string[];
|
|
_columns: IColumn[];
|
|
_relationshipCache: IAnyObject;
|
|
constructor(modelData: Object, fromStorage?: boolean, fromSeed?: boolean);
|
|
/**
|
|
* Indicates whethere or not the model is currently represented in hard storage (db).
|
|
* @return {boolean}
|
|
*/
|
|
inStorage(): boolean;
|
|
/**
|
|
* Indicates whethere or not the model is being generated from a seed.
|
|
* @return {boolean}
|
|
*/
|
|
isSeeding(): boolean;
|
|
/**
|
|
* Tells us whether a model field has changed since we created it or loaded it from storage.
|
|
* @param {string} field The model field
|
|
* @return {boolean}
|
|
*/
|
|
hasChanged(field: string): boolean;
|
|
/**
|
|
* Provides an array of all changed fields since model was created / loaded from storage
|
|
* @return {Array}
|
|
*/
|
|
changedFields(): string[];
|
|
/**
|
|
* Creates an error object for the model if any validations have failed, returns null otherwise
|
|
* @return {Error}
|
|
*/
|
|
errorObject(): IExtendedError | null;
|
|
/**
|
|
* Tells us whether or not the model has errors (failed validations)
|
|
* @return {boolean}
|
|
*/
|
|
hasErrors(): boolean;
|
|
/**
|
|
* Gives us an error object with each errored field as a key, and each value
|
|
* being an array of failure messages from the validators
|
|
* @return {Object}
|
|
*/
|
|
getErrors(): IErrorsObject;
|
|
/**
|
|
* Reads new data into the model.
|
|
* @param {Object} data Data to inject into the model
|
|
* @return {this}
|
|
*/
|
|
read(data: IAnyObject): this;
|
|
/**
|
|
* Converts a value to its intended format based on its field. Returns null if field not found.
|
|
* @param {string} field The field to use for conversion data
|
|
* @param {any} value The value to convert
|
|
*/
|
|
convert(field: string, value: any): any;
|
|
/**
|
|
* Grabs the path of the given relationship from the RelationshipGraph
|
|
* @param {string} name the name of the relationship
|
|
*/
|
|
relationship(name: string): RelationshipPath;
|
|
/**
|
|
* Sets specified field data for the model. Logs and validates the change.
|
|
* @param {string} field Field to set
|
|
* @param {any} value Value for the field
|
|
*/
|
|
set(field: string, value: any): any;
|
|
/**
|
|
* Set a joined object (Model or ModelArray)
|
|
* @param {string} field The field (name of the join relationship)
|
|
* @param {Model|ModelArray} value The joined model or array of models
|
|
*/
|
|
setJoined(field: string, value: ModelArray<this> | Model): Model | ModelArray<this>;
|
|
/**
|
|
* Calculate field from calculations (assumes it exists)
|
|
* @param {string} field Name of the calculated field
|
|
*/
|
|
calculate(field: string): void;
|
|
/**
|
|
* Retrieve field data for the model.
|
|
* @param {string} field Field for which you'd like to retrieve data.
|
|
*/
|
|
get(field: string, ignoreFormat?: boolean): any;
|
|
/**
|
|
* Retrieves joined Model or ModelArray
|
|
* @param {String} joinName the name of the join (list of connectors separated by __)
|
|
*/
|
|
joined(joinName: string): Model | ModelArray<this>;
|
|
/**
|
|
* Retrieve associated models joined this model from the database.
|
|
* @param {function({Error} err, {Nodal.Model|Nodal.ModelArray} model_1, ... {Nodal.Model|Nodal.ModelArray} model_n)}
|
|
* Pass in a function with named parameters corresponding the relationships you'd like to retrieve.
|
|
* The first parameter is always an error callback.
|
|
*/
|
|
include(callback: (err: Error, ...models: (Model | ModelArray<this>)[]) => void): void;
|
|
/**
|
|
* Creates a plain object from the Model, with properties matching an optional interface
|
|
* @param {Array} arrInterface Interface to use for object creation
|
|
*/
|
|
toObject(arrInterface?: any[]): any;
|
|
/**
|
|
* Get the table name for the model.
|
|
* @return {string}
|
|
*/
|
|
tableName(): string;
|
|
/**
|
|
* Determine if the model has a specified field.
|
|
* @param {string} field
|
|
* @return {boolean}
|
|
*/
|
|
hasField(field: string): boolean;
|
|
/**
|
|
* Retrieve the schema field data for the specified field
|
|
* @param {string} field
|
|
* @return {Object}
|
|
*/
|
|
getFieldData(field: string): any;
|
|
/**
|
|
* Retrieve the schema data type for the specified field
|
|
* @param {string} field
|
|
* @return {string}
|
|
*/
|
|
getDataTypeOf(field: string): {
|
|
convert: Function;
|
|
};
|
|
/**
|
|
* Determine whether or not this field is an Array (PostgreSQL supports this)
|
|
* @param {string} field
|
|
* @return {boolean}
|
|
*/
|
|
isFieldArray(field: string): boolean;
|
|
/**
|
|
* Determine whether or not this field is a primary key in our schema
|
|
* @param {string} field
|
|
* @return {boolean}
|
|
*/
|
|
isFieldPrimaryKey(field: string): boolean;
|
|
/**
|
|
* Retrieve the defaultValue for this field from our schema
|
|
* @param {string} field
|
|
* @return {any}
|
|
*/
|
|
fieldDefaultValue(field: string): any;
|
|
/**
|
|
* Retrieve an array of fields for our model
|
|
* @return {Array}
|
|
*/
|
|
fieldList(): string[];
|
|
/**
|
|
* Retrieve our field schema definitions
|
|
* @return {Array}
|
|
*/
|
|
fieldDefinitions(): IColumn[];
|
|
/**
|
|
* Set an error for a specified field (supports multiple errors)
|
|
* @param {string} key The specified field for which to create the error (or '*' for generic)
|
|
* @param {string} message The error message
|
|
* @return {boolean}
|
|
*/
|
|
setError(key: string, message: string): boolean;
|
|
/**
|
|
* Clears all errors for a specified field
|
|
* @param {string} key The specified field for which to create the error (or '*' for generic)
|
|
* @return {boolean}
|
|
*/
|
|
clearError(key: string): boolean;
|
|
__generateSaveQuery__(): {
|
|
sql: any;
|
|
params: any;
|
|
};
|
|
/**
|
|
* Runs all verifications before saving
|
|
* @param {function} callback Method to execute upon completion. Returns true if OK, false if failed
|
|
* @private
|
|
*/
|
|
__verify__(callback: Function): any;
|
|
/**
|
|
* Saves model to database
|
|
* @param {function} callback Method to execute upon completion, returns error if failed (including validations didn't pass)
|
|
* @private
|
|
*/
|
|
private __save__(callback);
|
|
/**
|
|
* Destroys model and cascades all deletes.
|
|
* @param {function} callback method to run upon completion
|
|
*/
|
|
destroyCascade(callback: Function): void;
|
|
/**
|
|
* Logic to execute before a model gets destroyed. Intended to be overwritten when inherited.
|
|
* @param {Function} callback Invoke with first argument as an error if failure.
|
|
*/
|
|
beforeDestroy(callback: Function): void;
|
|
/**
|
|
* Logic to execute after a model is destroyed. Intended to be overwritten when inherited.
|
|
* @param {Function} callback Invoke with first argument as an error if failure.
|
|
*/
|
|
afterDestroy(callback: Function): void;
|
|
/**
|
|
* Destroys model reference in database.
|
|
* @param {function({Error} err, {Nodal.Model} model)} callback
|
|
* Method to execute upon completion, returns error if failed
|
|
*/
|
|
destroy(callback: Function): void;
|
|
/**
|
|
* Logic to execute before a model saves. Intended to be overwritten when inherited.
|
|
* @param {Function} callback Invoke with first argument as an error if failure.
|
|
*/
|
|
beforeSave(callback: Function): void;
|
|
/**
|
|
* Logic to execute after a model saves. Intended to be overwritten when inherited.
|
|
* @param {Function} callback Invoke with first argument as an error if failure.
|
|
*/
|
|
afterSave(callback: Function): void;
|
|
/**
|
|
* Save a model (execute beforeSave and afterSave)
|
|
* @param {Function} callback Callback to execute upon completion
|
|
*/
|
|
save(callback: Function): void;
|
|
/**
|
|
* Runs an update query for this specific model instance
|
|
* @param {Object} fields Key-value pairs of fields to update
|
|
* @param {Function} callback Callback to execute upon completion
|
|
*/
|
|
update(fields: IAnyObject, callback: Function): void;
|
|
static find(id: number, callback: (err: IExtendedError, model?: Model) => void): void;
|
|
static findBy(field: string, value: any, callback: (err: IExtendedError, model?: Model) => void): void;
|
|
/**
|
|
* Creates a new model instance using the provided data.
|
|
* @param {object} data The data to load into the object.
|
|
* @param {function({Error} err, {Nodal.Model} model)} callback The callback to execute upon completion
|
|
*/
|
|
static create(data: IAnyObject, callback: (err: IExtendedError, model?: Model) => void): void;
|
|
/**
|
|
* Finds a model with a provided field, value pair. Returns the first found.
|
|
* @param {string} field Name of the field
|
|
* @param {object} data Key-value pairs of Model creation data. Will use appropriate value to query for based on "field" parametere.
|
|
* @param {function({Error} err, {Nodal.Model} model)} callback The callback to execute upon completion
|
|
*/
|
|
static findOrCreateBy(field: string, data: IAnyObject, callback: (err: IExtendedError | null, model?: Model) => void): void;
|
|
/**
|
|
* Finds and updates a model with a specified id. Return a notFound error if model does not exist.
|
|
* @param {number} id The id of the model you're looking for
|
|
* @param {object} data The data to load into the object.
|
|
* @param {function({Error} err, {Nodal.Model} model)} callback The callback to execute upon completion
|
|
*/
|
|
static update(id: number, data: IAnyObject, callback: (err: IExtendedError, model?: Model) => void): void;
|
|
/**
|
|
* Finds and destroys a model with a specified id. Return a notFound error if model does not exist.
|
|
* @param {number} id The id of the model you're looking for
|
|
* @param {function({Error} err, {Nodal.Model} model)} callback The callback to execute upon completion
|
|
*/
|
|
static destroy(id: number, callback: (err: IExtendedError, model?: Model) => void): void;
|
|
/**
|
|
* Creates a new Composer (ORM) instance to begin a new query.
|
|
* @param {optional Nodal.Database} db Deprecated - provide a database to query from. Set the model's db in its constructor file, instead.
|
|
* @return {Nodal.Composer}
|
|
*/
|
|
static query<T extends Model>(db?: Database): Composer<T>;
|
|
/**
|
|
* Get the model's table name
|
|
* @return {string}
|
|
*/
|
|
static table(): string;
|
|
/**
|
|
* Get the model's column data
|
|
* @return {Array}
|
|
*/
|
|
static columns(): IColumn[];
|
|
/**
|
|
* Get the model's column names (fields)
|
|
* @return {Array}
|
|
*/
|
|
static columnNames(): string[];
|
|
/**
|
|
* Get the model's column lookup data
|
|
* @return {Object}
|
|
*/
|
|
static columnLookup(): IAnyObject;
|
|
/**
|
|
* Check if the model has a column name in its schema
|
|
* @param {string} columnName
|
|
*/
|
|
static hasColumn(columnName: string): boolean;
|
|
/**
|
|
* Return the column schema data for a given name
|
|
* @param {string} columnName
|
|
*/
|
|
static column(columnName: string): any;
|
|
/**
|
|
* Set the database to be used for this model
|
|
* @param {Nodal.Database} db
|
|
*/
|
|
static setDatabase(db: Database): void;
|
|
/**
|
|
* Set the schema to be used for this model
|
|
* @param {Object} schema
|
|
*/
|
|
static setSchema(schema: {
|
|
table: string;
|
|
columns: IColumn[];
|
|
}): void;
|
|
/**
|
|
* FIXME
|
|
*/
|
|
static relationships(): RelationshipNode;
|
|
/**`
|
|
* FIXME
|
|
*/
|
|
static relationship(name: string): RelationshipPath;
|
|
/**
|
|
* Sets a joins relationship for the Model. Sets joinedBy relationship for parent.
|
|
* @param {class Nodal.Model} Model The Model class which your current model belongs to
|
|
* @param {Object} [options={}]
|
|
* "name": The string name of the parent in the relationship (default to camelCase of Model name)
|
|
* "via": Which field in current model represents this relationship, defaults to `${name}_id`
|
|
* "as": What to display the name of the child as when joined to the parent (default to camelCase of child name)
|
|
* "multiple": Whether the child exists in multiples for the parent (defaults to false)
|
|
*/
|
|
static joinsTo(modelClass: typeof Model, options: {
|
|
name?: string;
|
|
via?: string;
|
|
as?: string;
|
|
multiple?: boolean;
|
|
}): RelationshipEdge | null;
|
|
/**
|
|
* Create a validator. These run synchronously and check every time a field is set / cleared.
|
|
* @param {string} field The field you'd like to validate
|
|
* @param {string} message The error message shown if a validation fails.
|
|
* @param {function({any} value)} fnAction the validation to run - first parameter is the value you're testing.
|
|
*/
|
|
static validates(field: string, message: string, fnAction: (value: any) => void): void;
|
|
/**
|
|
* Creates a verifier. These run asynchronously, support multiple fields, and check every time you try to save a Model.
|
|
* @param {string} message The error message shown if a validation fails.
|
|
* @param {function} fnAction The asynchronous verification method. The last argument passed is always a callback,
|
|
* and field names are determined by the argument names.
|
|
*/
|
|
static verifies(message: string, fnAction: Function): void;
|
|
/**
|
|
* Create a calculated field (in JavaScript). Must be synchronous.
|
|
* @param {string} calcField The name of the calculated field
|
|
* @param {function} fnCalculate The synchronous method to perform a calculation for.
|
|
* Pass the names of the (non-computed) fields you'd like to use as parameters.
|
|
*/
|
|
static calculates(calcField: string, fnCompute: Function): void;
|
|
/**
|
|
* Hides fields from being output in .toObject() (i.e. API responses), even if asked for
|
|
* @param {String} field
|
|
*/
|
|
static hides(field: string): boolean;
|
|
/**
|
|
* Tells us if a field is hidden (i.e. from API queries)
|
|
* @param {String} field
|
|
*/
|
|
static isHidden(field: string): any;
|
|
/**
|
|
* Prepare model for use
|
|
* @private
|
|
*/
|
|
private __initialize__();
|
|
__load__(data: any, fromStorage?: boolean, fromSeed?: boolean): this;
|
|
/**
|
|
* Validates provided fieldList (or all fields if not provided)
|
|
* @private
|
|
* @param {optional Array} fieldList fields to validate
|
|
*/
|
|
private __validate__(field?);
|
|
/**
|
|
* Sets specified field data for the model, assuming data is safe and does not log changes
|
|
* @param {string} field Field to set
|
|
* @param {any} value Value for the field
|
|
*/
|
|
public __safeSet__(field: string, value: any): void;
|
|
/**
|
|
* Destroys model reference in database
|
|
* @param {function} callback Method to execute upon completion, returns error if failed
|
|
* @private
|
|
*/
|
|
private __destroy__(callback);
|
|
}
|
|
|
|
export class ModelArray<T> extends ItemArray<T> {
|
|
Model: typeof Model;
|
|
constructor(modelConstructor: typeof Model);
|
|
static from<T>(arr: Model[]): ModelArray<T>;
|
|
toObject(arrInterface?: string[]): any;
|
|
has(model: Model): boolean;
|
|
readAll(data: Object): boolean;
|
|
setAll(field: string, value: string): boolean;
|
|
destroyAll(callback: Function): void;
|
|
destroyCascade(callback: Function): void;
|
|
saveAll(callback: Function): Function | undefined;
|
|
private __saveAll__(callback);
|
|
}
|
|
|
|
export interface IModelData {
|
|
[modelName: string]: any[];
|
|
}
|
|
/**
|
|
* Factory for creating models
|
|
* @class
|
|
*/
|
|
export class ModelFactory {
|
|
private Model;
|
|
/**
|
|
* Create the ModelFactory with a provided Model to use as a reference.
|
|
* @param {Nodal.Model} modelConstructor Must pass the constructor for the type of ModelFactory you wish to create.
|
|
*/
|
|
constructor(modelConstructor: typeof Model);
|
|
/**
|
|
* Loads all model constructors in your ./app/models directory into an array
|
|
* @return {Array} Array of model Constructors
|
|
*/
|
|
static loadModels(): any[];
|
|
/**
|
|
* Creates new factories from a supplied array of Models, loading in data keyed by Model name
|
|
* @param {Array} Models Array of model constructors you wish to reference
|
|
* @param {Object} objModelData Keys are model names, values are arrays of model data you wish to create
|
|
* @param {Function} callback What to execute upon completion
|
|
*/
|
|
static createFromModels(Models: (typeof Model)[], objModelData: IModelData, callback: Function): void;
|
|
/**
|
|
* Populates a large amount of model data from an Object.
|
|
* @param {Array} Models Array of Model constructors
|
|
*/
|
|
static populate(objModelData: IModelData, callback: Function): void;
|
|
/**
|
|
* Creates models from an array of Objects containing the model data
|
|
* @param {Array} arrModelData Array of objects to create model data from
|
|
*/
|
|
create(arrModelData: IModelData[], callback: Function): void;
|
|
}
|
|
|
|
export interface IOptions {
|
|
name: string;
|
|
multiple: boolean;
|
|
as: string;
|
|
via: string;
|
|
}
|
|
export class RelationshipPath {
|
|
private 'constructor';
|
|
path: (RelationshipEdge | RelationshipNode)[];
|
|
constructor(path: (RelationshipEdge | RelationshipNode)[]);
|
|
toString(): string;
|
|
joinName(reverse?: boolean): string;
|
|
add(node: RelationshipNode, edge: RelationshipEdge): RelationshipPath;
|
|
getModel(): typeof Model;
|
|
multiple(): boolean;
|
|
immediateMultiple(): boolean;
|
|
joins(alias?: string | null, firstTable?: string): IJoin[];
|
|
}
|
|
export class RelationshipNode {
|
|
Graph: RelationshipGraph;
|
|
Model: typeof Model;
|
|
edges: RelationshipEdge[];
|
|
constructor(Graph: RelationshipGraph, mModel: typeof Model);
|
|
toString(): string;
|
|
joinsTo(mModel: typeof Model, options: IOptions): RelationshipEdge | null;
|
|
childEdges(): RelationshipEdge[];
|
|
cascade(): RelationshipPath[];
|
|
findExplicit(pathname: string): RelationshipPath | null;
|
|
find(name: string): RelationshipPath | null;
|
|
}
|
|
export class RelationshipEdge {
|
|
id: number;
|
|
parent: RelationshipNode;
|
|
child: RelationshipNode;
|
|
options: IOptions;
|
|
constructor(parent: RelationshipNode, child: RelationshipNode, options: IOptions);
|
|
toString(): string;
|
|
hasChild(child: RelationshipNode): boolean;
|
|
hasParent(parent: RelationshipNode): boolean;
|
|
opposite(node: RelationshipNode): RelationshipNode | null;
|
|
}
|
|
export class RelationshipGraph {
|
|
nodes: RelationshipNode[];
|
|
edges: RelationshipEdge[];
|
|
constructor();
|
|
of(mModel: typeof Model): RelationshipNode;
|
|
}
|
|
export class Router extends fxn.Router {
|
|
}
|
|
export class Scheduler extends fxn.Scheduler {
|
|
}
|
|
|
|
/**
|
|
* Random types used across multiple classes.
|
|
*/
|
|
export interface IAnyObject {
|
|
[prop: string]: any;
|
|
}
|
|
export interface IExtendedError extends Error {
|
|
notFound?: boolean;
|
|
details?: Object;
|
|
}
|
|
export interface IColumn {
|
|
name: string;
|
|
type: DataType;
|
|
properties: IColumnProperties;
|
|
}
|
|
export interface ISchema {
|
|
table: string;
|
|
columns: IColumn[];
|
|
}
|
|
export interface IJoin {
|
|
prevColumn?: string;
|
|
joinColumn?: string;
|
|
joinTable: string;
|
|
prevTable: string;
|
|
name?: string;
|
|
key?: string;
|
|
multiple?: boolean;
|
|
columns?: string[];
|
|
columnsObject?: Object;
|
|
cachedModel?: Model;
|
|
joinAlias?: string;
|
|
multiFilter?: any;
|
|
prevAlias?: string;
|
|
orderBy?: any;
|
|
offset?: number;
|
|
count?: number;
|
|
}
|
|
export type Query = any;
|
|
export interface IColumnProperties {
|
|
length?: number | null;
|
|
nullable?: boolean;
|
|
primary_key?: 0 | 1 | boolean;
|
|
auto_increment?: boolean;
|
|
unique?: 0 | 1 | boolean;
|
|
array?: boolean;
|
|
defaultValue?: any;
|
|
}
|
|
export interface IArrInterface {
|
|
[item: string]: [string];
|
|
}
|
|
export type InterfaceType = IArrInterface | string;
|
|
export type DataType = 'serial' | 'int' | 'currency' | 'float' | 'string' | 'text' | 'datetime' | 'boolean' | 'json';
|
|
|
|
export const my: {
|
|
Config?: any;
|
|
Schema?: any;
|
|
bootstrapper?: any;
|
|
};
|
|
export const require: NodeRequire;
|