Merge pull request #7174 from panuhorsmalahti/cradle

Add type definitions for cradle.
This commit is contained in:
Masahiro Wakame
2015-12-15 23:50:12 +09:00
2 changed files with 307 additions and 0 deletions

185
cradle/cradle-tests.ts Normal file
View File

@@ -0,0 +1,185 @@
/// <reference path="./cradle.d.ts" />
import cradle = require("cradle");
cradle.setup({
host: 'living-room.couch',
cache: true,
raw: false,
forceSave: true
});
const connection = new cradle.Connection();
const connection2 = new(cradle.Connection);
const connection3 = new(cradle.Connection)('173.45.66.92');
connection.databases(function(error, response) {});
connection.config(function(error, response) {});
connection.databases(function(error, response) {});
connection.info(function(error, response) {});
connection.stats(function(error, response) {});
connection.activeTasks(function(error, response) {});
connection.uuids(function(error, response) {});
connection.uuids(10, function(error, response) {});
connection.replicate({
source: "database",
target: "targetDatabase"
}, function(error, response) {});
const db = connection.database('starwars');
db.exists(function (error, exists) {
if (error) {
console.log('error', error);
} else if (exists) {
console.log('the force is with you.');
} else {
console.log('database does not exists.');
db.create(function(error){
/* do something if there's an erroror */
/* populate design documents */
});
}
});
db.get<{
name: string;
}>('vader', function (error, doc) {
doc.name; // 'Darth Vader'
});
db.get('luke', function (error, doc) {
doc.prop;
});
db.get(['luke', 'vader'], function (error, doc) {
//
});
db.save('skywalker', {
force: 'light',
name: 'Luke Skywalker'
}, function (error, res) {
if (error) {
// Handle erroror
} else {
// Handle success
}
});
db.save({
force: 'dark', name: 'Darth'
}, function (err, res) {
// Handle response
});
db.save('luke', '1-94B6F82', {
force: 'dark', name: 'Luke'
}, function (err, res) {
// Handle response
});
db.save([
{ name: 'Yoda' },
{ name: 'Han Solo' },
{ name: 'Leia' }
], function (err, res) {
// Handle response
});
db.merge('luke', {jedi: true}, function (err, res) {
// Luke is now a jedi,
// but remains on the dark side of the force.
});
db.view('characters/all', function (err, res) {
res.forEach(function (row: any) {
console.log("%s is on the %s side of the force.", row.name, row.force);
});
});
db.view('characters/all', {group: true, reduce: true} , function (err, res) {
res.forEach(function (row: any) {
console.log("%s is on the %s side of the force.", row.name, row.force);
});
});
db.temporaryView({
map: function (doc: any) {
//
}
}, function (err, res) {
if (err) console.log(err);
console.log(res);
});
db.remove('luke', '1-94B6F82', function (err, res) {
// Handle response
});
db.update('my_designdoc/update_handler_name', 'luke', undefined, { my_param: false }, function (err, res) {
// Handle the response, specified by the update handler
});
db.changes(function (err, list) {
list.forEach(function (change) { console.log(change) });
});
db.changes({ since: 42 }, function (err, list) {
//
});
const feed = db.changes({ since: 42 });
feed.on('change', function (change: any) {
console.log(change);
});
const idAndRevData = {
id: 'luke',
rev: 'my-rev'
};
const attachmentData = {
name: 'fooAttachment.txt',
'Content-Type': 'text/plain',
body: 'Foo document text'
};
db.saveAttachment(idAndRevData, attachmentData, function (err, reply) {
if (err) {
console.dir(err)
return
}
console.dir(reply)
});
db.getAttachment('luke', 'foo.txt', function (err, reply) {
if (err) {
console.dir(err);
return;
}
console.dir(reply);
});
db.removeAttachment('luke', 'foo.txt', function (err, reply) {
if (err) {
console.dir(err);
return;
}
console.dir(reply);
});
db.info(function(error, response) {});
db.all(function(error, response) {});
db.all({
body: {
keys: ['key1', 'key2']
}
}, function(error, response) {});
db.compact(function(error, response) {});
db.compact('design', function(error, response) {});
db.viewCleanup(function(error, response) {});
db.replicate('database', function(error, response) {});
db.replicate('database', {}, function(error, response) {});

