Skip to content

Commit

Permalink
Merge pull request DefinitelyTyped#8049 from vangware/master
Browse files Browse the repository at this point in the history
Added camo support
  • Loading branch information
vvakame committed Feb 15, 2016
2 parents 19f8b69 + 19f385d commit b8ac7e2
Show file tree
Hide file tree
Showing 2 changed files with 182 additions and 0 deletions.
43 changes: 43 additions & 0 deletions camo/camo-tests.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 139 additions & 0 deletions camo/camo.d.ts
Original file line number Diff line number Diff line change
@@ -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>;

}

0 comments on commit b8ac7e2

Please sign in to comment.