diff --git a/js-data/js-data-node-tests.ts b/js-data/js-data-node-tests.ts
index a0b39a161..2b6cf44a5 100644
--- a/js-data/js-data-node-tests.ts
+++ b/js-data/js-data-node-tests.ts
@@ -1,13 +1,12 @@
///
+///
import JSData = require('js-data');
-//TODO
-//import DSRedisAdapter = require('js-data-redis')
+import DSHttpAdapter = require('js-data-http')
var store = new JSData.DS();
// register and use http by default for async operations
-//TODO
-//store.registerAdapter('redis', new DSRedisAdapter(), {default: true});
+store.registerAdapter('redis', new DSHttpAdapter(), {default: true});
// simplest model definition
var User = store.defineResource('user');
diff --git a/js-data/js-data-tests.ts b/js-data/js-data-tests.ts
index c6fe6d13b..113862bcf 100644
--- a/js-data/js-data-tests.ts
+++ b/js-data/js-data-tests.ts
@@ -11,7 +11,7 @@ interface IUser {
}
interface IUserWithMethod extends IUser {
- fullName?: () => string;
+ fullName:()=>string;
}
interface IUserWithComputedProperty extends IUser {
@@ -20,10 +20,6 @@ interface IUserWithComputedProperty extends IUser {
var store = new JSData.DS();
-// register and use http by default for async operations
-//TODO
-//store.registerAdapter('http', new DSHttpAdapter(), {default: true});
-
// simplest model definition
var User = store.defineResource('user');
@@ -31,12 +27,12 @@ User.find(1).then(function (user:IUser) {
user; // { id: 1, name: 'John' }
});
-var user:IUser = User.createInstance({name: 'John'});
+var user:IUser = User.createInstance({name: 'John'});
var store = new JSData.DS();
-var User = store.defineResource('user');
-var user:IUser = User.inject({id: 1, name: 'John'});
-var user2:IUser = User.inject({id: 1, age: 30});
+var User2 = store.defineResource('user');
+var user:IUser = User2.inject({id: 1, name: 'John'});
+var user2:IUser = User2.inject({id: 1, age: 30});
user; // User { id: 1, name: 'John', age: 30 }
user2; // User { id: 1, name: 'John', age: 30 }
@@ -70,7 +66,7 @@ User.create({
var store = new JSData.DS();
-var UserWithMethod = store.defineResource({
+var UserWithMethodResource = store.defineResource({
name: 'user',
methods: {
fullName: function () {
@@ -79,7 +75,7 @@ var UserWithMethod = store.defineResource({
}
});
-var userWithMethod = UserWithMethod.createInstance({first: 'John', last: 'Anderson'});
+var userWithMethod = UserWithMethodResource.createInstance({first: 'John', last: 'Anderson'});
userWithMethod.fullName(); // "John Anderson"
@@ -102,7 +98,7 @@ var UserWithComputedProperty = store.defineResource({
}
});
-var userWithComputedProperty:IUserWithComputedProperty = UserWithComputedProperty.inject({
+var userWithComputedProperty:IUserWithComputedProperty = UserWithComputedProperty.inject({
id: 1,
first: 'John',
last: 'Anderson'
@@ -139,9 +135,10 @@ aComment.filter({
});
// Get all comments where comment.userId == 5
-aComment.filter({
- userId: 5
-});
+//TODO rather unexplicit version of where.. support in typings?
+//aComment.filter({
+// userId: 5
+//});
// Get all comments where comment.userId === 5
aComment.filter({
@@ -284,7 +281,7 @@ Post.filter({
limit: PAGE_SIZE
});
-var User = store.defineResource({
+var User3 = store.defineResource({
name: 'user',
relations: {
hasMany: {
@@ -362,7 +359,7 @@ User.find(10).then(function (user:IUser) {
user.comments; // undefined
user.profile; // undefined
- User.loadRelations(user, ['comment', 'profile']).then(function (user:IUser) {
+ User.loadRelations(user.id, ['comment', 'profile']).then(function (user:IUser) {
user.comments; // array
user.profile; // object
});
@@ -409,7 +406,7 @@ var store = new JSData.DS({
}
});
-var User = store.defineResource({
+var User4 = store.defineResource({
name: 'user',
// set just for this resource
beforeCreate: function (resource, data, cb) {
@@ -418,7 +415,7 @@ var User = store.defineResource({
}
});
-User.create({name: 'John'}, {
+User4.create({name: 'John'}, {
// set just for this method call
beforeCreate: function (resource, data, cb) {
// do something specific for this method call
@@ -521,4 +518,66 @@ var store = new JSData.DS();
var myResourceDefinition = store.defineResource('myResource');
-myResourceDefinition = store.definitions.myResource;
\ No newline at end of file
+myResourceDefinition = store.definitions.myResource;
+
+/**
+ * Custom action on datastore resource
+ */
+
+interface Resource {
+ someProp:string;
+}
+
+interface ActionsForResource {
+ myAction:JSData.DSActionFn;
+ myOtherAction:JSData.DSActionFn;
+}
+
+var myOtherAction:JSData.DSActionConfig = {
+ method: 'GET',
+ endpoint: 'goHere'
+};
+
+var customActionResource = store.defineResource({
+ name: 'actionResource',
+ actions: {
+ myAction: {
+ method: 'POST'
+ },
+ myOtherAction: myOtherAction
+ }
+});
+
+customActionResource.myAction(3).then((result)=>{
+
+ var theCustomResult:number = result;
+});
+
+customActionResource.myOtherAction(2, {data:'blub'}).then(()=>{
+ // success
+});
+
+customActionResource.find(1).then((result)=>{
+
+ var aProperty = result.someProp;
+});
+
+/**
+ * Instance shorthands
+ */
+
+var customActionResourceInstance = customActionResource.get(1);
+
+customActionResourceInstance.DSCompute();
+customActionResourceInstance.DSChanges();
+customActionResourceInstance.DSChangeHistory();
+customActionResourceInstance.DSHasChanges();
+customActionResourceInstance.DSLastModified();
+customActionResourceInstance.DSLastSaved();
+customActionResourceInstance.DSPrevious();
+customActionResourceInstance.DSCreate();
+customActionResourceInstance.DSDestroy();
+customActionResourceInstance.DSLoadRelations('myRelation');
+customActionResourceInstance.DSRefresh();
+customActionResourceInstance.DSSave();
+customActionResourceInstance.DSUpdate();
diff --git a/js-data/js-data.d.ts b/js-data/js-data.d.ts
index 604b70e6c..07796ec08 100644
--- a/js-data/js-data.d.ts
+++ b/js-data/js-data.d.ts
@@ -1,4 +1,4 @@
-// Type definitions for JSData v1.5.4
+// Type definitions for JSData v2.8.0
// Project: https://github.com/js-data/js-data
// Definitions by: Stefan Steinhart
// Definitions: https://github.com/borisyankov/DefinitelyTyped
@@ -7,135 +7,66 @@
// js-data module (js-data.js)
///////////////////////////////////////////////////////////////////////////////
-// defining what exists in JSData and how it looks
declare module JSData {
interface JSDataPromise {
+ then(onFulfilled?:(value:R) => U | JSDataPromise, onRejected?:(error:any) => U | JSDataPromise): JSDataPromise;
- then(onFulfilled?: (value: R) => U | JSDataPromise, onRejected?: (error: any) => U | JSDataPromise): JSDataPromise;
-
- catch(onRejected?: (error: any) => U | JSDataPromise): JSDataPromise;
+ catch(onRejected?:(error:any) => U | JSDataPromise): JSDataPromise;
// enhanced with finally
finally(finallyCb?:() => U):JSDataPromise;
}
- //TODO switch to class again when typescript supports open ended class declaration
- interface DS {
-
- new(config?:DSConfiguration):DS;
-
- // rather undocumented
- errors:DSErrors;
-
- // those are objects containing the defined resources and adapters
- definitions:any;
- adapters:any;
-
- defaults:DSConfiguration;
-
- // async
- create(resourceName:string, attrs:Object, options?:DSConfiguration):JSDataPromise;
- destroy(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise;
- destroyAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise;
- find(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise;
- findAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>;
- loadRelations(resourceName:string, idOrInstance:string | number | Object, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise;
- update(resourceName:string, id:string | number, attrs:Object, options?:DSSaveConfiguration):JSDataPromise;
- updateAll(resourceName:string, attrs:Object, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>;
- reap(resourceName:string, options?:DSConfiguration):JSDataPromise;
- refresh(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise;
- save(resourceName:string, id:string | number, options?:DSSaveConfiguration):JSDataPromise;
-
- // sync
- changeHistory(resourceName:string, id?:string | number):Array