diff --git a/.gitignore b/.gitignore index c311dea..75552dd 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,9 @@ bower_components/ *.iml .idea/ + +build_examples/r.js/bundle.js +build_examples/browserify/bundle.js +build_examples/webpack/bundle.js +build_examples/webpack_es6/bundle.js +build_examples/webpack_es6_2/bundle.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f0c37..a2352b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +##### 3.0.0 - 02 July 2015 + +Stable Version 3.0.0 + +##### 3.0.0-rc.1 - 28 June 2015 + +Stable Version 3.0.0-rc.1 + +##### 3.0.0-beta.2 - 19 April 2015 + +Added examples of various build setups `./build_examples/` + +##### 3.0.0-beta.1 - 17 April 2015 + +###### Backwards compatible API changes +- #306 - Keep it DRY + +###### Other +- #314 - Switch to using peerDependencies + ##### 2.4.0 - 15 April 2015 ###### Backwards compatible API changes diff --git a/Gruntfile.js b/Gruntfile.js index 260ac9a..4966178 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -72,7 +72,7 @@ module.exports = function (grunt) { files: [ 'bower_components/angular-1.3.2/angular.js', 'bower_components/angular-mocks-1.3.2/angular-mocks.js', - 'bower_components/js-data/dist/js-data.js', + 'node_modules/js-data/dist/js-data.min.js', 'dist/js-data-angular.min.js', 'karma.start.js', 'test/**/*.js' @@ -87,10 +87,11 @@ module.exports = function (grunt) { }, webpack: { dist: { + debug: true, entry: './src/index.js', output: { filename: './dist/js-data-angular.js', - libraryTarget: 'umd', + libraryTarget: 'umd2', library: 'jsDataAngularModuleName' }, externals: { @@ -100,11 +101,12 @@ module.exports = function (grunt) { commonjs2: 'js-data', root: 'JSData' }, + 'axios': 'axios', 'angular': 'angular' }, module: { loaders: [ - { test: /(.+)\.js$/, exclude: /node_modules/, loader: 'babel-loader?blacklist=useStrict' } + { test: /(.+)\.js$/, loader: 'babel-loader?blacklist=useStrict' } ], preLoaders: [ { diff --git a/README.md b/README.md index c71a740..2b68e74 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Angular wrapper for [js-data](http://www.js-data.io). #### What happened Angular-data? -Js-data-angular is Angular-data 2.0, with [js-data](http://www.js-data.io) as the framework-agnostic core. Documentation for Angular-data 1.x can be found at [angular-data.pseudobry.com](http://angular-data.pseudobry.com). +Angular-data is deprecated. js-data + js-data-angular is the new hotness. ### Guides - [Angular + JSData (js-data-angular)](http://www.js-data.io/docs/js-data-angular) @@ -41,7 +41,7 @@ __Latest Release:__ [![Latest Release](https://img.shields.io/github/release/js- __Status:__ -[![Dependency Status](https://img.shields.io/gemnasium/js-data/js-data-angular.svg?style=flat-square)](https://gemnasium.com/js-data/js-data-angular) [![Coverage Status](https://img.shields.io/coveralls/js-data/js-data-angular/master.svg?style=flat-square)](https://coveralls.io/r/js-data/js-data-angular?branch=master) [![Codacity](https://img.shields.io/codacy/e7690b906dfa471ebcc8b2bdc52e9662.svg?style=flat-square)](https://www.codacy.com/public/jasondobry/js-data-angular/dashboard) +[![Dependency Status](https://img.shields.io/gemnasium/js-data/js-data-angular.svg?style=flat-square)](https://gemnasium.com/js-data/js-data-angular) [![Coverage Status](https://img.shields.io/coveralls/js-data/js-data-angular/master.svg?style=flat-square)](https://coveralls.io/r/js-data/js-data-angular?branch=master) [![Codacity](https://img.shields.io/codacy/e7690b906dfa471ebcc8b2bdc52e9662.svg?style=flat-square)](https://www.codacy.com/public/jasondobry/js-data-angular/dashboard) __Supported Platforms:__ @@ -99,6 +99,8 @@ app.controller('postCtrl', function ($scope, $routeParams, Post, Comment) { [CHANGELOG.md](https://github.com/js-data/js-data-angular/blob/master/CHANGELOG.md) ### Community +- [Gitter Channel](https://gitter.im/js-data/js-data) - Better than IRC! +- [Announcements](http://www.js-data.io/blog) - [Mailing List](https://groups.io/org/groupsio/jsdata) - Ask your questions! - [Issues](https://github.com/js-data/js-data-angular/issues) - Found a bug? Feature request? Submit an issue! - [GitHub](https://github.com/js-data/js-data-angular) - View the source code for js-data. diff --git a/bower.json b/bower.json index 4c785fa..5679625 100644 --- a/bower.json +++ b/bower.json @@ -18,20 +18,12 @@ "package.json" ], "devDependencies": { - "angular-1.1.5": "angular-unstable#1.1.5", - "angular-1.2.16": "angular#1.2.16", - "angular-1.2.25": "angular#1.2.25", "angular-1.3.2": "angular#1.3.2", - "angular-mocks-1.1.5": "angular-mocks-unstable#1.1.5", - "angular-mocks-1.2.16": "angular-mocks#1.2.16", - "angular-mocks-1.2.25": "angular-mocks#1.2.25", "angular-mocks-1.3.2": "angular-mocks#1.3.2" }, "dependencies": { - "js-data": ">=1.5.7", + "js-data": ">=2.0.0", + "js-data-http": ">=2.0.0", "angular": ">=1.1.0" - }, - "resolutions": { - "angular": "1.3.2" } } diff --git a/build_examples/browserify/README.md b/build_examples/browserify/README.md new file mode 100644 index 0000000..bac593a --- /dev/null +++ b/build_examples/browserify/README.md @@ -0,0 +1,3 @@ +Running `browserify -x axios app.js > bundle.js` in this directory will produce `bundle.js` + +Note the external dependency "axios" that is excluded from the build (it's not needed when using js-data-angular). diff --git a/build_examples/browserify/app.js b/build_examples/browserify/app.js new file mode 100644 index 0000000..542325e --- /dev/null +++ b/build_examples/browserify/app.js @@ -0,0 +1,17 @@ +// this is what you would do in a real app +// var angular = require('angular'); + +// for the example to work +var angular = require('../../node_modules/angular'); + +console.log(angular); + +angular.module('app', [ + // this is what you would do in a real app + // require('js-data-angular') + + // for the example to work + require('../../dist/js-data-angular.js') +]).run(function (DS, DSVersion, $rootScope) { + $rootScope.test = 'It works! Using js-data ' + DSVersion.full; +}); diff --git a/build_examples/browserify/index.html b/build_examples/browserify/index.html new file mode 100644 index 0000000..9769ccd --- /dev/null +++ b/build_examples/browserify/index.html @@ -0,0 +1,11 @@ + + + + My App + + + + +

{{ test }}

+ + diff --git a/build_examples/r.js/README.md b/build_examples/r.js/README.md new file mode 100644 index 0000000..0632f37 --- /dev/null +++ b/build_examples/r.js/README.md @@ -0,0 +1,3 @@ +Running `r.js -o require.config.js` in this directory will produce `bundle.js` + +In `index.html` switch `script/main` between `main` (load scripts dynamically) and `bundle` (load bundled scripts) diff --git a/build_examples/r.js/app.js b/build_examples/r.js/app.js new file mode 100644 index 0000000..6ead9cf --- /dev/null +++ b/build_examples/r.js/app.js @@ -0,0 +1,9 @@ +define('app', [ + 'angular', + 'js-data-angular' +], function (angular, jsDataModuleName) { + return angular.module('app', [jsDataModuleName]) + .run(function (DS, DSVersion, $rootScope) { + $rootScope.test = 'It works! Using js-data ' + DSVersion.full; + }); +}); diff --git a/build_examples/r.js/index.html b/build_examples/r.js/index.html new file mode 100644 index 0000000..781e49d --- /dev/null +++ b/build_examples/r.js/index.html @@ -0,0 +1,14 @@ + + + + My App + + + + + + + +

{{ test }}

