mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-08-06 09:19:08 +00:00
43
camo/camo-tests.ts
Normal file
43
camo/camo-tests.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
/// <reference path="./camo.d.ts" />
|
||||
|
||||
import {
|
||||
connect,
|
||||
Document as CamoDocument,
|
||||
DocumentSchema,
|
||||
SchemaTypeExtended
|
||||
} from "camo";
|
||||
|
||||
connect("mongodb://user:password@localhost:27017/database?authSource=admin").then(() => {
|
||||
let document = new CamoDocument();
|
||||
|
||||
interface UserSchema extends DocumentSchema {
|
||||
name: string;
|
||||
password: string;
|
||||
friends: string[];
|
||||
dateCreated?: Date;
|
||||
}
|
||||
|
||||
class User extends CamoDocument {
|
||||
private name: SchemaTypeExtended = String;
|
||||
private password: SchemaTypeExtended = String;
|
||||
private friends: SchemaTypeExtended = [String];
|
||||
private dateCreated: SchemaTypeExtended = {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
};
|
||||
static collectionName() {
|
||||
return "users";
|
||||
}
|
||||
}
|
||||
|
||||
var newUser = User.create<UserSchema>({
|
||||
name: "user-1",
|
||||
password: "secret",
|
||||
friends: ["user-2", "user-3"]
|
||||
});
|
||||
|
||||
newUser.save().then(done => {
|
||||
console.log(done._id);
|
||||
});
|
||||
|
||||
});
|
||||
139
camo/camo.d.ts
vendored
Normal file
139
camo/camo.d.ts
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
// Type definitions for camo v0.11.4
|
||||
// Project: https://github.com/scottwrobinson/camo
|
||||
// Definitions by: Lucas Matías Ciruzzi <https://github.com/lucasmciruzzi>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
declare module "camo" {
|
||||
|
||||
type TypeOrArray<Type> = Type | Type[];
|
||||
|
||||
/**
|
||||
* Supported type constructors for document properties
|
||||
*/
|
||||
export type SchemaTypeConstructor =
|
||||
TypeOrArray<StringConstructor> |
|
||||
TypeOrArray<NumberConstructor> |
|
||||
TypeOrArray<BooleanConstructor> |
|
||||
TypeOrArray<DateConstructor> |
|
||||
TypeOrArray<ObjectConstructor> |
|
||||
TypeOrArray<ArrayConstructor>;
|
||||
|
||||
/**
|
||||
* Supported types for document properties
|
||||
*/
|
||||
export type SchemaType = TypeOrArray<string | number | boolean | Date | Object>;
|
||||
|
||||
/**
|
||||
* Document property with options
|
||||
*/
|
||||
export interface SchemaTypeOptions<Type> {
|
||||
/**
|
||||
* Type of data
|
||||
*/
|
||||
type: SchemaTypeConstructor;
|
||||
/**
|
||||
* Default value
|
||||
*/
|
||||
default?: Type;
|
||||
/**
|
||||
* Min value (only with Number)
|
||||
*/
|
||||
min?: number;
|
||||
/**
|
||||
* Max value (only with Number)
|
||||
*/
|
||||
max?: number;
|
||||
/**
|
||||
* Posible options
|
||||
*/
|
||||
choices?: Type[];
|
||||
/**
|
||||
* RegEx to match value
|
||||
*/
|
||||
match?: RegExp;
|
||||
/**
|
||||
* Validation function
|
||||
*
|
||||
* @param value Value taken
|
||||
* @returns true (validation ok) or false (validation wrong)
|
||||
*/
|
||||
validate?(value: Type): boolean;
|
||||
/**
|
||||
* Unique value (like ids)
|
||||
*/
|
||||
unique?: boolean;
|
||||
/**
|
||||
* Required field
|
||||
*/
|
||||
required?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Document property type or options
|
||||
*/
|
||||
export type SchemaTypeExtended = SchemaTypeConstructor | SchemaTypeOptions<SchemaType>;
|
||||
|
||||
/**
|
||||
* Schema passed to Document.create()
|
||||
*/
|
||||
interface DocumentSchema {
|
||||
/**
|
||||
* Index signature
|
||||
*/
|
||||
[property: string]: SchemaType;
|
||||
/**
|
||||
* Document id
|
||||
*/
|
||||
_id?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Camo document instance
|
||||
*/
|
||||
class DocumentInstance<Schema extends DocumentSchema> {
|
||||
public save(): Promise<Schema>;
|
||||
public loadOne(): Promise<Schema>;
|
||||
public loadMany(): Promise<Schema>;
|
||||
public delete(): Promise<Schema>;
|
||||
public deleteOne(): Promise<Schema>;
|
||||
public deleteMany(): Promise<Schema>;
|
||||
public loadOneAndDelete(): Promise<Schema>;
|
||||
public count(): Promise<Schema>;
|
||||
public preValidate(): Promise<Schema>;
|
||||
public postValidate(): Promise<Schema>;
|
||||
public preSave(): Promise<Schema>;
|
||||
public postSave(): Promise<Schema>;
|
||||
public preDelete(): Promise<Schema>;
|
||||
public postDelete(): Promise<Schema>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Camo document
|
||||
*/
|
||||
export class Document {
|
||||
/**
|
||||
* Index signature
|
||||
*/
|
||||
[property: string]: SchemaTypeExtended | string | DocumentInstance<any>;
|
||||
/**
|
||||
* Static method to define the collection name
|
||||
*
|
||||
* @returns The collection name
|
||||
*/
|
||||
static collectionName(): string;
|
||||
/**
|
||||
* Creates a camo document instance
|
||||
*
|
||||
* @returns A camo document instance
|
||||
*/
|
||||
static create<Schema extends DocumentSchema>(schema: Schema): DocumentInstance<Schema>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect function
|
||||
*
|
||||
* @param uri Connection URI
|
||||
*/
|
||||
export function connect (uri: string): Promise<any>;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user