122
cradle/cradle.d.ts vendored Normal file
View File

@@ -0,0 +1,122 @@
// Type definitions for cradle
// Project: https://github.com/flatiron/cradle
// Definitions by: Panu Horsmalahti <https://github.com/panuhorsmalahti>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module "cradle" {
interface Options {
host?: string;
hostname?: string;
cache?: boolean;
raw?: boolean;
forceSave?: boolean;
auth?: string | {
username: string;
password: string;
}
ca?: string;
secure?: boolean;
retries?: number;
retryTimeout?: number;
maxSockets?: number;
}
interface Callback {
(error: any, response: any): void;
}
interface ErrorCallback {
(error: any): void;
}
export class Connection {
constructor(uri?: string, port?: number, options?: Options);
database(name: string): Database;
databases(Callback: Callback): void;
config(callback: Callback): void;
info(callback: Callback): void;
stats(callback: Callback): void;
activeTasks(callback: Callback): void;
uuids(callback: Callback): void;
uuids(count: number, callback: Callback): void;
replicate(options: {
source: string | {
url: string;
};
target: string | {
url: string;
};
cancel?: boolean;
continuous?: boolean;
create_target?: boolean;
doc_ids?: string[];
filter?: string;
proxy?: string;
query_params?: any;
}, callback: Callback): void;
}
export interface ChangesOptions {
since: number;
}
export class Database {
name: string;
get(id: string, callback: (error: any, document: any) => void): void;
get<T>(id: string, callback: (error: any, document: T) => void): void;
get(id: string, rev: string, callback: (error: any, document: any) => void): void;
get<T>(id: string, rev: string, callback: (error: any, document: T) => void): void;
get(ids: string[], callback: Callback): void;
save(document: any, callback: Callback): void;
save(id: string, document: any, callback: Callback): void;
save(id: string, revision: string, document: any,
callback: Callback): void;
save<T>(document: T, callback: Callback): void;
save<T>(id: string, document: T, callback: Callback): void;
save<T>(id: string, revision: string, document: T,
callback: Callback): void;
save(documents: any[], callback: Callback): void;
merge(id: string, document: any, callback: Callback): void;
merge<T>(id: string, document: T, callback: Callback): void;
remove(id: string, revision: string, callback: Callback): void;
update(name: string, id: string, queryObject: any, documentBody: any,
callback: Callback): void;
view(name: string, callback: Callback): void;
view(name: string, options: {
group?: boolean;
reduce?: boolean;
key?: string;
startkey?: any;
endkey?: any;
include_docs?: boolean;
limit?: number;
descending?: boolean;
}, callback: Callback): void;
temporaryView(view: any, callback: Callback): void;
create(callback: ErrorCallback): void;
exists(callback: (error: any, exists: boolean) => void): void;
destroy(callback: ErrorCallback): void;
changes(options: ChangesOptions): any;
changes(callback: (error: any, list: any[]) => void): void;
changes(options: ChangesOptions, callback: (error: any,
list: any[]) => void): void;
saveAttachment(idAndRevData: {
id: string;
rev: string;
}, attachmentData: any, callback: Callback): void;
getAttachment(id: string, attachmentName: string,
callback: Callback): void;
removeAttachment(id: string, attachmentName: string,
callback: Callback): void;
info(callback: Callback): void;
all(callback: Callback): void;
all(options: any, callback: Callback): void;
compact(callback: Callback): void;
compact(design: string, callback: Callback): void;
viewCleanup(callback: Callback): void;
replicate(target: string, callback: Callback): void;
replicate(target: string, options: any, callback: Callback): void;
}
export function setup(options: Options): void;
}