+ + diff --git a/build_examples/r.js/main.js b/build_examples/r.js/main.js new file mode 100644 index 0000000..f3e8fb5 --- /dev/null +++ b/build_examples/r.js/main.js @@ -0,0 +1,23 @@ +require.config({ + paths: { + angular: '../../bower_components/angular/angular', + 'js-data-angular': '../../dist/js-data-angular', + 'js-data': '../../bower_components/js-data/dist/js-data' + }, + shim: { + 'angular': { + exports: 'angular' + } + } +}); + +require([ + 'angular', + 'app' + ], function (angular, app) { + angular.element(document.getElementsByTagName('html')[0]).ready(function () { + // bootstrap the app manually + angular.bootstrap(document, ['app']); + }); + } +); diff --git a/build_examples/r.js/require.config.js b/build_examples/r.js/require.config.js new file mode 100644 index 0000000..a89ae0f --- /dev/null +++ b/build_examples/r.js/require.config.js @@ -0,0 +1,6 @@ +({ + name: 'main', + mainConfigFile: 'main.js', + out: 'bundle.js', + optimize: 'none' +}) diff --git a/build_examples/webpack/README.md b/build_examples/webpack/README.md new file mode 100644 index 0000000..14fa7b9 --- /dev/null +++ b/build_examples/webpack/README.md @@ -0,0 +1,3 @@ +Running `webpack` in this directory will produce `bundle.js` + +Note the external dependency "axios" that is excluded from the build (it's not needed when using js-data-angular). diff --git a/build_examples/webpack/app.js b/build_examples/webpack/app.js new file mode 100644 index 0000000..542325e --- /dev/null +++ b/build_examples/webpack/app.js @@ -0,0 +1,17 @@ +// this is what you would do in a real app +// var angular = require('angular'); + +// for the example to work +var angular = require('../../node_modules/angular'); + +console.log(angular); + +angular.module('app', [ + // this is what you would do in a real app + // require('js-data-angular') + + // for the example to work + require('../../dist/js-data-angular.js') +]).run(function (DS, DSVersion, $rootScope) { + $rootScope.test = 'It works! Using js-data ' + DSVersion.full; +}); diff --git a/build_examples/webpack/index.html b/build_examples/webpack/index.html new file mode 100644 index 0000000..9769ccd --- /dev/null +++ b/build_examples/webpack/index.html @@ -0,0 +1,11 @@ + + + + My App + + + + +

{{ test }}

+ + diff --git a/build_examples/webpack/webpack.config.js b/build_examples/webpack/webpack.config.js new file mode 100644 index 0000000..fc1fbc3 --- /dev/null +++ b/build_examples/webpack/webpack.config.js @@ -0,0 +1,12 @@ +module.exports = { + entry: './app.js', + output: { + filename: 'bundle.js' + }, + externals: ['axios'], + resolve: { + alias: { + 'js-data-angular': '../dist/js-data-angular.js' + } + } +}; diff --git a/build_examples/webpack_es6/README.md b/build_examples/webpack_es6/README.md new file mode 100644 index 0000000..14fa7b9 --- /dev/null +++ b/build_examples/webpack_es6/README.md @@ -0,0 +1,3 @@ +Running `webpack` in this directory will produce `bundle.js` + +Note the external dependency "axios" that is excluded from the build (it's not needed when using js-data-angular). diff --git a/build_examples/webpack_es6/app.js b/build_examples/webpack_es6/app.js new file mode 100644 index 0000000..40c0f8c --- /dev/null +++ b/build_examples/webpack_es6/app.js @@ -0,0 +1,8 @@ +import angular from 'angular'; +import jsDataModuleName from 'js-data-angular'; + +angular.module('app', [ + jsDataModuleName +]).run((DS, DSVersion, $rootScope) => { + $rootScope.test = 'It works! Using js-data ' + DSVersion.full; +}); diff --git a/build_examples/webpack_es6/index.html b/build_examples/webpack_es6/index.html new file mode 100644 index 0000000..9769ccd --- /dev/null +++ b/build_examples/webpack_es6/index.html @@ -0,0 +1,11 @@ + + + + My App + + + + +

{{ test }}

+ + diff --git a/build_examples/webpack_es6/webpack.config.js b/build_examples/webpack_es6/webpack.config.js new file mode 100644 index 0000000..a645ef2 --- /dev/null +++ b/build_examples/webpack_es6/webpack.config.js @@ -0,0 +1,17 @@ +module.exports = { + entry: './app.js', + output: { + filename: 'bundle.js' + }, + externals: ['axios'], + resolve: { + alias: { + 'js-data-angular': '../../dist/js-data-angular.js' + } + }, + module: { + loaders: [ + { test: /(.+)\.js$/, loader: 'babel-loader?blacklist=useStrict' } + ] + } +}; diff --git a/build_examples/webpack_es6_2/README.md b/build_examples/webpack_es6_2/README.md new file mode 100644 index 0000000..14fa7b9 --- /dev/null +++ b/build_examples/webpack_es6_2/README.md @@ -0,0 +1,3 @@ +Running `webpack` in this directory will produce `bundle.js` + +Note the external dependency "axios" that is excluded from the build (it's not needed when using js-data-angular). diff --git a/build_examples/webpack_es6_2/app.js b/build_examples/webpack_es6_2/app.js new file mode 100644 index 0000000..ec74833 --- /dev/null +++ b/build_examples/webpack_es6_2/app.js @@ -0,0 +1,8 @@ +import 'angular'; +import 'js-data-angular'; + +angular.module('app', [ + 'js-data' +]).run((DS, DSVersion, $rootScope) => { + $rootScope.test = 'It works! Using js-data ' + DSVersion.full; +}); diff --git a/build_examples/webpack_es6_2/index.html b/build_examples/webpack_es6_2/index.html new file mode 100644 index 0000000..9769ccd --- /dev/null +++ b/build_examples/webpack_es6_2/index.html @@ -0,0 +1,11 @@ + + + + My App + + + + +

{{ test }}

+ + diff --git a/build_examples/webpack_es6_2/webpack.config.js b/build_examples/webpack_es6_2/webpack.config.js new file mode 100644 index 0000000..a645ef2 --- /dev/null +++ b/build_examples/webpack_es6_2/webpack.config.js @@ -0,0 +1,17 @@ +module.exports = { + entry: './app.js', + output: { + filename: 'bundle.js' + }, + externals: ['axios'], + resolve: { + alias: { + 'js-data-angular': '../../dist/js-data-angular.js' + } + }, + module: { + loaders: [ + { test: /(.+)\.js$/, loader: 'babel-loader?blacklist=useStrict' } + ] + } +}; diff --git a/dist/js-data-angular.js b/dist/js-data-angular.js index bf234d3..988d5ee 100644 --- a/dist/js-data-angular.js +++ b/dist/js-data-angular.js @@ -1,6 +1,6 @@ /*! * js-data-angular - * @version 2.4.0 - Homepage + * @version 3.0.0 - Homepage * @author Jason Dobry * @copyright (c) 2014-2015 Jason Dobry * @license MIT @@ -9,14 +9,16 @@ */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory((function webpackLoadOptionalExternalModule() { try { return require("js-data"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("angular"); } catch(e) {} }())); + module.exports = factory(require("js-data"), require("angular"), (function webpackLoadOptionalExternalModule() { try { return require("axios"); } catch(e) {} }())); else if(typeof define === 'function' && define.amd) - define(["js-data", "angular"], factory); + define(["js-data", "angular"], function webpackLoadOptionalExternalModuleAmd(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { + return factory(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, root["axios"]); + }); else if(typeof exports === 'object') - exports["jsDataAngularModuleName"] = factory((function webpackLoadOptionalExternalModule() { try { return require("js-data"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("angular"); } catch(e) {} }())); + exports["jsDataAngularModuleName"] = factory(require("js-data"), require("angular"), (function webpackLoadOptionalExternalModule() { try { return require("axios"); } catch(e) {} }())); else - root["jsDataAngularModuleName"] = factory(root["JSData"], root["angular"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { + root["jsDataAngularModuleName"] = factory(root["JSData"], root["angular"], root["axios"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_5__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; @@ -63,56 +65,22 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - Object.defineProperty(exports, '__esModule', { - value: true - }); /*jshint loopfunc:true*/ - var angular = undefined, - JSData = undefined; - try { - JSData = __webpack_require__(1); - } catch (e) {} - - if (!JSData) { - try { - JSData = window.JSData; - } catch (e) {} - } - if (!JSData) { - throw new Error('js-data must be loaded!'); - } - try { - angular = __webpack_require__(2); - } catch (e) {} - - if (!angular) { - try { - angular = window.angular; - } catch (e) {} - } - if (!angular) { - throw new Error('angular must be loaded!'); - } + var JSData = __webpack_require__(1); + var DSHttpAdapter = __webpack_require__(4); + var angular = __webpack_require__(2); var DSUtils = JSData.DSUtils; var DSErrors = JSData.DSErrors; - var deepMixIn = DSUtils.deepMixIn; - var copy = DSUtils.copy; - var removeCircular = DSUtils.removeCircular; var isString = DSUtils.isString; var isNumber = DSUtils.isNumber; - var makePath = DSUtils.makePath; - var httpLoaded = false; + var isObject = DSUtils.isObject; + var set = DSUtils.set; + var resolveId = DSUtils.resolveId; var adapters = [{ - project: 'js-data-http', - name: 'http', - 'class': 'DSHttpAdapter' - }, { project: 'js-data-localstorage', name: 'localstorage', 'class': 'DSLocalStorageAdapter' @@ -130,7 +98,7 @@ return /******/ (function(modules) { // webpackBootstrap 'class': 'DSSqlAdapter' }]; - var functionsToWrap = ['compute', 'digest', 'eject', 'inject', 'link', 'linkAll', 'linkInverse', 'unlinkInverse']; + var functionsToWrap = ['compute', 'digest', 'eject', 'inject']; function registerAdapter(adapter) { var Adapter = undefined; @@ -144,9 +112,6 @@ return /******/ (function(modules) { // webpackBootstrap } if (Adapter) { - if (adapter.name === 'http') { - httpLoaded = true; - } adapter.loaded = true; angular.module('js-data').provider(adapter['class'], function () { var _this = this; @@ -158,6 +123,20 @@ return /******/ (function(modules) { // webpackBootstrap } } + var DSHttpAdapterProvider = function DSHttpAdapterProvider() { + _classCallCheck(this, DSHttpAdapterProvider); + + var defaults = {}; + this.defaults = defaults; + + this.$get = ['$http', 'DS', function ($http, DS) { + defaults.http = defaults.http || $http; + var adapter = new DSHttpAdapter(defaults); + DS.registerAdapter('http', adapter, { 'default': true }); + return adapter; + }]; + }; + var DSProvider = function DSProvider() { _classCallCheck(this, DSProvider); @@ -179,11 +158,11 @@ return /******/ (function(modules) { // webpackBootstrap if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); - } else if (!DSUtils.isObject(params)) { + } else if (!isObject(params)) { throw new DSErrors.IA('"params" must be an object!'); - } else if (!DSUtils.isObject(scope)) { + } else if (!isObject(scope)) { throw new DSErrors.IA('"scope" must be an object!'); - } else if (!DSUtils.isString(expr)) { + } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } @@ -192,7 +171,7 @@ return /******/ (function(modules) { // webpackBootstrap return _this.lastModified(resourceName); }, function () { var items = _this.filter(resourceName, params); - DSUtils.set(scope, expr, items); + set(scope, expr, items); if (cb) { cb(null, items); } @@ -209,14 +188,14 @@ return /******/ (function(modules) { // webpackBootstrap JSData.DS.prototype.bindOne = function (resourceName, id, scope, expr, cb) { var _this = this; - id = DSUtils.resolveId(_this.definitions[resourceName], id); + id = resolveId(_this.definitions[resourceName], id); if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); - } else if (!DSUtils.isString(id) && !DSUtils.isNumber(id)) { + } else if (!isString(id) && !isNumber(id)) { throw new DSErrors.IA('"id" must be a string or a number!'); - } else if (!DSUtils.isObject(scope)) { + } else if (!isObject(scope)) { throw new DSErrors.IA('"scope" must be an object!'); - } else if (!DSUtils.isString(expr)) { + } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } @@ -228,7 +207,7 @@ return /******/ (function(modules) { // webpackBootstrap if (item) { _this.compute(resourceName, id); } - DSUtils.set(scope, expr, item); + set(scope, expr, item); if (cb) { cb(null, item); } @@ -322,300 +301,28 @@ return /******/ (function(modules) { // webpackBootstrap _this.$get = deps; }; - angular.module('js-data', ['ng']).value('DSUtils', JSData.DSUtils).value('DSErrors', JSData.DSErrors).provider('DS', DSProvider); + angular.module('js-data', ['ng']).value('DSUtils', DSUtils).value('DSErrors', DSErrors).value('DSVersion', JSData.version).provider('DS', DSProvider).provider('DSHttpAdapter', DSHttpAdapterProvider).run(['DS', 'DSHttpAdapter', function (DS, DSHttpAdapter) { + DS.registerAdapter('http', DSHttpAdapter, { 'default': true }); + }]); for (var i = 0; i < adapters.length; i++) { registerAdapter(adapters[i]); } - if (!httpLoaded) { - (function () { - var Defaults = (function () { - function Defaults() { - _classCallCheck(this, Defaults); - } - - _createClass(Defaults, [{ - key: 'queryTransform', - value: function queryTransform(resourceConfig, params) { - return params; - } - }, { - key: 'deserialize', - value: function deserialize(resourceConfig, data) { - return data ? 'data' in data ? data.data : data : data; - } - }, { - key: 'serialize', - value: function serialize(resourceConfig, data) { - return data; - } - }, { - key: 'log', - value: function log() {} - }, { - key: 'error', - value: function error() {} - }]); - - return Defaults; - })(); - - var defaultsPrototype = Defaults.prototype; - - defaultsPrototype.basePath = ''; - - defaultsPrototype.forceTrailingSlash = ''; - - defaultsPrototype.httpConfig = {}; - - var DSHttpAdapter = (function () { - function DSHttpAdapter(options) { - _classCallCheck(this, DSHttpAdapter); - - this.defaults = new Defaults(); - if (console) { - this.defaults.log = function (a, b) { - return console[typeof console.info === 'function' ? 'info' : 'log'](a, b); - }; - } - if (console) { - this.defaults.error = function (a, b) { - return console[typeof console.error === 'function' ? 'error' : 'log'](a, b); - }; - } - deepMixIn(this.defaults, options); - } - - _createClass(DSHttpAdapter, [{ - key: 'getPath', - value: function getPath(method, resourceConfig, id, options) { - var _this = this; - options = options || {}; - var args = [options.basePath || _this.defaults.basePath || resourceConfig.basePath, resourceConfig.getEndpoint(isString(id) || isNumber(id) || method === 'create' ? id : null, options)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(DSUtils, args); - } - }, { - key: 'GET', - value: function GET(url, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'get'; - } - return this.HTTP(deepMixIn(config, { - url: url - })); - } - }, { - key: 'POST', - value: function POST(url, attrs, config) { - config = config || {}; - config = DSUtils.copy(config); - if (!('method' in config)) { - config.method = 'post'; - } - return this.HTTP(deepMixIn(config, { - url: url, - data: attrs - })); - } - }, { - key: 'PUT', - value: function PUT(url, attrs, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'put'; - } - return this.HTTP(deepMixIn(config, { - url: url, - data: attrs || {} - })); - } - }, { - key: 'DEL', - value: function DEL(url, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'delete'; - } - return this.HTTP(deepMixIn(config, { - url: url - })); - } - }, { - key: 'find', - value: function find(resourceConfig, id, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.GET(_this.getPath('find', resourceConfig, id, options), options).then(function (data) { - var item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - return !item ? JSData.DSUtils.Promise.reject(new Error('Not Found!')) : item; - }); - } - }, { - key: 'findAll', - value: function findAll(resourceConfig, params, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return _this.GET(_this.getPath('findAll', resourceConfig, params, options), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }, { - key: 'create', - value: function create(resourceConfig, attrs, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.POST(_this.getPath('create', resourceConfig, attrs, options), (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }, { - key: 'update', - value: function update(resourceConfig, id, attrs, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.PUT(_this.getPath('update', resourceConfig, id, options), (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }, { - key: 'updateAll', - value: function updateAll(resourceConfig, attrs, params, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return this.PUT(_this.getPath('updateAll', resourceConfig, attrs, options), (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }, { - key: 'destroy', - value: function destroy(resourceConfig, id, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.DEL(_this.getPath('destroy', resourceConfig, id, options), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }, { - key: 'destroyAll', - value: function destroyAll(resourceConfig, params, options) { - var _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return this.DEL(_this.getPath('destroyAll', resourceConfig, params, options), options).then(function (data) { - return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - }); - } - }]); - - return DSHttpAdapter; - })(); - - var dsHttpAdapterPrototype = DSHttpAdapter.prototype; - - var DSHttpAdapterProvider = function DSHttpAdapterProvider() { - _classCallCheck(this, DSHttpAdapterProvider); - - var _this = this; - _this.defaults = {}; - _this.$get = ['$http', 'DS', '$q', function ($http, DS, $q) { - dsHttpAdapterPrototype.HTTP = function (config) { - var _this = this; - var start = new Date(); - config = copy(config); - config = deepMixIn(config, _this.defaults.httpConfig); - if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - if (typeof config.data === 'object') { - config.data = removeCircular(config.data); - } - var suffix = config.suffix || _this.defaults.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - - function logResponse(data) { - var str = '' + start.toUTCString() + ' - ' + data.config.method.toUpperCase() + ' ' + data.config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (_this.defaults.log) { - _this.defaults.log(str, data); - } - return data; - } else { - if (_this.defaults.error) { - _this.defaults.error('FAILED: ' + str, data); - } - return $q.reject(data); - } - } - - return $http(config).then(logResponse, logResponse); - }; - - var adapter = new DSHttpAdapter(_this.defaults); - DS.registerAdapter('http', adapter, { 'default': true }); - return adapter; - }]; - }; - - angular.module('js-data').provider('DSHttpAdapter', DSHttpAdapterProvider); - })(); - } - angular.module('js-data').run(['DS', 'DSHttpAdapter', function (DS, DSHttpAdapter) { - return DS.registerAdapter('http', DSHttpAdapter, { 'default': true }); - }]); - // return the module name - exports['default'] = 'js-data'; - module.exports = exports['default']; + module.exports = 'js-data'; + module.exports.name = 'js-data'; /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { - if(typeof __WEBPACK_EXTERNAL_MODULE_1__ === 'undefined') {var e = new Error("Cannot find module \"undefined\""); e.code = 'MODULE_NOT_FOUND'; throw e;} module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { - if(typeof __WEBPACK_EXTERNAL_MODULE_2__ === 'undefined') {var e = new Error("Cannot find module \"angular\""); e.code = 'MODULE_NOT_FOUND'; throw e;} module.exports = __WEBPACK_EXTERNAL_MODULE_2__; /***/ }, @@ -637,6 +344,343 @@ return /******/ (function(modules) { // webpackBootstrap webpackContext.id = 3; +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var JSData = __webpack_require__(1); + var axios = null; + + try { + axios = __webpack_require__(5); + } catch (e) {} + + var DSUtils = JSData.DSUtils; + var deepMixIn = DSUtils.deepMixIn; + var removeCircular = DSUtils.removeCircular; + var copy = DSUtils.copy; + var makePath = DSUtils.makePath; + var isString = DSUtils.isString; + var isNumber = DSUtils.isNumber; + + var Defaults = (function () { + function Defaults() { + _classCallCheck(this, Defaults); + } + + _createClass(Defaults, [{ + key: 'queryTransform', + value: function queryTransform(resourceConfig, params) { + return params; + } + }, { + key: 'deserialize', + value: function deserialize(resourceConfig, data) { + return data ? 'data' in data ? data.data : data : data; + } + }, { + key: 'serialize', + value: function serialize(resourceConfig, data) { + return data; + } + }, { + key: 'log', + value: function log() {} + }, { + key: 'error', + value: function error() {} + }]); + + return Defaults; + })(); + + var defaultsPrototype = Defaults.prototype; + + defaultsPrototype.basePath = ''; + + defaultsPrototype.forceTrailingSlash = ''; + + defaultsPrototype.httpConfig = {}; + + var DSHttpAdapter = (function () { + function DSHttpAdapter(options) { + _classCallCheck(this, DSHttpAdapter); + + this.defaults = new Defaults(); + if (console) { + this.defaults.log = function (a, b) { + return console[typeof console.info === 'function' ? 'info' : 'log'](a, b); + }; + } + if (console) { + this.defaults.error = function (a, b) { + return console[typeof console.error === 'function' ? 'error' : 'log'](a, b); + }; + } + deepMixIn(this.defaults, options); + this.http = options.http || axios; + } + + _createClass(DSHttpAdapter, [{ + key: 'getEndpoint', + value: function getEndpoint(resourceConfig, id, options) { + var _this2 = this; + + options = options || {}; + options.params = options.params || {}; + + var item = undefined; + var parentKey = resourceConfig.parentKey; + var endpoint = options.hasOwnProperty('endpoint') ? options.endpoint : resourceConfig.endpoint; + var parentField = resourceConfig.parentField; + var parentDef = resourceConfig.getResource(resourceConfig.parent); + var parentId = options.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete options.params[parentKey]; + } + return endpoint; + } else { + delete options.params[parentKey]; + + if (DSUtils._sn(id)) { + item = resourceConfig.get(id); + } else if (DSUtils._o(id)) { + item = id; + } + + if (item) { + parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); + } + + if (parentId) { + var _ret = (function () { + delete options.endpoint; + var _options = {}; + DSUtils.forOwn(options, function (value, key) { + _options[key] = value; + }); + return { + v: DSUtils.makePath(_this2.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint) + }; + })(); + + if (typeof _ret === 'object') return _ret.v; + } else { + return endpoint; + } + } + } + }, { + key: 'getPath', + value: function getPath(method, resourceConfig, id, options) { + var _this = this; + options = options || {}; + var args = [options.basePath || _this.defaults.basePath || resourceConfig.basePath, this.getEndpoint(resourceConfig, isString(id) || isNumber(id) || method === 'create' ? id : null, options)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(DSUtils, args); + } + }, { + key: 'HTTP', + value: function HTTP(config) { + var _this = this; + var start = new Date(); + config = copy(config); + config = deepMixIn(config, _this.defaults.httpConfig); + if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + if (typeof config.data === 'object') { + config.data = removeCircular(config.data); + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || _this.defaults.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + data.config.method.toUpperCase() + ' ' + data.config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (_this.defaults.log) { + _this.defaults.log(str, data); + } + return data; + } else { + if (_this.defaults.error) { + _this.defaults.error('\'FAILED: ' + str, data); + } + return DSUtils.Promise.reject(data); + } + } + + if (!this.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return this.http(config).then(logResponse, logResponse); + } + }, { + key: 'GET', + value: function GET(url, config) { + config = config || {}; + if (!('method' in config)) { + config.method = 'get'; + } + return this.HTTP(deepMixIn(config, { + url: url + })); + } + }, { + key: 'POST', + value: function POST(url, attrs, config) { + config = config || {}; + if (!('method' in config)) { + config.method = 'post'; + } + return this.HTTP(deepMixIn(config, { + url: url, + data: attrs + })); + } + }, { + key: 'PUT', + value: function PUT(url, attrs, config) { + config = config || {}; + if (!('method' in config)) { + config.method = 'put'; + } + return this.HTTP(deepMixIn(config, { + url: url, + data: attrs || {} + })); + } + }, { + key: 'DEL', + value: function DEL(url, config) { + config = config || {}; + if (!('method' in config)) { + config.method = 'delete'; + } + return this.HTTP(deepMixIn(config, { + url: url + })); + } + }, { + key: 'find', + value: function find(resourceConfig, id, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + options.params = _this.defaults.queryTransform(resourceConfig, options.params); + return _this.GET(_this.getPath('find', resourceConfig, id, options), options).then(function (data) { + var item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + return !item ? DSUtils.Promise.reject(new Error('Not Found!')) : item; + }); + } + }, { + key: 'findAll', + value: function findAll(resourceConfig, params, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + if (params) { + params = _this.defaults.queryTransform(resourceConfig, params); + deepMixIn(options.params, params); + } + return _this.GET(_this.getPath('findAll', resourceConfig, params, options), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }, { + key: 'create', + value: function create(resourceConfig, attrs, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + options.params = _this.defaults.queryTransform(resourceConfig, options.params); + return _this.POST(_this.getPath('create', resourceConfig, attrs, options), options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }, { + key: 'update', + value: function update(resourceConfig, id, attrs, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + options.params = _this.defaults.queryTransform(resourceConfig, options.params); + return _this.PUT(_this.getPath('update', resourceConfig, id, options), options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }, { + key: 'updateAll', + value: function updateAll(resourceConfig, attrs, params, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + if (params) { + params = _this.defaults.queryTransform(resourceConfig, params); + deepMixIn(options.params, params); + } + return this.PUT(_this.getPath('updateAll', resourceConfig, attrs, options), options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }, { + key: 'destroy', + value: function destroy(resourceConfig, id, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + options.params = _this.defaults.queryTransform(resourceConfig, options.params); + return _this.DEL(_this.getPath('destroy', resourceConfig, id, options), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }, { + key: 'destroyAll', + value: function destroyAll(resourceConfig, params, options) { + var _this = this; + options = options ? copy(options) : {}; + options.suffix = options.suffix || resourceConfig.suffix; + options.params = options.params || {}; + if (params) { + params = _this.defaults.queryTransform(resourceConfig, params); + deepMixIn(options.params, params); + } + return this.DEL(_this.getPath('destroyAll', resourceConfig, params, options), options).then(function (data) { + return (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); + }); + } + }]); + + return DSHttpAdapter; + })(); + + module.exports = DSHttpAdapter; + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + if(typeof __WEBPACK_EXTERNAL_MODULE_5__ === 'undefined') {var e = new Error("Cannot find module \"axios\""); e.code = 'MODULE_NOT_FOUND'; throw e;} + module.exports = __WEBPACK_EXTERNAL_MODULE_5__; + /***/ } /******/ ]) }); diff --git a/dist/js-data-angular.min.js b/dist/js-data-angular.min.js index e88c1b2..1d88e7c 100644 --- a/dist/js-data-angular.min.js +++ b/dist/js-data-angular.min.js @@ -1,6 +1,6 @@ /*! * js-data-angular -* @version 2.4.0 - Homepage +* @version 3.0.0 - Homepage * @author Jason Dobry * @copyright (c) 2014-2015 Jason Dobry * @license MIT @@ -8,5 +8,5 @@ * @overview Angular wrapper for js-data. */ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b(function(){try{return require("js-data")}catch(a){}}(),function(){try{return require("angular")}catch(a){}}()):"function"==typeof define&&define.amd?define(["js-data","angular"],b):"object"==typeof exports?exports.jsDataAngularModuleName=b(function(){try{return require("js-data")}catch(a){}}(),function(){try{return require("angular")}catch(a){}}()):a.jsDataAngularModuleName=b(a.JSData,a.angular)}(this,function(a,b){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a){var b=void 0;try{b=c(3)(a.project)}catch(d){}b||(b=window[a["class"]]),b&&("http"===a.name&&(r=!0),a.loaded=!0,g.module("js-data").provider(a["class"],function(){var a=this;a.defaults={},a.$get=[function(){return new b(a.defaults)}]}))}var e=function(){function a(a,b){for(var c=0;ce;e++)d[e]=arguments[e];var f=d[d.length-2],i=d[d.length-1],k=new h.DS(b.defaults),l={};if(a.all=i.all,a.when=i.when,a.reject=i.reject,j.Promise=a,d.length)for(var m=0;md;d++)c[d]=arguments[d];return f.$$phase?l[a].apply(k,c):f.$apply(function(){return l[a].apply(k,c)})}},p=0;p=200&&a.status<300?(d.defaults.log&&d.defaults.log(b,a),a):(d.defaults.error&&d.defaults.error("FAILED: "+b,a),f.reject(a))}var d=this,e=new Date;a=m(a),a=l(a,d.defaults.httpConfig),d.defaults.forceTrailingSlash&&"/"!==a.url[a.url.length-1]&&(a.url+="/"),a.method=a.method.toUpperCase(),"object"==typeof a.data&&(a.data=n(a.data));var g=a.suffix||d.defaults.suffix;return g&&a.url.substr(a.url.length-g.length)!==g&&(a.url+=g),b(a).then(c,c)};var g=new c(a.defaults);return e.registerAdapter("http",g,{"default":!0}),g}]};g.module("js-data").provider("DSHttpAdapter",i)}(),g.module("js-data").run(["DS","DSHttpAdapter",function(a,b){return a.registerAdapter("http",b,{"default":!0})}]),b["default"]="js-data",a.exports=b["default"]},function(b,c,d){if("undefined"==typeof a){var e=new Error('Cannot find module "undefined"');throw e.code="MODULE_NOT_FOUND",e}b.exports=a},function(a,c,d){if("undefined"==typeof b){var e=new Error('Cannot find module "angular"');throw e.code="MODULE_NOT_FOUND",e}a.exports=b},function(a,b,c){function d(a){return c(e(a))}function e(a){return f[a]||function(){throw new Error("Cannot find module '"+a+"'.")}()}var f={};d.keys=function(){return Object.keys(f)},d.resolve=e,a.exports=d,d.id=3}])}); +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b(require("js-data"),require("angular"),function(){try{return require("axios")}catch(a){}}()):"function"==typeof define&&define.amd?define(["js-data","angular"],function(c,d){return b(c,d,a.axios)}):"object"==typeof exports?exports.jsDataAngularModuleName=b(require("js-data"),require("angular"),function(){try{return require("axios")}catch(a){}}()):a.jsDataAngularModuleName=b(a.JSData,a.angular,a.axios)}(this,function(a,b,c){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a){var b=void 0;try{b=c(3)(a.project)}catch(d){}b||(b=window[a["class"]]),b&&(a.loaded=!0,h.module("js-data").provider(a["class"],function(){var a=this;a.defaults={},a.$get=[function(){return new b(a.defaults)}]}))}var f=c(1),g=c(4),h=c(2),i=f.DSUtils,j=f.DSErrors,k=i.isString,l=i.isNumber,m=i.isObject,n=i.set,o=i.resolveId,p=[{project:"js-data-localstorage",name:"localstorage","class":"DSLocalStorageAdapter"},{project:"js-data-localforage",name:"localforage","class":"DSLocalForageAdapter"},{project:"js-data-firebase",name:"firebase","class":"DSFirebaseAdapter"},{project:"js-data-sql",name:"sql","class":"DSSqlAdapter"}],q=["compute","digest","eject","inject"],r=function u(){d(this,u);var a={};this.defaults=a,this.$get=["$http","DS",function(b,c){a.http=a.http||b;var d=new g(a);return c.registerAdapter("http",d,{"default":!0}),d}]},s=function v(){function a(){function a(a){var b=j.defer();try{a.call(void 0,h.bind(b,b.resolve),h.bind(b,b.reject))}catch(c){b.reject(c)}return b.promise}for(var c=arguments.length,d=Array(c),e=0;c>e;e++)d[e]=arguments[e];var g=d[d.length-2],j=d[d.length-1],k=new f.DS(b.defaults),l={};if(a.all=j.all,a.when=j.when,a.reject=j.reject,i.Promise=a,d.length)for(var m=0;md;d++)c[d]=arguments[d];return g.$$phase?l[a].apply(k,c):g.$apply(function(){return l[a].apply(k,c)})}},r=0;r=200&&a.status<300?(c.defaults.log&&c.defaults.log(b,a),a):(c.defaults.error&&c.defaults.error("'FAILED: "+b,a),i.Promise.reject(a))}var c=this,d=new Date;a=l(a),a=j(a,c.defaults.httpConfig),c.defaults.forceTrailingSlash&&"/"!==a.url[a.url.length-1]&&(a.url+="/"),"object"==typeof a.data&&(a.data=k(a.data)),a.method=a.method.toUpperCase();var e=a.suffix||c.defaults.suffix;if(e&&a.url.substr(a.url.length-e.length)!==e&&(a.url+=e),!this.http)throw new Error("You have not configured this adapter with an http library!");return this.http(a).then(b,b)}},{key:"GET",value:function(a,b){return b=b||{},"method"in b||(b.method="get"),this.HTTP(j(b,{url:a}))}},{key:"POST",value:function(a,b,c){return c=c||{},"method"in c||(c.method="post"),this.HTTP(j(c,{url:a,data:b}))}},{key:"PUT",value:function(a,b,c){return c=c||{},"method"in c||(c.method="put"),this.HTTP(j(c,{url:a,data:b||{}}))}},{key:"DEL",value:function(a,b){return b=b||{},"method"in b||(b.method="delete"),this.HTTP(j(b,{url:a}))}},{key:"find",value:function(a,b,c){var d=this;return c=c?l(c):{},c.suffix=c.suffix||a.suffix,c.params=c.params||{},c.params=d.defaults.queryTransform(a,c.params),d.GET(d.getPath("find",a,b,c),c).then(function(b){var e=(c.deserialize?c.deserialize:d.defaults.deserialize)(a,b);return e?e:i.Promise.reject(new Error("Not Found!"))})}},{key:"findAll",value:function(a,b,c){var d=this;return c=c?l(c):{},c.suffix=c.suffix||a.suffix,c.params=c.params||{},b&&(b=d.defaults.queryTransform(a,b),j(c.params,b)),d.GET(d.getPath("findAll",a,b,c),c).then(function(b){return(c.deserialize?c.deserialize:d.defaults.deserialize)(a,b)})}},{key:"create",value:function(a,b,c){var d=this;return c=c?l(c):{},c.suffix=c.suffix||a.suffix,c.params=c.params||{},c.params=d.defaults.queryTransform(a,c.params),d.POST(d.getPath("create",a,b,c),c.serialize?c.serialize(a,b):d.defaults.serialize(a,b),c).then(function(b){return(c.deserialize?c.deserialize:d.defaults.deserialize)(a,b)})}},{key:"update",value:function(a,b,c,d){var e=this;return d=d?l(d):{},d.suffix=d.suffix||a.suffix,d.params=d.params||{},d.params=e.defaults.queryTransform(a,d.params),e.PUT(e.getPath("update",a,b,d),d.serialize?d.serialize(a,c):e.defaults.serialize(a,c),d).then(function(b){return(d.deserialize?d.deserialize:e.defaults.deserialize)(a,b)})}},{key:"updateAll",value:function(a,b,c,d){var e=this;return d=d?l(d):{},d.suffix=d.suffix||a.suffix,d.params=d.params||{},c&&(c=e.defaults.queryTransform(a,c),j(d.params,c)),this.PUT(e.getPath("updateAll",a,b,d),d.serialize?d.serialize(a,b):e.defaults.serialize(a,b),d).then(function(b){return(d.deserialize?d.deserialize:e.defaults.deserialize)(a,b)})}},{key:"destroy",value:function(a,b,c){var d=this;return c=c?l(c):{},c.suffix=c.suffix||a.suffix,c.params=c.params||{},c.params=d.defaults.queryTransform(a,c.params),d.DEL(d.getPath("destroy",a,b,c),c).then(function(b){return(c.deserialize?c.deserialize:d.defaults.deserialize)(a,b)})}},{key:"destroyAll",value:function(a,b,c){var d=this;return c=c?l(c):{},c.suffix=c.suffix||a.suffix,c.params=c.params||{},b&&(b=d.defaults.queryTransform(a,b),j(c.params,b)),this.DEL(d.getPath("destroyAll",a,b,c),c).then(function(b){return(c.deserialize?c.deserialize:d.defaults.deserialize)(a,b)})}}]),a}();a.exports=r},function(a,b,d){if("undefined"==typeof c){var e=new Error('Cannot find module "axios"');throw e.code="MODULE_NOT_FOUND",e}a.exports=c}])}); //# sourceMappingURL=js-data-angular.min.map \ No newline at end of file diff --git a/dist/js-data-angular.min.map b/dist/js-data-angular.min.map index b182301..5a5833b 100644 --- a/dist/js-data-angular.min.map +++ b/dist/js-data-angular.min.map @@ -1 +1 @@ -{"version":3,"file":"js-data-angular.min.js","sources":["js-data-angular.js"],"names":["root","factory","exports","module","require","e","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_2__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","registerAdapter","adapter","Adapter","undefined","project","window","name","httpLoaded","angular","provider","_this","defaults","$get","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","_classCallCheck","instance","TypeError","value","JSData","Error","DSUtils","DSErrors","deepMixIn","copy","removeCircular","isString","isNumber","makePath","adapters","class","functionsToWrap","DSProvider","load","QPromise","executor","deferred","$q","defer","bind","resolve","reject","err","promise","_len","arguments","args","Array","_key","$rootScope","store","DS","originals","all","when","Promise","j","registered","_loop","k","_len2","_key2","$$phase","apply","$apply","observe","$watch","Platform","performMicrotaskCheckpoint","deps","push","bindAll","resourceName","params","scope","expr","cb","definitions","NER","isObject","IA","lastModified","items","filter","set","bindOne","resolveId","item","get","compute","Defaults","resourceConfig","data","defaultsPrototype","basePath","forceTrailingSlash","httpConfig","DSHttpAdapter","options","console","log","a","b","info","error","method","getEndpoint","url","config","HTTP","attrs","suffix","queryTransform","GET","getPath","then","deserialize","POST","serialize","PUT","DEL","dsHttpAdapterPrototype","DSHttpAdapterProvider","$http","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","substr","default","run","code","webpackContext","req","webpackContextResolve","map","keys"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-angular.min.js","sources":["js-data-angular.js"],"names":["root","factory","exports","module","require","e","define","amd","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_2__","this","__WEBPACK_EXTERNAL_MODULE_5__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_classCallCheck","instance","Constructor","TypeError","registerAdapter","adapter","Adapter","undefined","project","window","angular","provider","_this","defaults","$get","JSData","DSHttpAdapter","DSUtils","DSErrors","isString","isNumber","isObject","set","resolveId","adapters","name","class","functionsToWrap","DSHttpAdapterProvider","$http","DS","http","default","DSProvider","load","QPromise","executor","deferred","$q","defer","bind","resolve","reject","err","promise","_len","arguments","length","args","Array","_key","$rootScope","store","originals","all","when","Promise","i","j","registered","_loop","k","_len2","_key2","$$phase","apply","$apply","Object","observe","$watch","Platform","performMicrotaskCheckpoint","deps","push","prototype","bindAll","resourceName","params","scope","expr","cb","definitions","NER","IA","lastModified","items","filter","bindOne","item","get","compute","value","version","run","webpackContext","req","webpackContextResolve","map","Error","keys","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","axios","deepMixIn","removeCircular","copy","makePath","Defaults","resourceConfig","data","defaultsPrototype","basePath","forceTrailingSlash","httpConfig","options","console","log","a","b","info","error","_this2","parentKey","endpoint","hasOwnProperty","parentField","parentDef","getResource","parent","parentId","_sn","_o","idAttribute","_ret","_options","forOwn","v","getEndpoint","_","method","config","logResponse","str","start","toUTCString","toUpperCase","url","status","Date","getTime","suffix","substr","then","HTTP","attrs","queryTransform","GET","getPath","deserialize","POST","serialize","PUT","DEL","code"],"mappings":"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"} \ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js index 6e57fb6..43b6ffc 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -23,7 +23,7 @@ module.exports = function (config) { files: [ 'bower_components/angular-1.3.2/angular.js', 'bower_components/angular-mocks-1.3.2/angular-mocks.js', - 'bower_components/js-data/dist/js-data.js', + 'node_modules/js-data/dist/js-data.js', 'dist/js-data-angular.js', 'karma.start.js', 'test/**/*.js' diff --git a/karma.start.js b/karma.start.js index 7e9176c..1054600 100644 --- a/karma.start.js +++ b/karma.start.js @@ -80,7 +80,7 @@ beforeEach(function () { lifecycle.beforeInject = function () { lifecycle.beforeInject.callCount += 1; }; - lifecycle.afterInject = function () { + lifecycle.afterInject = function (resource, data) { lifecycle.afterInject.callCount += 1; }; lifecycle.serialize = function (resourceName, data) { diff --git a/package.json b/package.json index 7103743..a347d37 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "js-data-angular", "description": "Angular wrapper for js-data.", - "version": "2.4.0", + "version": "3.0.0", "homepage": "http://www.js-data.io/docs/js-data-angular", "repository": { "type": "git", @@ -20,37 +20,38 @@ ], "main": "dist/js-data-angular.js", "devDependencies": { - "babel-core": "5.1.9", - "babel-loader": "5.0.0", + "babel-core": "5.6.15", + "babel-loader": "5.2.2", "grunt": "0.4.5", "grunt-contrib-clean": "0.6.0", "grunt-contrib-uglify": "0.9.1", "grunt-contrib-watch": "0.6.1", - "grunt-karma": "0.10.1", + "grunt-karma": "0.11.2", "grunt-karma-coveralls": "2.5.3", - "grunt-webpack": "1.0.8", + "grunt-webpack": "1.0.11", "jit-grunt": "0.9.1", - "jshint": "2.7.0", "jshint-loader": "0.8.3", - "karma": "0.12.31", + "karma": "0.12.37", "karma-chai": "0.1.0", - "karma-chrome-launcher": "0.1.7", - "karma-coverage": "0.2.7", - "karma-firefox-launcher": "0.1.4", - "karma-mocha": "0.1.10", - "karma-phantomjs-launcher": "0.1.4", + "karma-chrome-launcher": "0.2.0", + "karma-coverage": "0.4.2", + "karma-firefox-launcher": "0.1.6", + "karma-mocha": "0.2.0", + "karma-phantomjs-launcher": "0.2.0", "karma-script-launcher": "0.1.0", "karma-sinon": "1.0.4", - "karma-spec-reporter": "0.0.18", - "time-grunt": "1.1.0", - "webpack": "1.8.4", - "webpack-dev-server": "1.8.0" + "karma-spec-reporter": "0.0.19", + "time-grunt": "1.2.1", + "webpack-dev-server": "1.10.1" }, "scripts": { "test": "grunt test" }, "peerDependencies": { "angular": ">=1.1.0", - "js-data": ">=1.5.7" + "js-data": ">=2.0.0" + }, + "dependencies": { + "js-data-http": ">=2.0.0" } } diff --git a/src/index.js b/src/index.js index c8ab825..b8040b6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,50 +1,12 @@ /*jshint loopfunc:true*/ -let angular, JSData; -try { - JSData = require('js-data'); -} catch (e) { -} +let JSData = require('js-data'); +let DSHttpAdapter = require('../node_modules/js-data-http/src/index.js'); +let angular = require('angular'); -if (!JSData) { - try { - JSData = window.JSData; - } catch (e) { - } -} -if (!JSData) { - throw new Error('js-data must be loaded!'); -} -try { - angular = require('angular'); -} catch (e) { -} - -if (!angular) { - try { - angular = window.angular; - } catch (e) { - } -} -if (!angular) { - throw new Error('angular must be loaded!'); -} - -let DSUtils = JSData.DSUtils; -let DSErrors = JSData.DSErrors; -let deepMixIn = DSUtils.deepMixIn; -let copy = DSUtils.copy; -let removeCircular = DSUtils.removeCircular; -let isString = DSUtils.isString; -let isNumber = DSUtils.isNumber; -let makePath = DSUtils.makePath; -let httpLoaded = false; +let { DSUtils, DSErrors } = JSData; +let { isString, isNumber, isObject, set, resolveId } = DSUtils; let adapters = [ - { - project: 'js-data-http', - name: 'http', - 'class': 'DSHttpAdapter' - }, { project: 'js-data-localstorage', name: 'localstorage', @@ -71,11 +33,7 @@ let functionsToWrap = [ 'compute', 'digest', 'eject', - 'inject', - 'link', - 'linkAll', - 'linkInverse', - 'unlinkInverse' + 'inject' ]; function registerAdapter(adapter) { @@ -92,9 +50,6 @@ function registerAdapter(adapter) { } if (Adapter) { - if (adapter.name === 'http') { - httpLoaded = true; - } adapter.loaded = true; angular.module('js-data').provider(adapter.class, function () { let _this = this; @@ -104,6 +59,20 @@ function registerAdapter(adapter) { } } +class DSHttpAdapterProvider { + constructor() { + let defaults = {}; + this.defaults = defaults; + + this.$get = ['$http', 'DS', ($http, DS) => { + defaults.http = defaults.http || $http; + let adapter = new DSHttpAdapter(defaults); + DS.registerAdapter('http', adapter, { 'default': true }); + return adapter; + }]; + } +} + class DSProvider { constructor() { let _this = this; @@ -124,18 +93,18 @@ class DSProvider { if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); - } else if (!DSUtils.isObject(params)) { + } else if (!isObject(params)) { throw new DSErrors.IA('"params" must be an object!'); - } else if (!DSUtils.isObject(scope)) { + } else if (!isObject(scope)) { throw new DSErrors.IA('"scope" must be an object!'); - } else if (!DSUtils.isString(expr)) { + } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } try { return scope.$watch(() => _this.lastModified(resourceName), () => { let items = _this.filter(resourceName, params); - DSUtils.set(scope, expr, items); + set(scope, expr, items); if (cb) { cb(null, items); } @@ -152,14 +121,14 @@ class DSProvider { JSData.DS.prototype.bindOne = function (resourceName, id, scope, expr, cb) { let _this = this; - id = DSUtils.resolveId(_this.definitions[resourceName], id); + id = resolveId(_this.definitions[resourceName], id); if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); - } else if (!DSUtils.isString(id) && !DSUtils.isNumber(id)) { + } else if (!isString(id) && !isNumber(id)) { throw new DSErrors.IA('"id" must be a string or a number!'); - } else if (!DSUtils.isObject(scope)) { + } else if (!isObject(scope)) { throw new DSErrors.IA('"scope" must be an object!'); - } else if (!DSUtils.isString(expr)) { + } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } @@ -169,7 +138,7 @@ class DSProvider { if (item) { _this.compute(resourceName, id); } - DSUtils.set(scope, expr, item); + set(scope, expr, item); if (cb) { cb(null, item); } @@ -250,265 +219,20 @@ class DSProvider { } } angular.module('js-data', ['ng']) - .value('DSUtils', JSData.DSUtils) - .value('DSErrors', JSData.DSErrors) - .provider('DS', DSProvider); + .value('DSUtils', DSUtils) + .value('DSErrors', DSErrors) + .value('DSVersion', JSData.version) + .provider('DS', DSProvider) + .provider('DSHttpAdapter', DSHttpAdapterProvider) + .run(['DS', 'DSHttpAdapter', (DS, DSHttpAdapter) => { + DS.registerAdapter('http', DSHttpAdapter, { 'default': true }); + }]); for (var i = 0; i < adapters.length; i++) { registerAdapter(adapters[i]); } -if (!httpLoaded) { - - class Defaults { - queryTransform(resourceConfig, params) { - return params; - } - - deserialize(resourceConfig, data) { - return data ? ('data' in data ? data.data : data) : data; - } - - serialize(resourceConfig, data) { - return data; - } - - log() { - - } - - error() { - - } - } - let defaultsPrototype = Defaults.prototype; - - defaultsPrototype.basePath = ''; - - defaultsPrototype.forceTrailingSlash = ''; - - defaultsPrototype.httpConfig = {}; - - class DSHttpAdapter { - constructor(options) { - this.defaults = new Defaults(); - if (console) { - this.defaults.log = (a, b) => console[typeof console.info === 'function' ? 'info' : 'log'](a, b); - } - if (console) { - this.defaults.error = (a, b) => console[typeof console.error === 'function' ? 'error' : 'log'](a, b); - } - deepMixIn(this.defaults, options); - } - - getPath(method, resourceConfig, id, options) { - let _this = this; - options = options || {}; - let args = [ - options.basePath || _this.defaults.basePath || resourceConfig.basePath, - resourceConfig.getEndpoint((isString(id) || isNumber(id) || method === 'create') ? id : null, options) - ]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(DSUtils, args); - } - - GET(url, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'get'; - } - return this.HTTP(deepMixIn(config, { - url - })); - } - - POST(url, attrs, config) { - config = config || {}; - config = DSUtils.copy(config); - if (!('method' in config)) { - config.method = 'post'; - } - return this.HTTP(deepMixIn(config, { - url, - data: attrs - })); - } - - PUT(url, attrs, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'put'; - } - return this.HTTP(deepMixIn(config, { - url, - data: attrs || {} - })); - } - - DEL(url, config) { - config = config || {}; - if (!('method' in config)) { - config.method = 'delete'; - } - return this.HTTP(deepMixIn(config, { - url - })); - } - - find(resourceConfig, id, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.GET( - _this.getPath('find', resourceConfig, id, options), - options - ).then(data => { - let item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data); - return !item ? JSData.DSUtils.Promise.reject(new Error('Not Found!')) : item; - }); - } - - findAll(resourceConfig, params, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return _this.GET( - _this.getPath('findAll', resourceConfig, params, options), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - - create(resourceConfig, attrs, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.POST( - _this.getPath('create', resourceConfig, attrs, options), - (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - - update(resourceConfig, id, attrs, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.PUT( - _this.getPath('update', resourceConfig, id, options), - (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - - updateAll(resourceConfig, attrs, params, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return this.PUT( - _this.getPath('updateAll', resourceConfig, attrs, options), - (options.serialize ? options.serialize : _this.defaults.serialize)(resourceConfig, attrs), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - - destroy(resourceConfig, id, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - options.params = _this.defaults.queryTransform(resourceConfig, options.params); - return _this.DEL( - _this.getPath('destroy', resourceConfig, id, options), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - - destroyAll(resourceConfig, params, options) { - let _this = this; - options = options ? copy(options) : {}; - options.suffix = options.suffix || resourceConfig.suffix; - options.params = options.params || {}; - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params); - deepMixIn(options.params, params); - } - return this.DEL( - _this.getPath('destroyAll', resourceConfig, params, options), - options - ).then(data => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)); - } - } - - let dsHttpAdapterPrototype = DSHttpAdapter.prototype; - - class DSHttpAdapterProvider { - constructor() { - let _this = this; - _this.defaults = {}; - _this.$get = ['$http', 'DS', '$q', ($http, DS, $q) => { - dsHttpAdapterPrototype.HTTP = function (config) { - let _this = this; - let start = new Date(); - config = copy(config); - config = deepMixIn(config, _this.defaults.httpConfig); - if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - if (typeof config.data === 'object') { - config.data = removeCircular(config.data); - } - let suffix = config.suffix || _this.defaults.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - - function logResponse(data) { - let str = `${start.toUTCString()} - ${data.config.method.toUpperCase()} ${data.config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`; - if (data.status >= 200 && data.status < 300) { - if (_this.defaults.log) { - _this.defaults.log(str, data); - } - return data; - } else { - if (_this.defaults.error) { - _this.defaults.error(`FAILED: ${str}`, data); - } - return $q.reject(data); - } - } - - return $http(config).then(logResponse, logResponse); - }; - - let adapter = new DSHttpAdapter(_this.defaults); - DS.registerAdapter('http', adapter, { 'default': true }); - return adapter; - }]; - } - } - angular.module('js-data').provider('DSHttpAdapter', DSHttpAdapterProvider); -} -angular.module('js-data').run(['DS', 'DSHttpAdapter', (DS, DSHttpAdapter) => DS.registerAdapter('http', DSHttpAdapter, { 'default': true })]); - // return the module name -export default 'js-data'; +module.exports = 'js-data'; +module.exports.name = 'js-data'; diff --git a/test/datastore/async_methods/create.test.js b/test/datastore/async_methods/create.test.js index 0564ef3..8679fc2 100644 --- a/test/datastore/async_methods/create.test.js +++ b/test/datastore/async_methods/create.test.js @@ -177,7 +177,7 @@ describe('DS.create', function () { $httpBackend.flush(); }); it('should find inverse links', function () { - DS.inject('organization', { + var organization = DS.inject('organization', { id: 77 }); @@ -189,15 +189,14 @@ describe('DS.create', function () { DS.create('user', { organizationId: 77, id: 88 - }, { upsert: false, findBelongsTo: true }).then(function (user) { - var organization = DS.link('organization', 77, ['user']); + }, { upsert: false }).then(function (user) { assert.isArray(organization.users); assert.equal(1, organization.users.length); assert.isObject(user.organization); assert.isTrue(user.organization === organization); assert.isTrue(user === organization.users[0]); }, function () { - fail('Should not have succeeded!'); + fail('Should not have failed!'); }); $httpBackend.flush(); diff --git a/test/datastore/async_methods/loadRelations.test.js b/test/datastore/async_methods/loadRelations.test.js index 459cdd6..d6f2abb 100644 --- a/test/datastore/async_methods/loadRelations.test.js +++ b/test/datastore/async_methods/loadRelations.test.js @@ -12,7 +12,7 @@ describe('DS.loadRelations', function () { $httpBackend.expectGET('http://test.angular-cache.com/profile?approvedBy=10&userId=10').respond(200, [profile15]); $httpBackend.expectGET('http://test.angular-cache.com/organization/14?approvedBy=10').respond(200, organization14); - DS.loadRelations('user', 10, ['comment', 'profile', 'organization'], { params: { approvedBy: 10 } }).then(function (user) { + DS.loadRelations('user', 10, ['comment', 'profile', 'organization'], { params: { approvedBy: 10 }, findStrictCache: true }).then(function (user) { try { assert.deepEqual(user.comments[0].id, DS.get('comment', user.comments[0].id).id); assert.deepEqual(user.comments[0].user, DS.get('comment', user.comments[0].id).user); @@ -26,7 +26,7 @@ describe('DS.loadRelations', function () { DS.inject('comment', comment19); $httpBackend.expectGET('http://test.angular-cache.com/user/20').respond(200, user20); $httpBackend.expectGET('http://test.angular-cache.com/user/19').respond(200, user19); - DS.loadRelations('comment', 19, ['user']).then(function (comment) { + DS.loadRelations('comment', 19, ['user'], { findStrictCache: true }).then(function (comment) { try { assert.isObject(comment.user); assert.equal(comment.user.id, user20.id); @@ -49,7 +49,9 @@ describe('DS.loadRelations', function () { fail(err); }); - $httpBackend.flush(); + setTimeout(function () { + $httpBackend.flush(); + }, 30); }); it('should get an item from the server but not store it if cacheResponse is false', function () { DS.inject('user', { @@ -66,7 +68,7 @@ describe('DS.loadRelations', function () { $httpBackend.expectGET('http://test.angular-cache.com/profile?userId=10').respond(200, [profile15]); $httpBackend.expectGET('http://test.angular-cache.com/organization/14').respond(200, organization14); - DS.loadRelations('user', 10, ['comment', 'profile', 'organization'], { cacheResponse: false }).then(function (user) { + DS.loadRelations('user', 10, ['comment', 'profile', 'organization'], { cacheResponse: false, findStrictCache: true }).then(function (user) { assert.deepEqual(angular.toJson(user.comments), angular.toJson([ comment11, comment12, @@ -80,11 +82,13 @@ describe('DS.loadRelations', function () { assert.isUndefined(DS.get('comment', 13)); assert.isUndefined(DS.get('organization', 14)); assert.isUndefined(DS.get('profile', 15)); - }, function () { + }).catch(function (e) { fail('should not have failed!'); }); - $httpBackend.flush(); + setTimeout(function () { + $httpBackend.flush(); + }, 30); }); it('should correctly propagate errors', function () { DS.inject('user', { @@ -117,7 +121,7 @@ describe('DS.loadRelations', function () { $httpBackend.expectGET('http://test.angular-cache.com/organization/14/user').respond(200, [copy]); - DS.loadRelations('organization', organization, ['user']).then(function (organization) { + DS.loadRelations('organization', organization, ['user'], { findStrictCache: true }).then(function (organization) { assert.equal(organization.users[0].id, 10); $httpBackend.expectGET('http://test.angular-cache.com/organization/14/user/10/comment').respond(200, [comment11, comment12]);