Merge pull request #8049 from vangware/master

Added camo support
This commit is contained in:
Masahiro Wakame
2016-02-15 23:20:51 +09:00
2 changed files with 182 additions and 0 deletions

43
camo/camo-tests.ts Normal file
View 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
View 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>;
}