diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..c13c5f6 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index baa91a3..0000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "bower_components" -} \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..ad84ef7 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing + +[Read the Contributing Guide](http://js-data.io/docs/contributing). + +## Support + +[Find out how to Get Support](http://js-data.io/docs/support). + +## Community + +[Explore the Community](http://js-data.io/docs/community). + +### Have write access? + +To cut a release: + +1. Checkout master +1. Bump version in `package.json` appropriately +1. Run `npm run release` +1. Update `CHANGELOG.md` appropriately +1. Commit and push changes, including the `dist/` folder +1. Make a GitHub release + - set tag name to version + - set release name to version + - set release body to changelog entry for the version + - attach the files in the `dist/` folder +1. `npm publish .` diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2ce62e8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,7 @@ +(delete this line) GitHub Issues are NOT for support questions. +(delete this line) GitHub Issues ARE for bug reports, feature requests, and other issues. +(delete this line) Find out how to Get Support here: http://js-data.io/docs/support. + + + +Thanks! diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..4c14bdc --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +Fixes # (it's a good idea to open an issue first for discussion) + +- [ ] - `npm test` succeeds +- [ ] - Pull request has been squashed into 1 commit +- [ ] - I did NOT commit changes to `dist/` +- [ ] - Code coverage does not decrease (if any source code was changed) +- [ ] - Appropriate JSDoc comments were updated in source code (if applicable) +- [ ] - Approprate changes to js-data.io docs have been suggested ("Suggest Edits" button) diff --git a/.gitignore b/.gitignore index 75552dd..9fef4f8 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ build_examples/browserify/bundle.js build_examples/webpack/bundle.js build_examples/webpack_es6/bundle.js build_examples/webpack_es6_2/bundle.js +.js-data-http.js +.js-data-http/ \ No newline at end of file diff --git a/.jshintrc b/.jshintrc index eed0c57..c58b501 100644 --- a/.jshintrc +++ b/.jshintrc @@ -3,6 +3,7 @@ "browser": true, "esnext": true, "bitwise": true, + "asi": true, "camelcase": true, "curly": true, "eqeqeq": true, diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000..a1e3721 --- /dev/null +++ b/.mailmap @@ -0,0 +1,5 @@ +InternalFX Bryan +InternalFX Bryan Morris +Jason Dobry Jason Dobry +Kent C. Dodds Kent C. Dodds +Robert Porter Robert P \ No newline at end of file diff --git a/.npmignore b/.npmignore index 1160c35..d4155b8 100644 --- a/.npmignore +++ b/.npmignore @@ -8,3 +8,8 @@ bower_components/ karma* guide/ doc/ +webpack.config.js +circle.yml + +.js-data-http.js +.js-data-http/ \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +6 diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..072af3a --- /dev/null +++ b/AUTHORS @@ -0,0 +1,24 @@ +# This is the official list of js-data-angular project authors. +# +# Names are formatted as: +# Name or Organization +# The email address is not required for organizations. +Andre Deutmeyer +Artemy Tregubenko +Asaf Katz +Chase Noel +Clark Pan +David Tang +Gabo Esquivel +Jason Aden +Jason Dobry +Kent C. Dodds +Loìˆc Mahieu +Nikolay +Peter Dave Hello +Shai Reznik +thorn0 +Tim Chen +Timothy Krell +vollnhals +Wes Cruver diff --git a/CHANGELOG.md b/CHANGELOG.md index a2352b7..e695d82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +##### 3.2.1 - 18 March 2016 + +###### Backwards compatible bug fixes +- Upgraded to js-data-http 2.2.2 + +##### 3.2.0 - 17 March 2016 + +###### Backwards compatible bug fixes +- #347 - BindOne recomputing computed properties +- #353 - jshint or standard? +- #356 - Multiple parents isn't working + +##### 3.1.1 - 20 September 2015 + +Stable Version 3.1.0 + +###### Backwards compatible API changes +- #335 - Calling $q.reject in http interceptor doesn't resolve to calling reject handler in DS.findAll.then + +###### Other +- Built with js-data-http 2.1.1 +- Upgraded dependencies + ##### 3.0.0 - 02 July 2015 Stable Version 3.0.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a086c59..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -# Contributing Guide - -First, feel free to contact me with questions. [Mailing List](https://groups.google.com/forum/?fromgroups#!forum/js-data-angular). [Issues](https://github.com/js-data/js-data-angular/issues). - -1. Contribute to the issue that is the reason you'll be developing in the first place -1. Fork js-data-angular -1. `git clone https://github.com//js-data-angular.git` -1. `cd js-data-angular; npm install; bower install;` -1. `grunt go` (builds and starts a watch) -1. (in another terminal) `grunt karma:dev` (runs the tests) -1. Write your code, including relevant documentation and tests -1. Submit a PR and we'll review diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 4966178..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - * js-data-angular - * http://github.com/js-data/js-data-angular - * - * Copyright (c) 2014-2015 Jason Dobry - * Licensed under the MIT license. - */ -module.exports = function (grunt) { - 'use strict'; - - require('jit-grunt')(grunt, { - coveralls: 'grunt-karma-coveralls' - }); - require('time-grunt')(grunt); - - var webpack = require('webpack'); - var pkg = grunt.file.readJSON('package.json'); - var banner = 'js-data-angular\n' + - '@version ' + pkg.version + ' - Homepage \n' + - '@author Jason Dobry \n' + - '@copyright (c) 2014-2015 Jason Dobry \n' + - '@license MIT \n' + - '\n' + - '@overview Angular wrapper for js-data.'; - - // Project configuration. - grunt.initConfig({ - pkg: pkg, - clean: { - dist: ['dist/'] - }, - watch: { - dist: { - files: ['src/**/*.js'], - tasks: ['build'] - } - }, - uglify: { - main: { - options: { - sourceMap: true, - sourceMapName: 'dist/js-data-angular.min.map', - banner: '/*!\n' + - '* js-data-angular\n' + - '* @version <%= pkg.version %> - Homepage \n' + - '* @author Jason Dobry \n' + - '* @copyright (c) 2014-2015 Jason Dobry \n' + - '* @license MIT \n' + - '*\n' + - '* @overview Angular wrapper for js-data.\n' + - '*/\n' - }, - files: { - 'dist/js-data-angular.min.js': ['dist/js-data-angular.js'] - } - } - }, - karma: { - options: { - configFile: './karma.conf.js' - }, - dev: { - browsers: ['Chrome'], - autoWatch: true, - singleRun: false, - reporters: ['spec'], - preprocessors: {} - }, - min: { - browsers: ['Chrome', 'Firefox', 'PhantomJS'], - options: { - files: [ - 'bower_components/angular-1.3.2/angular.js', - 'bower_components/angular-mocks-1.3.2/angular-mocks.js', - 'node_modules/js-data/dist/js-data.min.js', - 'dist/js-data-angular.min.js', - 'karma.start.js', - 'test/**/*.js' - ] - } - } - }, - coveralls: { - options: { - coverage_dir: 'coverage' - } - }, - webpack: { - dist: { - debug: true, - entry: './src/index.js', - output: { - filename: './dist/js-data-angular.js', - libraryTarget: 'umd2', - library: 'jsDataAngularModuleName' - }, - externals: { - 'js-data': { - amd: 'js-data', - commonjs: 'js-data', - commonjs2: 'js-data', - root: 'JSData' - }, - 'axios': 'axios', - 'angular': 'angular' - }, - module: { - loaders: [ - { test: /(.+)\.js$/, loader: 'babel-loader?blacklist=useStrict' } - ], - preLoaders: [ - { - test: /(.+)\.js$/, // include .js files - exclude: /node_modules/, // exclude any and all files in the node_modules folder - loader: "jshint-loader?failOnHint=true" - } - ] - }, - plugins: [ - new webpack.BannerPlugin(banner) - ] - } - } - }); - - grunt.registerTask('version', function (filePath) { - var file = grunt.file.read(filePath); - - file = file.replace(/<%= pkg\.version %>/gi, pkg.version); - - grunt.file.write(filePath, file); - }); - - grunt.registerTask('build', [ - 'clean', - 'webpack', - 'uglify' - ]); - grunt.registerTask('go', ['build', 'watch:dist']); - grunt.registerTask('default', ['build']); - grunt.registerTask('test', ['build', 'karma:min']); -}; diff --git a/LICENSE b/LICENSE index 460f8ee..21fc5e4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2015 Jason Dobry +Copyright (c) 2014-2016 js-data-angular project authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index 2b68e74..c5984d1 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ 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! +- [Slack Room](http://slack.js-data.io) - 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! @@ -108,16 +108,28 @@ app.controller('postCtrl', function ($scope, $routeParams, Post, Comment) { ### Contributing -First, feel free to contact me with questions. [Mailing List](https://groups.io/org/groupsio/jsdata). [Issues](https://github.com/js-data/js-data-angular/issues). +First, support is handled via the [Gitter Channel](https://gitter.im/js-data/js-data) and the [Mailing List](https://groups.io/org/groupsio/jsdata). Ask your questions there. -1. Contribute to the issue that is the reason you'll be developing in the first place +When submitting issues on GitHub, please include as much detail as possible to make debugging quick and easy. + +- good - Your versions of Angular, js-data, js-data-angular, etc., relevant console logs/error, code examples that revealed the issue +- better - A [plnkr](http://plnkr.co/), [fiddle](http://jsfiddle.net/), or [bin](http://jsbin.com/?html,output) that demonstrates the issue +- best - A Pull Request that fixes the issue, including test coverage for the issue and the fix + +[Github Issues](https://github.com/js-data/js-data-angular/issues). + +#### Submitting Pull Requests + +1. Contribute to the issue/discussion that is the reason you'll be developing in the first place 1. Fork js-data-angular -1. `git clone https://github.com//js-data-angular.git` +1. `git clone git@github.com:/js-data-angular.git` 1. `cd js-data-angular; npm install; bower install;` -1. `grunt go` (builds and starts a watch) -1. (in another terminal) `grunt karma:dev` (runs the tests) 1. Write your code, including relevant documentation and tests -1. Submit a PR and we'll review +1. Run `grunt test` (build and test) +1. Your code will be linted and checked for formatting, the tests will be run +1. The `dist/` folder & files will be generated, do NOT commit `dist/*`! They will be committed when a release is cut. +1. Submit your PR and we'll review! +1. Thanks! ### License diff --git a/bower.json b/bower.json index 5679625..529ee44 100644 --- a/bower.json +++ b/bower.json @@ -1,8 +1,8 @@ { - "author": "Jason Dobry", + "author": "js-data-angular project authors", "name": "js-data-angular", "description": "Angular wrapper for js-data (originally angular-data).", - "homepage": "http://www.js-data.io/docs/js-data-angular", + "homepage": "https://github.com/js-data/js-data-angular", "repository": { "type": "git", "url": "https://github.com/js-data/js-data-angular.git" @@ -13,8 +13,10 @@ ".*", "*.iml", "src/", - "Gruntfile.js", "node_modules/", + "doc", + "coverage", + "test", "package.json" ], "devDependencies": { @@ -22,8 +24,7 @@ "angular-mocks-1.3.2": "angular-mocks#1.3.2" }, "dependencies": { - "js-data": ">=2.0.0", - "js-data-http": ">=2.0.0", + "js-data": ">=2.0.0 <3", "angular": ">=1.1.0" } } diff --git a/dist/js-data-angular.js b/dist/js-data-angular.js index 988d5ee..b62c48d 100644 --- a/dist/js-data-angular.js +++ b/dist/js-data-angular.js @@ -1,62 +1,61 @@ /*! - * js-data-angular - * @version 3.0.0 - Homepage - * @author Jason Dobry - * @copyright (c) 2014-2015 Jason Dobry - * @license MIT - * - * @overview Angular wrapper for js-data. - */ +* js-data-angular +* @version 3.2.4 - Homepage +* @copyright (c) 2014-2016 js-data-angular project authors +* @license MIT +* +* @overview Angular wrapper for js-data. +*/ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') 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"], function webpackLoadOptionalExternalModuleAmd(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { - return factory(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, root["axios"]); + define(["js-data", "angular"], function webpackLoadOptionalExternalModuleAmd(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__) { + return factory(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__, root["axios"]); }); else if(typeof exports === 'object') exports["jsDataAngularModuleName"] = factory(require("js-data"), require("angular"), (function webpackLoadOptionalExternalModule() { try { return require("axios"); } catch(e) {} }())); else root["jsDataAngularModuleName"] = factory(root["JSData"], root["angular"], root["axios"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_5__) { +})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_3__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; - +/******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded /******/ module.loaded = true; - +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; - +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) @@ -65,21 +64,25 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - - /*jshint loopfunc:true*/ + 'use strict'; + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + /* jshint loopfunc:true */ var JSData = __webpack_require__(1); - var DSHttpAdapter = __webpack_require__(4); - var angular = __webpack_require__(2); - - var DSUtils = JSData.DSUtils; - var DSErrors = JSData.DSErrors; - var isString = DSUtils.isString; - var isNumber = DSUtils.isNumber; - var isObject = DSUtils.isObject; - var set = DSUtils.set; - var resolveId = DSUtils.resolveId; - + var DSHttpAdapter = __webpack_require__(2); + var angular = __webpack_require__(4); + + var DSUtils = JSData.DSUtils, + DSErrors = JSData.DSErrors; + var get = DSUtils.get, + isString = DSUtils.isString, + isNumber = DSUtils.isNumber, + isObject = DSUtils.isObject, + set = DSUtils.set, + resolveId = DSUtils.resolveId; + + var adapters = [{ project: 'js-data-localstorage', name: 'localstorage', @@ -97,23 +100,23 @@ return /******/ (function(modules) { // webpackBootstrap name: 'sql', 'class': 'DSSqlAdapter' }]; - + var functionsToWrap = ['compute', 'digest', 'eject', 'inject']; - + function registerAdapter(adapter) { - var Adapter = undefined; - + var Adapter = void 0; + try { - Adapter = __webpack_require__(3)(adapter.project); + Adapter = __webpack_require__(5)(adapter.project); } catch (e) {} - + if (!Adapter) { - Adapter = window[adapter['class']]; + Adapter = window[adapter.class]; } - + if (Adapter) { adapter.loaded = true; - angular.module('js-data').provider(adapter['class'], function () { + angular.module('js-data').provider(adapter.class, function () { var _this = this; _this.defaults = {}; _this.$get = [function () { @@ -122,13 +125,13 @@ 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); @@ -136,26 +139,26 @@ return /******/ (function(modules) { // webpackBootstrap return adapter; }]; }; - + var DSProvider = function DSProvider() { _classCallCheck(this, DSProvider); - + var _this = this; var deps = []; - + for (var i = 0; i < adapters.length; i++) { if (adapters[i].loaded) { - deps.push(adapters[i]['class']); + deps.push(adapters[i].class); } } - + _this.defaults = {}; - + JSData.DS.prototype.bindAll = function (resourceName, params, scope, expr, cb) { var _this = this; - + params = params || {}; - + if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); } else if (!isObject(params)) { @@ -165,12 +168,19 @@ return /******/ (function(modules) { // webpackBootstrap } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } - + + var idAttribute = _this.definitions[resourceName].idAttribute; + try { return scope.$watch(function () { return _this.lastModified(resourceName); }, function () { var items = _this.filter(resourceName, params); + if (items && items.length) { + angular.forEach(items, function (item) { + _this.compute(resourceName, get(item, idAttribute)); + }); + } set(scope, expr, items); if (cb) { cb(null, items); @@ -184,10 +194,10 @@ return /******/ (function(modules) { // webpackBootstrap } } }; - + JSData.DS.prototype.bindOne = function (resourceName, id, scope, expr, cb) { var _this = this; - + id = resolveId(_this.definitions[resourceName], id); if (!_this.definitions[resourceName]) { throw new DSErrors.NER(resourceName); @@ -198,7 +208,7 @@ return /******/ (function(modules) { // webpackBootstrap } else if (!isString(expr)) { throw new DSErrors.IA('"expr" must be a string!'); } - + try { return scope.$watch(function () { return _this.lastModified(resourceName, id); @@ -220,35 +230,35 @@ return /******/ (function(modules) { // webpackBootstrap } } }; - + function load() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } - + var $rootScope = args[args.length - 2]; var $q = args[args.length - 1]; var store = new JSData.DS(_this.defaults); var originals = {}; - + function QPromise(executor) { var deferred = $q.defer(); - + try { - executor.call(undefined, angular.bind(deferred, deferred.resolve), angular.bind(deferred, deferred.reject)); + executor(angular.bind(deferred, deferred.resolve), angular.bind(deferred, deferred.reject)); } catch (err) { deferred.reject(err); } - + return deferred.promise; } - + QPromise.all = $q.all; QPromise.when = $q.when; QPromise.reject = $q.reject; - + DSUtils.Promise = QPromise; - + // Register any adapters that have been loaded if (args.length) { for (var i = 0; i < args.length; i++) { @@ -261,15 +271,17 @@ return /******/ (function(modules) { // webpackBootstrap } } } - - var _loop = function () { + + // Wrap certain sync functions with $apply + + var _loop = function _loop() { var name = functionsToWrap[k]; originals[name] = store[name]; store[name] = function () { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } - + if (!$rootScope.$$phase) { return $rootScope.$apply(function () { return originals[name].apply(store, args); @@ -278,44 +290,45 @@ return /******/ (function(modules) { // webpackBootstrap return originals[name].apply(store, args); }; }; - - // Wrap certain sync functions with $apply + for (var k = 0; k < functionsToWrap.length; k++) { _loop(); } - + // Hook into the digest loop if (typeof Object.observe !== 'function' || typeof Array.observe !== 'function') { $rootScope.$watch(function () { return store.observe.Platform.performMicrotaskCheckpoint(); }); } - + return store; } - + deps.push('$rootScope'); deps.push('$q'); deps.push(load); - + _this.$get = deps; }; - + 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]); } - + // return the module name module.exports = 'js-data'; - module.exports.name = 'js-data'; + try { + module.exports.name = 'js-data'; + } catch (e) {} /***/ }, /* 1 */ -/***/ function(module, exports, __webpack_require__) { +/***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; @@ -323,55 +336,41 @@ return /******/ (function(modules) { // webpackBootstrap /* 2 */ /***/ function(module, exports, __webpack_require__) { - module.exports = __WEBPACK_EXTERNAL_MODULE_2__; - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - var map = {}; - function webpackContext(req) { - return __webpack_require__(webpackContextResolve(req)); - }; - function webpackContextResolve(req) { - return map[req] || (function() { throw new Error("Cannot find module '" + req + "'.") }()); - }; - webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); - }; - webpackContext.resolve = webpackContextResolve; - module.exports = webpackContext; - 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'); } } - + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + 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 _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + 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); + axios = __webpack_require__(3); } 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 () { + var deepMixIn = DSUtils.deepMixIn, + removeCircular = DSUtils.removeCircular, + copy = DSUtils.copy, + makePath = DSUtils.makePath, + isString = DSUtils.isString, + isNumber = DSUtils.isNumber; + + + function isUndefined(value) { + return value === undefined; + } + + var Defaults = function () { function Defaults() { _classCallCheck(this, Defaults); } - + _createClass(Defaults, [{ key: 'queryTransform', value: function queryTransform(resourceConfig, params) { @@ -394,22 +393,25 @@ return /******/ (function(modules) { // webpackBootstrap key: 'error', value: function error() {} }]); - + return Defaults; - })(); - + }(); + var defaultsPrototype = Defaults.prototype; - + defaultsPrototype.basePath = ''; - + defaultsPrototype.forceTrailingSlash = ''; - + defaultsPrototype.httpConfig = {}; - - var DSHttpAdapter = (function () { + + defaultsPrototype.verbsUseBasePath = false; + + var DSHttpAdapter = function () { function DSHttpAdapter(options) { _classCallCheck(this, DSHttpAdapter); - + + options || (options = {}); this.defaults = new Defaults(); if (console) { this.defaults.log = function (a, b) { @@ -424,162 +426,188 @@ return /******/ (function(modules) { // webpackBootstrap 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; + options || (options = {}); + options.params = isUndefined(options.params) ? {} : options.params; + 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) { + var parents = resourceConfig.parents || (resourceConfig.parent ? _defineProperty({}, resourceConfig.parent, { + key: resourceConfig.parentKey, + field: resourceConfig.parentField + }) : {}); + + DSUtils.forOwn(parents, function (parent, parentName) { + var item = void 0; + var parentKey = parent.key; + var parentField = parent.field; + var parentDef = resourceConfig.getResource(parentName); + var parentId = options.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete options.params[parentKey]; + } + } else { 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 () { + + 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) { 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; + endpoint = DSUtils.makePath(this.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint); + } } - } + }, this); + + 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); + options || (options = {}); + if (isString(options.urlPath)) { + return makePath.apply(DSUtils, [options.basePath || resourceConfig.basePath || _this.defaults.basePath, options.urlPath]); + } else { + var args = [options.basePath || resourceConfig.basePath || _this.defaults.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); } - return makePath.apply(DSUtils, args); } }, { key: 'HTTP', value: function HTTP(config) { var _this = this; var start = new Date(); - config = copy(config); + + // blacklist `data` as it can be large and will take a lot of time to copy + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + var params = config.params; + config = copy(config, null, null, null, ['data', 'cache', 'timeout', 'params']); // params could have data, cache, timeout + config.params = copy(params); config = deepMixIn(config, _this.defaults.httpConfig); - if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (!('verbsUseBasePath' in config)) { + config.verbsUseBasePath = _this.defaults.verbsUseBasePath; + } + if (!config.urlOverride && config.verbsUseBasePath) { + config.url = makePath(config.basePath || _this.defaults.basePath, config.url); + } + if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/' && !config.urlOverride) { config.url += '/'; } - if (typeof config.data === 'object') { + 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) { + var suffix = isUndefined(config.suffix) ? _this.defaults.suffix : config.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix && !config.urlOverride) { 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); + + // logs the HTTP response + function logResponse(data, isRejection) { + data = data || {}; + // examine the data object + if (data instanceof Error) { + // log the Error object + _this.defaults.error('FAILED: ' + (data.message || 'Unknown Error'), data); + return DSUtils.Promise.reject(data); + } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') { + var str = start.toUTCString() + ' - ' + config.method + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + + if (data.status >= 200 && data.status < 300 && !isRejection) { + 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); } - return data; } else { - if (_this.defaults.error) { - _this.defaults.error('\'FAILED: ' + str, data); - } + // unknown type for 'data' that is not an Object or Error + _this.defaults.error('FAILED', 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); + + return this.http(config).then(logResponse, function (data) { + return logResponse(data, true); + }); } }, { key: 'GET', value: function GET(url, config) { config = config || {}; - if (!('method' in config)) { - config.method = 'get'; - } - return this.HTTP(deepMixIn(config, { - url: url - })); + config.method = config.method || 'get'; + config.urlOverride = !!config.url; + config.url = config.url || url; + return this.HTTP(config); } }, { 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 - })); + config.method = config.method || 'post'; + config.urlOverride = !!config.url; + config.url = config.url || url; + config.data = config.data || attrs; + return this.HTTP(config); } }, { 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 || {} - })); + config.method = config.method || 'put'; + config.urlOverride = !!config.url; + config.url = config.url || url; + config.data = config.data || attrs; + return this.HTTP(config); } }, { key: 'DEL', value: function DEL(url, config) { config = config || {}; - if (!('method' in config)) { - config.method = 'delete'; - } - return this.HTTP(deepMixIn(config, { - url: url - })); + config.method = config.method || 'delete'; + config.urlOverride = !!config.url; + config.url = config.url || url; + return this.HTTP(config); } }, { 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 || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(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); @@ -590,9 +618,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || {}; + options || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(options.params); if (params) { params = _this.defaults.queryTransform(resourceConfig, params); deepMixIn(options.params, params); @@ -605,9 +633,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(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); @@ -617,9 +645,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(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); @@ -629,9 +657,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || {}; + options || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(options.params); if (params) { params = _this.defaults.queryTransform(resourceConfig, params); deepMixIn(options.params, params); @@ -644,9 +672,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(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); @@ -656,9 +684,9 @@ return /******/ (function(modules) { // webpackBootstrap 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 || {}; + options || (options = {}); + options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix; + options.params = isUndefined(options.params) ? {} : copy(options.params); if (params) { params = _this.defaults.queryTransform(resourceConfig, params); deepMixIn(options.params, params); @@ -668,20 +696,55 @@ return /******/ (function(modules) { // webpackBootstrap }); } }]); - + return DSHttpAdapter; - })(); - + }(); + + DSHttpAdapter.version = { + full: '3.2.4', + major: parseInt('3', 10), + minor: parseInt('2', 10), + patch: parseInt('4', 10), + alpha: true ? 'false' : false, + beta: true ? 'false' : false + }; + module.exports = DSHttpAdapter; +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + if(typeof __WEBPACK_EXTERNAL_MODULE_3__ === 'undefined') {var e = new Error("Cannot find module \"axios\""); e.code = 'MODULE_NOT_FOUND'; throw e;} + module.exports = __WEBPACK_EXTERNAL_MODULE_3__; + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_4__; + /***/ }, /* 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__; + var map = {}; + function webpackContext(req) { + return __webpack_require__(webpackContextResolve(req)); + }; + function webpackContextResolve(req) { + return map[req] || (function() { throw new Error("Cannot find module '" + req + "'.") }()); + }; + webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); + }; + webpackContext.resolve = webpackContextResolve; + module.exports = webpackContext; + webpackContext.id = 5; + /***/ } /******/ ]) }); -; \ No newline at end of file +; +//# sourceMappingURL=js-data-angular.js.map \ No newline at end of file diff --git a/dist/js-data-angular.js.map b/dist/js-data-angular.js.map new file mode 100644 index 0000000..6425c65 --- /dev/null +++ b/dist/js-data-angular.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 1c3c52fb1c99b2166362","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./.js-data-http.js","webpack:///external \"axios\"","webpack:///external \"angular\"","webpack:///./src ^\\.\\/.*$"],"names":["JSData","require","DSHttpAdapter","angular","DSUtils","DSErrors","get","isString","isNumber","isObject","set","resolveId","adapters","project","name","functionsToWrap","registerAdapter","adapter","Adapter","e","window","class","loaded","module","provider","_this","defaults","$get","DSHttpAdapterProvider","$http","DS","http","DSProvider","deps","i","length","push","prototype","bindAll","resourceName","params","scope","expr","cb","definitions","NER","IA","idAttribute","$watch","lastModified","items","filter","forEach","item","compute","err","bindOne","id","load","args","$rootScope","$q","store","originals","QPromise","executor","deferred","defer","bind","resolve","reject","promise","all","when","Promise","j","registered","k","$$phase","$apply","apply","Object","observe","Array","Platform","performMicrotaskCheckpoint","value","version","run","exports","axios","deepMixIn","removeCircular","copy","makePath","isUndefined","undefined","Defaults","resourceConfig","data","defaultsPrototype","basePath","forceTrailingSlash","httpConfig","verbsUseBasePath","options","console","log","a","b","info","error","endpoint","hasOwnProperty","parents","parent","key","parentKey","field","parentField","forOwn","parentName","parentDef","getResource","parentId","_sn","_o","_options","getEndpoint","_","method","urlPath","config","start","Date","payload","cache","timeout","urlOverride","url","toUpperCase","suffix","substr","logResponse","isRejection","Error","message","str","toUTCString","status","getTime","then","HTTP","attrs","queryTransform","GET","getPath","deserialize","POST","serialize","PUT","DEL","full","major","parseInt","minor","patch","alpha","beta"],"mappings":"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","file":"./dist/js-data-angular.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"angular\"), (function webpackLoadOptionalExternalModule() { try { return require(\"axios\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"angular\"], function webpackLoadOptionalExternalModuleAmd(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__) {\n\t\t\treturn factory(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__, root[\"axios\"]);\n\t\t});\n\telse if(typeof exports === 'object')\n\t\texports[\"jsDataAngularModuleName\"] = factory(require(\"js-data\"), require(\"angular\"), (function webpackLoadOptionalExternalModule() { try { return require(\"axios\"); } catch(e) {} }()));\n\telse\n\t\troot[\"jsDataAngularModuleName\"] = factory(root[\"JSData\"], root[\"angular\"], root[\"axios\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 1c3c52fb1c99b2166362\n **/","/* jshint loopfunc:true */\nlet JSData = require('js-data')\nlet DSHttpAdapter = require('../.js-data-http.js')\nlet angular = require('angular')\n\nlet { DSUtils, DSErrors } = JSData\nlet { get, isString, isNumber, isObject, set, resolveId } = DSUtils\n\nlet adapters = [\n {\n project: 'js-data-localstorage',\n name: 'localstorage',\n 'class': 'DSLocalStorageAdapter'\n },\n {\n project: 'js-data-localforage',\n name: 'localforage',\n 'class': 'DSLocalForageAdapter'\n },\n {\n project: 'js-data-firebase',\n name: 'firebase',\n 'class': 'DSFirebaseAdapter'\n },\n {\n project: 'js-data-sql',\n name: 'sql',\n 'class': 'DSSqlAdapter'\n }\n]\n\nlet functionsToWrap = [\n 'compute',\n 'digest',\n 'eject',\n 'inject'\n]\n\nfunction registerAdapter (adapter) {\n let Adapter\n\n try {\n Adapter = require(adapter.project)\n } catch (e) {}\n\n if (!Adapter) {\n Adapter = window[adapter.class]\n }\n\n if (Adapter) {\n adapter.loaded = true\n angular.module('js-data').provider(adapter.class, function () {\n let _this = this\n _this.defaults = {}\n _this.$get = [() => new Adapter(_this.defaults)]\n })\n }\n}\n\nclass DSHttpAdapterProvider {\n constructor () {\n let defaults = {}\n this.defaults = defaults\n\n this.$get = ['$http', 'DS', ($http, DS) => {\n defaults.http = defaults.http || $http\n let adapter = new DSHttpAdapter(defaults)\n DS.registerAdapter('http', adapter, { 'default': true })\n return adapter\n }]\n }\n}\n\nclass DSProvider {\n constructor () {\n let _this = this\n let deps = []\n\n for (var i = 0; i < adapters.length; i++) {\n if (adapters[i].loaded) {\n deps.push(adapters[i].class)\n }\n }\n\n _this.defaults = {}\n\n JSData.DS.prototype.bindAll = function (resourceName, params, scope, expr, cb) {\n let _this = this\n\n params = params || {}\n\n if (!_this.definitions[resourceName]) {\n throw new DSErrors.NER(resourceName)\n } else if (!isObject(params)) {\n throw new DSErrors.IA('\"params\" must be an object!')\n } else if (!isObject(scope)) {\n throw new DSErrors.IA('\"scope\" must be an object!')\n } else if (!isString(expr)) {\n throw new DSErrors.IA('\"expr\" must be a string!')\n }\n\n let idAttribute = _this.definitions[resourceName].idAttribute\n\n try {\n return scope.$watch(() => _this.lastModified(resourceName), () => {\n let items = _this.filter(resourceName, params)\n if (items && items.length) {\n angular.forEach(items, (item) => {\n _this.compute(resourceName, get(item, idAttribute))\n })\n }\n set(scope, expr, items)\n if (cb) {\n cb(null, items)\n }\n })\n } catch (err) {\n if (cb) {\n cb(err)\n } else {\n throw err\n }\n }\n }\n\n JSData.DS.prototype.bindOne = function (resourceName, id, scope, expr, cb) {\n let _this = this\n\n id = resolveId(_this.definitions[resourceName], id)\n if (!_this.definitions[resourceName]) {\n throw new DSErrors.NER(resourceName)\n } else if (!isString(id) && !isNumber(id)) {\n throw new DSErrors.IA('\"id\" must be a string or a number!')\n } else if (!isObject(scope)) {\n throw new DSErrors.IA('\"scope\" must be an object!')\n } else if (!isString(expr)) {\n throw new DSErrors.IA('\"expr\" must be a string!')\n }\n\n try {\n return scope.$watch(() => _this.lastModified(resourceName, id), () => {\n let item = _this.get(resourceName, id)\n if (item) {\n _this.compute(resourceName, id)\n }\n set(scope, expr, item)\n if (cb) {\n cb(null, item)\n }\n })\n } catch (err) {\n if (cb) {\n cb(err)\n } else {\n throw err\n }\n }\n }\n\n function load (...args) {\n let $rootScope = args[args.length - 2]\n let $q = args[args.length - 1]\n let store = new JSData.DS(_this.defaults)\n let originals = {}\n\n function QPromise (executor) {\n let deferred = $q.defer()\n\n try {\n executor(\n angular.bind(deferred, deferred.resolve),\n angular.bind(deferred, deferred.reject)\n )\n } catch (err) {\n deferred.reject(err)\n }\n\n return deferred.promise\n }\n\n QPromise.all = $q.all\n QPromise.when = $q.when\n QPromise.reject = $q.reject\n\n DSUtils.Promise = QPromise\n\n // Register any adapters that have been loaded\n if (args.length) {\n for (var i = 0; i < args.length; i++) {\n for (var j = 0; j < adapters.length; j++) {\n if (adapters[j].loaded && !adapters[j].registered) {\n adapters[j].registered = true\n store.registerAdapter(adapters[j].name, args[i])\n break\n }\n }\n }\n }\n\n // Wrap certain sync functions with $apply\n for (var k = 0; k < functionsToWrap.length; k++) {\n let name = functionsToWrap[k]\n originals[name] = store[name]\n store[name] = (...args) => {\n if (!$rootScope.$$phase) {\n return $rootScope.$apply(() => originals[name].apply(store, args))\n }\n return originals[name].apply(store, args)\n }\n }\n\n // Hook into the digest loop\n if (typeof Object.observe !== 'function' || typeof Array.observe !== 'function') {\n $rootScope.$watch(() => store.observe.Platform.performMicrotaskCheckpoint())\n }\n\n return store\n }\n\n deps.push('$rootScope')\n deps.push('$q')\n deps.push(load)\n\n _this.$get = deps\n }\n}\nangular.module('js-data', ['ng'])\n .value('DSUtils', DSUtils)\n .value('DSErrors', DSErrors)\n .value('DSVersion', JSData.version)\n .provider('DS', DSProvider)\n .provider('DSHttpAdapter', DSHttpAdapterProvider)\n .run(['DS', 'DSHttpAdapter', (DS, DSHttpAdapter) => {\n DS.registerAdapter('http', DSHttpAdapter, { 'default': true })\n }])\n\nfor (var i = 0; i < adapters.length; i++) {\n registerAdapter(adapters[i])\n}\n\n// return the module name\nmodule.exports = 'js-data'\ntry {\n module.exports.name = 'js-data'\n} catch (e) {}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","let JSData = require('js-data')\nlet axios = null\n\ntry {\n axios = require('axios')\n} catch (e) {}\n\nlet { DSUtils } = JSData\nlet { deepMixIn, removeCircular, copy, makePath, isString, isNumber } = DSUtils\n\nfunction isUndefined (value) {\n return value === undefined\n}\n\nclass Defaults {\n queryTransform (resourceConfig, params) {\n return params\n }\n\n deserialize (resourceConfig, data) {\n return data ? ('data' in data ? data.data : data) : data\n }\n\n serialize (resourceConfig, data) {\n return data\n }\n\n log () {}\n\n error () {}\n}\n\nlet defaultsPrototype = Defaults.prototype\n\ndefaultsPrototype.basePath = ''\n\ndefaultsPrototype.forceTrailingSlash = ''\n\ndefaultsPrototype.httpConfig = {}\n\ndefaultsPrototype.verbsUseBasePath = false\n\nclass DSHttpAdapter {\n constructor (options) {\n options || (options = {})\n this.defaults = new Defaults()\n if (console) {\n this.defaults.log = (a, b) => console[typeof console.info === 'function' ? 'info' : 'log'](a, b)\n }\n if (console) {\n this.defaults.error = (a, b) => console[typeof console.error === 'function' ? 'error' : 'log'](a, b)\n }\n deepMixIn(this.defaults, options)\n this.http = options.http || axios\n }\n\n getEndpoint (resourceConfig, id, options) {\n options || (options = {})\n options.params = isUndefined(options.params) ? {} : options.params\n\n let endpoint = options.hasOwnProperty('endpoint') ? options.endpoint : resourceConfig.endpoint\n let parents = resourceConfig.parents || (resourceConfig.parent ? {\n [resourceConfig.parent]: {\n key: resourceConfig.parentKey,\n field: resourceConfig.parentField\n }\n } : {})\n\n DSUtils.forOwn(parents, function (parent, parentName) {\n let item\n let parentKey = parent.key\n let parentField = parent.field\n let parentDef = resourceConfig.getResource(parentName)\n let parentId = options.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete options.params[parentKey]\n }\n } else {\n delete options.params[parentKey]\n\n if (DSUtils._sn(id)) {\n item = resourceConfig.get(id)\n } else if (DSUtils._o(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete options.endpoint\n let _options = {}\n DSUtils.forOwn(options, (value, key) => {\n _options[key] = value\n })\n endpoint = DSUtils.makePath(this.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint)\n }\n }\n }, this)\n\n return endpoint\n }\n\n getPath (method, resourceConfig, id, options) {\n let _this = this\n options || (options = {})\n if (isString(options.urlPath)) {\n return makePath.apply(DSUtils, [options.basePath || resourceConfig.basePath || _this.defaults.basePath, options.urlPath])\n } else {\n let args = [\n options.basePath || resourceConfig.basePath || _this.defaults.basePath,\n this.getEndpoint(resourceConfig, (isString(id) || isNumber(id) || method === 'create') ? id : null, options)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(DSUtils, args)\n }\n }\n\n HTTP (config) {\n let _this = this\n let start = new Date()\n\n // blacklist `data` as it can be large and will take a lot of time to copy\n let payload = config.data\n let cache = config.cache\n let timeout = config.timeout\n let params = config.params\n config = copy(config, null, null, null, ['data', 'cache', 'timeout', 'params']) // params could have data, cache, timeout\n config.params = copy(params)\n config = deepMixIn(config, _this.defaults.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (!('verbsUseBasePath' in config)) {\n config.verbsUseBasePath = _this.defaults.verbsUseBasePath\n }\n if (!config.urlOverride && config.verbsUseBasePath) {\n config.url = makePath(config.basePath || _this.defaults.basePath, config.url)\n }\n if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/' && !config.urlOverride) {\n config.url += '/'\n }\n if (typeof config.data === 'object') {\n config.data = removeCircular(config.data)\n }\n config.method = config.method.toUpperCase()\n let suffix = isUndefined(config.suffix) ? _this.defaults.suffix : config.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix && !config.urlOverride) {\n config.url += suffix\n }\n\n // logs the HTTP response\n function logResponse (data, isRejection) {\n data = data || {}\n // examine the data object\n if (data instanceof Error) {\n // log the Error object\n _this.defaults.error(`FAILED: ${data.message || 'Unknown Error'}`, data)\n return DSUtils.Promise.reject(data)\n } else if (typeof data === 'object') {\n let str = `${start.toUTCString()} - ${config.method} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n\n if (data.status >= 200 && data.status < 300 && !isRejection) {\n if (_this.defaults.log) {\n _this.defaults.log(str, data)\n }\n return data\n } else {\n if (_this.defaults.error) {\n _this.defaults.error(`FAILED: ${str}`, data)\n }\n return DSUtils.Promise.reject(data)\n }\n } else {\n // unknown type for 'data' that is not an Object or Error\n _this.defaults.error('FAILED', data)\n return DSUtils.Promise.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return this.http(config).then(logResponse, function (data) {\n return logResponse(data, true)\n })\n }\n\n GET (url, config) {\n config = config || {}\n config.method = config.method || 'get'\n config.urlOverride = !!config.url\n config.url = config.url || url\n return this.HTTP(config)\n }\n\n POST (url, attrs, config) {\n config = config || {}\n config.method = config.method || 'post'\n config.urlOverride = !!config.url\n config.url = config.url || url\n config.data = config.data || attrs\n return this.HTTP(config)\n }\n\n PUT (url, attrs, config) {\n config = config || {}\n config.method = config.method || 'put'\n config.urlOverride = !!config.url\n config.url = config.url || url\n config.data = config.data || attrs\n return this.HTTP(config)\n }\n\n DEL (url, config) {\n config = config || {}\n config.method = config.method || 'delete'\n config.urlOverride = !!config.url\n config.url = config.url || url\n return this.HTTP(config)\n }\n\n find (resourceConfig, id, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.GET(\n _this.getPath('find', resourceConfig, id, options),\n options\n ).then((data) => {\n let item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)\n return !item ? DSUtils.Promise.reject(new Error('Not Found!')) : item\n })\n }\n\n findAll (resourceConfig, params, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return _this.GET(\n _this.getPath('findAll', resourceConfig, params, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n create (resourceConfig, attrs, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.POST(\n _this.getPath('create', resourceConfig, attrs, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n update (resourceConfig, id, attrs, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.PUT(\n _this.getPath('update', resourceConfig, id, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n updateAll (resourceConfig, attrs, params, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return this.PUT(\n _this.getPath('updateAll', resourceConfig, attrs, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n destroy (resourceConfig, id, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.DEL(\n _this.getPath('destroy', resourceConfig, id, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n destroyAll (resourceConfig, params, options) {\n let _this = this\n options || (options = {})\n options.suffix = isUndefined(options.suffix) ? resourceConfig.suffix : options.suffix\n options.params = isUndefined(options.params) ? {} : copy(options.params)\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return this.DEL(\n _this.getPath('destroyAll', resourceConfig, params, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n}\n\nDSHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\n\nmodule.exports = DSHttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./.js-data-http.js\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_3__ === 'undefined') {var e = new Error(\"Cannot find module \\\"axios\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 4\n ** module chunks = 0\n **/","var map = {};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src ^\\.\\/.*$\n ** module id = 5\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js-data-angular.min.js b/dist/js-data-angular.min.js index 1d88e7c..cfb64ab 100644 --- a/dist/js-data-angular.min.js +++ b/dist/js-data-angular.min.js @@ -1,12 +1,10 @@ /*! * js-data-angular -* @version 3.0.0 - Homepage -* @author Jason Dobry -* @copyright (c) 2014-2015 Jason Dobry +* @version 3.2.4 - Homepage +* @copyright (c) 2014-2016 js-data-angular project authors * @license MIT * * @overview Angular wrapper for js-data. */ - -!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}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("angular"),function(){try{return require("axios")}catch(e){}}()):"function"==typeof define&&define.amd?define(["js-data","angular"],function(r,a){return t(r,a,e.axios)}):"object"==typeof exports?exports.jsDataAngularModuleName=t(require("js-data"),require("angular"),function(){try{return require("axios")}catch(e){}}()):e.jsDataAngularModuleName=t(e.JSData,e.angular,e.axios)}(this,function(e,t,r){return function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e){var t=void 0;try{t=r(5)(e.project)}catch(e){}t||(t=window[e.class]),t&&(e.loaded=!0,u.module("js-data").provider(e.class,function(){var e=this;e.defaults={},e.$get=[function(){return new t(e.defaults)}]}))}var i=r(1),s=r(2),u=r(4),o=i.DSUtils,f=i.DSErrors,l=o.get,d=o.isString,c=o.isNumber,p=o.isObject,h=o.set,m=o.resolveId,v=[{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"}],y=["compute","digest","eject","inject"],g=function e(){a(this,e);var t={};this.defaults=t,this.$get=["$http","DS",function(e,r){t.http=t.http||e;var a=new s(t);return r.registerAdapter("http",a,{default:!0}),a}]},b=function e(){function t(){function e(e){var t=f.defer();try{e(u.bind(t,t.resolve),u.bind(t,t.reject))}catch(e){t.reject(e)}return t.promise}for(var t=arguments.length,a=Array(t),n=0;t>n;n++)a[n]=arguments[n];var s=a[a.length-2],f=a[a.length-1],l=new i.DS(r.defaults),d={};if(e.all=f.all,e.when=f.when,e.reject=f.reject,o.Promise=e,a.length)for(var c=0;ca;a++)r[a]=arguments[a];return s.$$phase?d[e].apply(l,r):s.$apply(function(){return d[e].apply(l,r)})}},m=0;m=200&&t.status<300&&!n?(r.defaults.log&&r.defaults.log(i,t),t):(r.defaults.error&&r.defaults.error("FAILED: "+i,t),l.Promise.reject(t))}return r.defaults.error("FAILED",t),l.Promise.reject(t)}var r=this,a=new Date,n=e.data,u=e.cache,o=e.timeout,f=e.params;e=p(e,null,null,null,["data","cache","timeout","params"]),e.params=p(f),e=d(e,r.defaults.httpConfig),e.data=n,e.cache=u,e.timeout=o,"verbsUseBasePath"in e||(e.verbsUseBasePath=r.defaults.verbsUseBasePath),!e.urlOverride&&e.verbsUseBasePath&&(e.url=h(e.basePath||r.defaults.basePath,e.url)),r.defaults.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&!e.urlOverride&&(e.url+="/"),"object"===s(e.data)&&(e.data=c(e.data)),e.method=e.method.toUpperCase();var m=i(e.suffix)?r.defaults.suffix:e.suffix;if(m&&e.url.substr(e.url.length-m.length)!==m&&!e.urlOverride&&(e.url+=m),!this.http)throw new Error("You have not configured this adapter with an http library!");return this.http(e).then(t,function(e){return t(e,!0)})}},{key:"GET",value:function(e,t){return t=t||{},t.method=t.method||"get",t.urlOverride=!!t.url,t.url=t.url||e,this.HTTP(t)}},{key:"POST",value:function(e,t,r){return r=r||{},r.method=r.method||"post",r.urlOverride=!!r.url,r.url=r.url||e,r.data=r.data||t,this.HTTP(r)}},{key:"PUT",value:function(e,t,r){return r=r||{},r.method=r.method||"put",r.urlOverride=!!r.url,r.url=r.url||e,r.data=r.data||t,this.HTTP(r)}},{key:"DEL",value:function(e,t){return t=t||{},t.method=t.method||"delete",t.urlOverride=!!t.url,t.url=t.url||e,this.HTTP(t)}},{key:"find",value:function(e,t,r){var a=this;return r||(r={}),r.suffix=i(r.suffix)?e.suffix:r.suffix,r.params=i(r.params)?{}:p(r.params),r.params=a.defaults.queryTransform(e,r.params),a.GET(a.getPath("find",e,t,r),r).then(function(t){var n=(r.deserialize?r.deserialize:a.defaults.deserialize)(e,t);return n?n:l.Promise.reject(new Error("Not Found!"))})}},{key:"findAll",value:function(e,t,r){var a=this;return r||(r={}),r.suffix=i(r.suffix)?e.suffix:r.suffix,r.params=i(r.params)?{}:p(r.params),t&&(t=a.defaults.queryTransform(e,t),d(r.params,t)),a.GET(a.getPath("findAll",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:a.defaults.deserialize)(e,t)})}},{key:"create",value:function(e,t,r){var a=this;return r||(r={}),r.suffix=i(r.suffix)?e.suffix:r.suffix,r.params=i(r.params)?{}:p(r.params),r.params=a.defaults.queryTransform(e,r.params),a.POST(a.getPath("create",e,t,r),r.serialize?r.serialize(e,t):a.defaults.serialize(e,t),r).then(function(t){return(r.deserialize?r.deserialize:a.defaults.deserialize)(e,t)})}},{key:"update",value:function(e,t,r,a){var n=this;return a||(a={}),a.suffix=i(a.suffix)?e.suffix:a.suffix,a.params=i(a.params)?{}:p(a.params),a.params=n.defaults.queryTransform(e,a.params),n.PUT(n.getPath("update",e,t,a),a.serialize?a.serialize(e,r):n.defaults.serialize(e,r),a).then(function(t){return(a.deserialize?a.deserialize:n.defaults.deserialize)(e,t)})}},{key:"updateAll",value:function(e,t,r,a){var n=this;return a||(a={}),a.suffix=i(a.suffix)?e.suffix:a.suffix,a.params=i(a.params)?{}:p(a.params),r&&(r=n.defaults.queryTransform(e,r),d(a.params,r)),this.PUT(n.getPath("updateAll",e,t,a),a.serialize?a.serialize(e,t):n.defaults.serialize(e,t),a).then(function(t){return(a.deserialize?a.deserialize:n.defaults.deserialize)(e,t)})}},{key:"destroy",value:function(e,t,r){var a=this;return r||(r={}),r.suffix=i(r.suffix)?e.suffix:r.suffix,r.params=i(r.params)?{}:p(r.params),r.params=a.defaults.queryTransform(e,r.params),a.DEL(a.getPath("destroy",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:a.defaults.deserialize)(e,t)})}},{key:"destroyAll",value:function(e,t,r){var a=this;return r||(r={}),r.suffix=i(r.suffix)?e.suffix:r.suffix,r.params=i(r.params)?{}:p(r.params),t&&(t=a.defaults.queryTransform(e,t),d(r.params,t)),this.DEL(a.getPath("destroyAll",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:a.defaults.deserialize)(e,t)})}}]),e}();b.version={full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"},e.exports=b},function(e,t){if("undefined"==typeof r){var a=new Error('Cannot find module "axios"');throw a.code="MODULE_NOT_FOUND",a}e.exports=r},function(e,r){e.exports=t},function(e,t,r){function a(e){return r(n(e))}function n(e){return i[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var i={};a.keys=function(){return Object.keys(i)},a.resolve=n,e.exports=a,a.id=5}])}); //# 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 5a5833b..b85a53a 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","__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 +{"version":3,"sources":["dist/js-data-angular.js"],"names":["root","factory","exports","module","require","e","define","amd","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_4__","this","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_classCallCheck","instance","Constructor","TypeError","registerAdapter","adapter","Adapter","project","window","class","angular","provider","_this","defaults","$get","JSData","DSHttpAdapter","DSUtils","DSErrors","get","isString","isNumber","isObject","set","resolveId","adapters","name","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","idAttribute","lastModified","items","filter","forEach","item","compute","bindOne","value","version","run","_defineProperty","obj","key","defineProperty","enumerable","configurable","writable","isUndefined","undefined","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","axios","deepMixIn","removeCircular","copy","makePath","Defaults","resourceConfig","data","defaultsPrototype","basePath","forceTrailingSlash","httpConfig","verbsUseBasePath","options","console","log","a","b","info","error","endpoint","hasOwnProperty","parents","parent","parentKey","field","parentField","forOwn","parentName","parentDef","getResource","parentId","_sn","_o","_options","getEndpoint","_","method","urlPath","config","logResponse","isRejection","Error","message","str","start","toUTCString","url","status","Date","getTime","payload","cache","timeout","urlOverride","toUpperCase","suffix","substr","then","HTTP","attrs","queryTransform","GET","getPath","deserialize","POST","serialize","PUT","DEL","full","major","parseInt","minor","patch","alpha","beta","code","webpackContext","req","webpackContextResolve","map","keys"],"mappings":"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","file":"dist/js-data-angular.min.js"} \ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js index 43b6ffc..31fe59d 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,63 +1,78 @@ -// an example karma.conf.js +var customLaunchers = { + bs_ie9_windows7: { + base: 'BrowserStack', + browser: 'ie', + browser_version: '9.0', + os: 'Windows', + os_version: '7' + }, + bs_safari7_osxmavericks: { + base: 'BrowserStack', + browser: 'safari', + browser_version: '7.1', + os: 'OS X', + os_version: 'Mavericks' + }, + bs_firefox41_windows7: { + base: 'BrowserStack', + browser: 'firefox', + browser_version: '41.0', + os: 'Windows', + os_version: '7' + }, + bs_chrome46_windows7: { + base: 'BrowserStack', + browser: 'chrome', + browser_version: '46.0', + os: 'Windows', + os_version: '7' + } +} + +var browsers = ['PhantomJS'] +if ( + process.env.BROWSERSTACK_USERNAME && + process.env.BROWSERSTACK_ACCESS_KEY +) { + browsers = browsers.concat(Object.keys(customLaunchers)) +} + module.exports = function (config) { config.set({ - // base path, that will be used to resolve files and exclude basePath: './', frameworks: ['sinon', 'chai', 'mocha'], plugins: [ - // these plugins will be require() by Karma 'karma-sinon', 'karma-mocha', 'karma-chai', - 'karma-chrome-launcher', 'karma-phantomjs-launcher', - 'karma-firefox-launcher', - 'karma-coverage', - 'karma-spec-reporter' + 'karma-coverage' ], autoWatch: false, browserNoActivityTimeout: 30000, - browsers: ['Chrome'], - - // list of files / patterns to load in the browser + browsers: browsers, files: [ 'bower_components/angular-1.3.2/angular.js', 'bower_components/angular-mocks-1.3.2/angular-mocks.js', + 'node_modules/babel-polyfill/dist/polyfill.js', 'node_modules/js-data/dist/js-data.js', 'dist/js-data-angular.js', 'karma.start.js', 'test/**/*.js' ], - - reporters: ['spec', 'coverage'], - + reporters: ['dots', 'coverage'], preprocessors: { 'dist/js-data-angular.js': ['coverage'] }, - - // optionally, configure the reporter coverageReporter: { type: 'lcov', dir: 'coverage/' }, - - // web server port port: 9876, - - // cli runner port runnerPort: 9100, - - // enable / disable colors in the output (reporters and logs) colors: true, - - // level of logging logLevel: config.LOG_INFO, - - // If browser does not capture in given timeout [ms], kill it captureTimeout: 30000, - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit singleRun: true - }); -}; + }) +} diff --git a/karma.start.js b/karma.start.js index 1054600..cc3bd79 100644 --- a/karma.start.js +++ b/karma.start.js @@ -1,18 +1,18 @@ // Setup global test variables -var $rootScope, $q, $log, $timeout, DSHttpAdapterProvider, DSProvider, DS, DSUtils, DSHttpAdapter, app, $httpBackend, p1, p2, p3, p4, p5; +var $rootScope, $q, $log, $timeout, DSHttpAdapterProvider, DSProvider, DS, DSUtils, DSHttpAdapter, app, $httpBackend, p1, p2, p3, p4, p5 -var Post, User, Organization, Comment, Profile; -var user1, organization2, comment3, profile4; -var comment11, comment12, comment13, organization14, profile15, user10, user16, user17, user18, organization15, user19, user20, comment19, user22, profile21; +var Post, User, Organization, Comment, Profile +var user1, organization2, comment3, profile4 +var comment11, comment12, comment13, organization14, profile15, user10, user16, user17, user18, organization15, user19, user20, comment19, user22, profile21 -var lifecycle = {}; +var lifecycle = {} // Helper globals var fail = function (msg) { if (msg instanceof Error) { - console.log(msg.stack); + console.log(msg.stack) } else { - assert.equal('should not reach this!: ' + msg, 'failure'); + assert.equal('should not reach this!: ' + msg, 'failure') } }, TYPES_EXCEPT_STRING = [123, 123.123, null, undefined, {}, [], true, false, function () { @@ -35,105 +35,105 @@ var fail = function (msg) { }], TYPES_EXCEPT_BOOLEAN = ['string', 123, 123.123, null, undefined, {}, [], function () { }], - TYPES_EXCEPT_FUNCTION = ['string', 123, 123.123, null, undefined, {}, [], true, false]; + TYPES_EXCEPT_FUNCTION = ['string', 123, 123.123, null, undefined, {}, [], true, false] -angular.module('app', ['ng', 'js-data']); +angular.module('app', ['ng', 'js-data']) // Setup before each test beforeEach(function () { lifecycle.beforeValidate = function (resourceName, attrs, cb) { - lifecycle.beforeValidate.callCount += 1; - cb(null, attrs); - }; + lifecycle.beforeValidate.callCount += 1 + cb(null, attrs) + } lifecycle.validate = function (resourceName, attrs, cb) { - lifecycle.validate.callCount += 1; - cb(null, attrs); - }; + lifecycle.validate.callCount += 1 + cb(null, attrs) + } lifecycle.afterValidate = function (resourceName, attrs, cb) { - lifecycle.afterValidate.callCount += 1; - cb(null, attrs); - }; + lifecycle.afterValidate.callCount += 1 + cb(null, attrs) + } lifecycle.beforeCreate = function (resourceName, attrs, cb) { - lifecycle.beforeCreate.callCount += 1; - cb(null, attrs); - }; + lifecycle.beforeCreate.callCount += 1 + cb(null, attrs) + } lifecycle.afterCreate = function (resourceName, attrs, cb) { - lifecycle.afterCreate.callCount += 1; - cb(null, attrs); - }; + lifecycle.afterCreate.callCount += 1 + cb(null, attrs) + } lifecycle.beforeUpdate = function (resourceName, attrs, cb) { - lifecycle.beforeUpdate.callCount += 1; - cb(null, attrs); - }; + lifecycle.beforeUpdate.callCount += 1 + cb(null, attrs) + } lifecycle.afterUpdate = function (resourceName, attrs, cb) { - lifecycle.afterUpdate.callCount += 1; - cb(null, attrs); - }; + lifecycle.afterUpdate.callCount += 1 + cb(null, attrs) + } lifecycle.beforeDestroy = function (resourceName, attrs, cb) { - lifecycle.beforeDestroy.callCount += 1; - cb(null, attrs); - }; + lifecycle.beforeDestroy.callCount += 1 + cb(null, attrs) + } lifecycle.afterDestroy = function (resourceName, attrs, cb) { - lifecycle.afterDestroy.callCount += 1; - cb(null, attrs); - }; + lifecycle.afterDestroy.callCount += 1 + cb(null, attrs) + } lifecycle.beforeInject = function () { - lifecycle.beforeInject.callCount += 1; - }; + lifecycle.beforeInject.callCount += 1 + } lifecycle.afterInject = function (resource, data) { - lifecycle.afterInject.callCount += 1; - }; + lifecycle.afterInject.callCount += 1 + } lifecycle.serialize = function (resourceName, data) { - lifecycle.serialize.callCount += 1; - return data; - }; + lifecycle.serialize.callCount += 1 + return data + } lifecycle.deserialize = function (resourceName, data) { - lifecycle.deserialize.callCount += 1; - return data ? (data.data ? data.data : data) : data;; - }; + lifecycle.deserialize.callCount += 1 + return data ? (data.data ? data.data : data) : data + } lifecycle.queryTransform = function (resourceName, query) { - lifecycle.queryTransform.callCount += 1; - return query; - }; + lifecycle.queryTransform.callCount += 1 + return query + } module('app', function (_DSProvider_, _DSHttpAdapterProvider_) { - DSProvider = _DSProvider_; - DSProvider.defaults.basePath = 'http://test.angular-cache.com'; - DSProvider.defaults.beforeValidate = lifecycle.beforeValidate; - DSProvider.defaults.validate = lifecycle.validate; - DSProvider.defaults.afterValidate = lifecycle.afterValidate; - DSProvider.defaults.beforeCreate = lifecycle.beforeCreate; - DSProvider.defaults.afterCreate = lifecycle.afterCreate; - DSProvider.defaults.beforeUpdate = lifecycle.beforeUpdate; - DSProvider.defaults.afterUpdate = lifecycle.afterUpdate; - DSProvider.defaults.beforeDestroy = lifecycle.beforeDestroy; - DSProvider.defaults.afterDestroy = lifecycle.afterDestroy; - DSProvider.defaults.beforeInject = lifecycle.beforeInject; - DSProvider.defaults.afterInject = lifecycle.afterInject; - DSProvider.defaults.serialize = lifecycle.serialize; - DSProvider.defaults.deserialize = lifecycle.deserialize; - DSHttpAdapterProvider = _DSHttpAdapterProvider_; - DSHttpAdapterProvider.defaults.queryTransform = lifecycle.queryTransform; - DSHttpAdapterProvider.defaults.log = false; - }); -}); + DSProvider = _DSProvider_ + DSProvider.defaults.basePath = 'http://test.angular-cache.com' + DSProvider.defaults.beforeValidate = lifecycle.beforeValidate + DSProvider.defaults.validate = lifecycle.validate + DSProvider.defaults.afterValidate = lifecycle.afterValidate + DSProvider.defaults.beforeCreate = lifecycle.beforeCreate + DSProvider.defaults.afterCreate = lifecycle.afterCreate + DSProvider.defaults.beforeUpdate = lifecycle.beforeUpdate + DSProvider.defaults.afterUpdate = lifecycle.afterUpdate + DSProvider.defaults.beforeDestroy = lifecycle.beforeDestroy + DSProvider.defaults.afterDestroy = lifecycle.afterDestroy + DSProvider.defaults.beforeInject = lifecycle.beforeInject + DSProvider.defaults.afterInject = lifecycle.afterInject + DSProvider.defaults.serialize = lifecycle.serialize + DSProvider.defaults.deserialize = lifecycle.deserialize + DSHttpAdapterProvider = _DSHttpAdapterProvider_ + DSHttpAdapterProvider.defaults.queryTransform = lifecycle.queryTransform + DSHttpAdapterProvider.defaults.log = false + }) +}) function startInjector() { inject(function (_$rootScope_, _$q_, _$timeout_, _$httpBackend_, _DS_, _$log_, _DSUtils_, _DSHttpAdapter_) { // Setup global mocks - localStorage.clear(); - $q = _$q_; - $rootScope = _$rootScope_; - DS = _DS_; - $timeout = _$timeout_; - DSUtils = _DSUtils_; - DSHttpAdapter = _DSHttpAdapter_; - $httpBackend = _$httpBackend_; + localStorage.clear() + $q = _$q_ + $rootScope = _$rootScope_ + DS = _DS_ + $timeout = _$timeout_ + DSUtils = _DSUtils_ + DSHttpAdapter = _DSHttpAdapter_ + $httpBackend = _$httpBackend_ Post = DS.defineResource({ name: 'post', keepChangeHistory: true, endpoint: '/posts' - }); + }) User = DS.defineResource({ name: 'user', relations: { @@ -157,7 +157,7 @@ function startInjector() { } } } - }); + }) Organization = DS.defineResource({ name: 'organization', @@ -169,7 +169,7 @@ function startInjector() { } } } - }); + }) Profile = DS.defineResource({ name: 'profile', @@ -181,7 +181,7 @@ function startInjector() { } } } - }); + }) Comment = DS.defineResource({ name: 'comment', @@ -200,74 +200,74 @@ function startInjector() { ] } } - }); - $log = _$log_; + }) + $log = _$log_ - lifecycle.beforeValidate.callCount = 0; - lifecycle.validate.callCount = 0; - lifecycle.afterValidate.callCount = 0; - lifecycle.beforeCreate.callCount = 0; - lifecycle.afterCreate.callCount = 0; - lifecycle.beforeUpdate.callCount = 0; - lifecycle.afterUpdate.callCount = 0; - lifecycle.beforeDestroy.callCount = 0; - lifecycle.afterDestroy.callCount = 0; - lifecycle.beforeInject.callCount = 0; - lifecycle.afterInject.callCount = 0; - lifecycle.serialize.callCount = 0; - lifecycle.deserialize.callCount = 0; - lifecycle.queryTransform.callCount = 0; + lifecycle.beforeValidate.callCount = 0 + lifecycle.validate.callCount = 0 + lifecycle.afterValidate.callCount = 0 + lifecycle.beforeCreate.callCount = 0 + lifecycle.afterCreate.callCount = 0 + lifecycle.beforeUpdate.callCount = 0 + lifecycle.afterUpdate.callCount = 0 + lifecycle.beforeDestroy.callCount = 0 + lifecycle.afterDestroy.callCount = 0 + lifecycle.beforeInject.callCount = 0 + lifecycle.afterInject.callCount = 0 + lifecycle.serialize.callCount = 0 + lifecycle.deserialize.callCount = 0 + lifecycle.queryTransform.callCount = 0 - p1 = { author: 'John', age: 30, id: 5 }; - p2 = { author: 'Sally', age: 31, id: 6 }; - p3 = { author: 'Mike', age: 32, id: 7 }; - p4 = { author: 'Adam', age: 33, id: 8 }; - p5 = { author: 'Adam', age: 33, id: 9 }; + p1 = { author: 'John', age: 30, id: 5 } + p2 = { author: 'Sally', age: 31, id: 6 } + p3 = { author: 'Mike', age: 32, id: 7 } + p4 = { author: 'Adam', age: 33, id: 8 } + p5 = { author: 'Adam', age: 33, id: 9 } user1 = { name: 'John Anderson', id: 1, organizationId: 2 - }; + } organization2 = { name: 'Test Corp 2', id: 2 - }; + } comment3 = { content: 'test comment 3', id: 3, userId: 1 - }; + } profile4 = { content: 'test profile 4', id: 4, userId: 1 - }; + } comment11 = { id: 11, userId: 10, content: 'test comment 11' - }; + } comment12 = { id: 12, userId: 10, content: 'test comment 12' - }; + } comment13 = { id: 13, userId: 10, content: 'test comment 13' - }; + } organization14 = { id: 14, name: 'Test Corp' - }; + } profile15 = { id: 15, userId: 10, email: 'john.anderson@test.com' - }; + } user10 = { name: 'John Anderson', id: 10, @@ -279,22 +279,22 @@ function startInjector() { ], organization: organization14, profile: profile15 - }; + } user16 = { id: 16, organizationId: 15, name: 'test user 16' - }; + } user17 = { id: 17, organizationId: 15, name: 'test user 17' - }; + } user18 = { id: 18, organizationId: 15, name: 'test user 18' - }; + } organization15 = { name: 'Another Test Corp', id: 15, @@ -303,15 +303,15 @@ function startInjector() { user17, user18 ] - }; + } user19 = { id: 19, name: 'test user 19' - }; + } user20 = { id: 20, name: 'test user 20' - }; + } comment19 = { content: 'test comment 19', id: 19, @@ -319,27 +319,27 @@ function startInjector() { approvedByUser: user19, userId: 20, user: user20 - }; + } user22 = { id: 22, name: 'test user 22' - }; + } profile21 = { content: 'test profile 21', id: 21, userId: 22, user: user22 - }; - }); + } + }) } // Clean up after each test afterEach(function () { try { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); + $httpBackend.verifyNoOutstandingExpectation() + $httpBackend.verifyNoOutstandingRequest() } catch (err) { - console.log(err); + console.log(err) } - $log.reset(); -}); + $log.reset() +}) diff --git a/package.json b/package.json index a347d37..55e2e70 100644 --- a/package.json +++ b/package.json @@ -1,57 +1,71 @@ { "name": "js-data-angular", "description": "Angular wrapper for js-data.", - "version": "3.0.0", + "version": "3.2.4", "homepage": "http://www.js-data.io/docs/js-data-angular", "repository": { "type": "git", "url": "https://github.com/js-data/js-data-angular.git" }, - "author": { - "name": "Jason Dobry", - "url": "http://www.pseudobry.com", - "email": "jason.dobry@gmail.com" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/js-data/js-data-angular/blob/master/LICENSE" - } - ], + "author": "js-data-angular project authors", + "license": "MIT", "main": "dist/js-data-angular.js", - "devDependencies": { - "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.11.2", - "grunt-karma-coveralls": "2.5.3", - "grunt-webpack": "1.0.11", - "jit-grunt": "0.9.1", - "jshint-loader": "0.8.3", - "karma": "0.12.37", - "karma-chai": "0.1.0", - "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.19", - "time-grunt": "1.2.1", - "webpack-dev-server": "1.10.1" + "standard": { + "parser": "babel-eslint", + "globals": [ + "Headers", + "fetch", + "Request", + "action", + "describe", + "it", + "sinon", + "before", + "after", + "beforeEach", + "afterEach" + ] }, "scripts": { - "test": "grunt test" + "lint": "repo-tools lint karma.conf.js src/*.js scripts/*.js", + "webpack": "node scripts/js-data-http.js && webpack --config webpack.config.js", + "min": "uglifyjs dist/js-data-angular.js -o dist/js-data-angular.min.js --source-map dist/js-data-angular.min.map --source-map-url js-data-angular.min.map -v -m -c --screw-ie8", + "version": "node scripts/version.js", + "banner": "node scripts/banner.js", + "gzip": "echo js-data-angular gzipped size: $(cat dist/js-data-angular.min.js | gzip -f9 | wc -c)kb", + "build": "npm run lint && npm run webpack && npm run min && npm run version && npm run banner", + "karma": "karma start", + "test": "npm run build && npm run karma", + "repo-tools": "repo-tools updates && repo-tools changelog && repo-tools authors", + "release": "npm test && npm run repo-tools", + "ci": "npm test && cat ./coverage/PhantomJS*/lcov.info | coveralls || true" }, "peerDependencies": { "angular": ">=1.1.0", - "js-data": ">=2.0.0" + "js-data": ">=2.0.0 <3" }, - "dependencies": { - "js-data-http": ">=2.0.0" + "devDependencies": { + "babel-core": "6.7.2", + "babel-loader": "6.2.4", + "babel-polyfill": "6.7.2", + "babel-preset-es2015": "6.6.0", + "chai": "3.5.0", + "coveralls": "2.11.8", + "js-data-repo-tools": "0.2.0", + "karma": "0.13.22", + "karma-browserstack-launcher": "0.1.10", + "karma-chai": "0.1.0", + "karma-coverage": "0.5.5", + "karma-mocha": "0.2.2", + "karma-phantomjs-launcher": "1.0.2", + "karma-sinon": "1.0.4", + "mocha": "2.4.5", + "phantomjs-prebuilt": "2.1.6", + "request": "2.69.0", + "sinon": "1.17.3", + "tar.gz": "1.0.3", + "tarball-extract": "0.0.3", + "uglify-js": "2.6.2", + "webpack": "1.12.14" } } diff --git a/scripts/AUTHORS b/scripts/AUTHORS new file mode 100644 index 0000000..4300136 --- /dev/null +++ b/scripts/AUTHORS @@ -0,0 +1,7 @@ +# This is the official list of js-data-http project authors. +# +# This file is controlled by scripts/authors.js +# +# Names are formatted as: +# Name or Organization +# The email address is not required for organizations. diff --git a/scripts/CONTRIBUTORS b/scripts/CONTRIBUTORS new file mode 100644 index 0000000..429081a --- /dev/null +++ b/scripts/CONTRIBUTORS @@ -0,0 +1,6 @@ +# People who have contributed to the js-data-http project. +# +# This file is controlled by scripts/authors.js +# +# Names should be added to this file as: +# [commit count] Name diff --git a/scripts/authors.js b/scripts/authors.js new file mode 100644 index 0000000..778dc8f --- /dev/null +++ b/scripts/authors.js @@ -0,0 +1,58 @@ +var fs = require('fs') +var exec = require('child_process').exec +var path = require('path') + +console.log('Writing AUTHORS file...') + +var authorsFile = fs.readFileSync(path.join(__dirname, '/AUTHORS'), { + encoding: 'utf-8' +}) +var contributorsFile = fs.readFileSync(path.join(__dirname, '/CONTRIBUTORS'), { + encoding: 'utf-8' +}) + +var tty = process.platform === 'win32' ? 'CON' : '/dev/tty' + +exec('git shortlog -s -e < ' + tty, function (err, stdout, stderr) { + if (err) { + console.error(err) + process.exit(-1) + } else { + var lines = stdout.split('\n') + var countsAndNames = lines.map(function (line) { + return line.split('\t') + }) + var names = countsAndNames.map(function (pair) { + return pair[1] + }) + + // Add to or otherwise modify "names" if necessary + + fs.writeFileSync(path.join(__dirname, '/../AUTHORS'), authorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(path.join(__dirname, '/../fetch/AUTHORS'), authorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(path.join(__dirname, '/../node/AUTHORS'), authorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + console.log('Done!') + console.log('Writing CONTRIBUTORS file...') + + names = lines + + // Add to or otherwise modify "names" if necessary + + fs.writeFileSync(path.join(__dirname, '/../CONTRIBUTORS'), contributorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(path.join(__dirname, '/../fetch/CONTRIBUTORS'), contributorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(path.join(__dirname, '/../node/CONTRIBUTORS'), contributorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + console.log('Done!') + } +}) diff --git a/scripts/banner.js b/scripts/banner.js new file mode 100644 index 0000000..94570f3 --- /dev/null +++ b/scripts/banner.js @@ -0,0 +1,29 @@ +var fs = require('fs') +var pkg = require('../package.json') + +var banner = '/*!\n' + + '* js-data-angular\n' + + '* @version ' + pkg.version + ' - Homepage \n' + + '* @copyright (c) 2014-2016 js-data-angular project authors\n' + + '* @license MIT \n' + + '*\n' + + '* @overview Angular wrapper for js-data.\n' + + '*/\n' + +console.log('Adding banner to dist/ files...') + +function addBanner (filepath) { + var contents = fs.readFileSync(filepath, { + encoding: 'utf-8' + }) + if (contents.substr(0, 3) !== '/*!') { + fs.writeFileSync(filepath, banner + contents, { + encoding: 'utf-8' + }) + } +} + +addBanner('dist/js-data-angular.js') +addBanner('dist/js-data-angular.min.js') + +console.log('Done!') diff --git a/scripts/cleanup.js b/scripts/cleanup.js new file mode 100644 index 0000000..1bc6136 --- /dev/null +++ b/scripts/cleanup.js @@ -0,0 +1,25 @@ +var fs = require('fs') + +var pkg = require('../package.json') + +var path = './doc/js-data-angular/' + pkg.version + '/styles/' + +var files = fs.readdirSync(path) +files.forEach(function (file) { + if (file.indexOf('site') === 0) { + if (file.indexOf('lumen') === -1 && file.indexOf('dibs') === -1) { + fs.unlinkSync(path + file) + } + } +}) + +path = './doc/js-data-angular/' + pkg.version + +files = fs.readdirSync(path) +files.forEach(function (file) { + if (file.indexOf('.html') === file.length - 5) { + var content = fs.readFileSync(path + '/' + file, { encoding: 'utf8' }) + content = content.replace(/\/home\/ubuntu\/workspace\//gi, '') + fs.writeFileSync(path + '/' + file, content, { encoding: 'utf8' }) + } +}) diff --git a/scripts/js-data-http.js b/scripts/js-data-http.js new file mode 100644 index 0000000..79a4c49 --- /dev/null +++ b/scripts/js-data-http.js @@ -0,0 +1,23 @@ +var fs = require('fs') +var url = 'https://github.com/js-data/js-data-http/archive/2.2.4.tar.gz' +var directory = './.js-data-http/' +var request = require('request') +var targz = require('tar.gz') + +// Streams +try { + fs.statSync(directory) + console.log('js-data-http already downloaded') +} catch (err) { + console.log('downloading js-data-http') + var read = request.get(url) + var write = targz().createWriteStream(directory) + + read.pipe(write) + + write.on('finish', function () { + var copyRead = fs.createReadStream(directory + 'js-data-http-2.2.4/src/index.js') + var copyWrite = fs.createWriteStream('./.js-data-http.js') + copyRead.pipe(copyWrite) + }) +} diff --git a/scripts/version.js b/scripts/version.js new file mode 100644 index 0000000..ec3d3f5 --- /dev/null +++ b/scripts/version.js @@ -0,0 +1,39 @@ +var fs = require('fs') +var pkg = require('../package.json') + +console.log('Adding version to dist/ files...') + +function version (filepath) { + var file = fs.readFileSync(filepath, { + encoding: 'utf-8' + }) + + file = file.replace(/<%= pkg\.version %>/gi, pkg.version) + + var parts = pkg.version.split('-') + var numbers = parts[0].split('.') + + file = file.replace(/<%= major %>/gi, numbers[0]) + file = file.replace(/<%= minor %>/gi, numbers[1]) + file = file.replace(/<%= patch %>/gi, numbers[2]) + + if (pkg.version.indexOf('alpha') !== -1) { + file = file.replace(/<%= alpha %>/gi, parts[1].replace('alpha.', '') + (parts.length > 2 ? '-' + parts[2] : '')) + } else { + file = file.replace(/<%= alpha %>/gi, false) + } + + if (pkg.version.indexOf('beta') !== -1) { + file = file.replace(/<%= beta %>/gi, parts[1].replace('beta.', '') + (parts.length > 2 ? '-' + parts[2] : '')) + } else { + file = file.replace(/<%= beta %>/gi, false) + } + + fs.writeFileSync(filepath, file, { + encoding: 'utf-8' + }) +} + +version('dist/js-data-angular.js') + +console.log('Done!') diff --git a/src/index.js b/src/index.js index b8040b6..3cf5439 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,10 @@ -/*jshint loopfunc:true*/ -let JSData = require('js-data'); -let DSHttpAdapter = require('../node_modules/js-data-http/src/index.js'); -let angular = require('angular'); +/* jshint loopfunc:true */ +let JSData = require('js-data') +let DSHttpAdapter = require('../.js-data-http.js') +let angular = require('angular') -let { DSUtils, DSErrors } = JSData; -let { isString, isNumber, isObject, set, resolveId } = DSUtils; +let { DSUtils, DSErrors } = JSData +let { get, isString, isNumber, isObject, set, resolveId } = DSUtils let adapters = [ { @@ -27,165 +27,171 @@ let adapters = [ name: 'sql', 'class': 'DSSqlAdapter' } -]; +] let functionsToWrap = [ 'compute', 'digest', 'eject', 'inject' -]; +] -function registerAdapter(adapter) { - let Adapter; +function registerAdapter (adapter) { + let Adapter try { - Adapter = require(adapter.project); - } catch (e) { - - } + Adapter = require(adapter.project) + } catch (e) {} if (!Adapter) { - Adapter = window[adapter.class]; + Adapter = window[adapter.class] } if (Adapter) { - adapter.loaded = true; + adapter.loaded = true angular.module('js-data').provider(adapter.class, function () { - let _this = this; - _this.defaults = {}; - _this.$get = [() => new Adapter(_this.defaults)]; - }); + let _this = this + _this.defaults = {} + _this.$get = [() => new Adapter(_this.defaults)] + }) } } class DSHttpAdapterProvider { - constructor() { - let defaults = {}; - this.defaults = defaults; + 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; - }]; + defaults.http = defaults.http || $http + let adapter = new DSHttpAdapter(defaults) + DS.registerAdapter('http', adapter, { 'default': true }) + return adapter + }] } } class DSProvider { - constructor() { - let _this = this; - let deps = []; + constructor () { + let _this = this + let deps = [] for (var i = 0; i < adapters.length; i++) { if (adapters[i].loaded) { - deps.push(adapters[i].class); + deps.push(adapters[i].class) } } - _this.defaults = {}; + _this.defaults = {} JSData.DS.prototype.bindAll = function (resourceName, params, scope, expr, cb) { - let _this = this; + let _this = this - params = params || {}; + params = params || {} if (!_this.definitions[resourceName]) { - throw new DSErrors.NER(resourceName); + throw new DSErrors.NER(resourceName) } else if (!isObject(params)) { - throw new DSErrors.IA('"params" must be an object!'); + throw new DSErrors.IA('"params" must be an object!') } else if (!isObject(scope)) { - throw new DSErrors.IA('"scope" must be an object!'); + throw new DSErrors.IA('"scope" must be an object!') } else if (!isString(expr)) { - throw new DSErrors.IA('"expr" must be a string!'); + throw new DSErrors.IA('"expr" must be a string!') } + let idAttribute = _this.definitions[resourceName].idAttribute + try { return scope.$watch(() => _this.lastModified(resourceName), () => { - let items = _this.filter(resourceName, params); - set(scope, expr, items); + let items = _this.filter(resourceName, params) + if (items && items.length) { + angular.forEach(items, (item) => { + _this.compute(resourceName, get(item, idAttribute)) + }) + } + set(scope, expr, items) if (cb) { - cb(null, items); + cb(null, items) } - }); + }) } catch (err) { if (cb) { - cb(err); + cb(err) } else { - throw err; + throw err } } - }; + } JSData.DS.prototype.bindOne = function (resourceName, id, scope, expr, cb) { - let _this = this; + let _this = this - id = resolveId(_this.definitions[resourceName], id); + id = resolveId(_this.definitions[resourceName], id) if (!_this.definitions[resourceName]) { - throw new DSErrors.NER(resourceName); + throw new DSErrors.NER(resourceName) } else if (!isString(id) && !isNumber(id)) { - throw new DSErrors.IA('"id" must be a string or a number!'); + throw new DSErrors.IA('"id" must be a string or a number!') } else if (!isObject(scope)) { - throw new DSErrors.IA('"scope" must be an object!'); + throw new DSErrors.IA('"scope" must be an object!') } else if (!isString(expr)) { - throw new DSErrors.IA('"expr" must be a string!'); + throw new DSErrors.IA('"expr" must be a string!') } try { return scope.$watch(() => _this.lastModified(resourceName, id), () => { - let item = _this.get(resourceName, id); + let item = _this.get(resourceName, id) if (item) { - _this.compute(resourceName, id); + _this.compute(resourceName, id) } - set(scope, expr, item); + set(scope, expr, item) if (cb) { - cb(null, item); + cb(null, item) } - }); + }) } catch (err) { if (cb) { - cb(err); + cb(err) } else { - throw err; + throw err } } - }; + } - function load(...args) { - let $rootScope = args[args.length - 2]; - let $q = args[args.length - 1]; - let store = new JSData.DS(_this.defaults); - let originals = {}; + function load (...args) { + let $rootScope = args[args.length - 2] + let $q = args[args.length - 1] + let store = new JSData.DS(_this.defaults) + let originals = {} - function QPromise(executor) { - let deferred = $q.defer(); + function QPromise (executor) { + let deferred = $q.defer() try { - executor.call(undefined, + executor( angular.bind(deferred, deferred.resolve), - angular.bind(deferred, deferred.reject)); + angular.bind(deferred, deferred.reject) + ) } catch (err) { - deferred.reject(err); + deferred.reject(err) } - return deferred.promise; + return deferred.promise } - QPromise.all = $q.all; - QPromise.when = $q.when; - QPromise.reject = $q.reject; + QPromise.all = $q.all + QPromise.when = $q.when + QPromise.reject = $q.reject - DSUtils.Promise = QPromise; + DSUtils.Promise = QPromise // Register any adapters that have been loaded if (args.length) { for (var i = 0; i < args.length; i++) { for (var j = 0; j < adapters.length; j++) { if (adapters[j].loaded && !adapters[j].registered) { - adapters[j].registered = true; - store.registerAdapter(adapters[j].name, args[i]); - break; + adapters[j].registered = true + store.registerAdapter(adapters[j].name, args[i]) + break } } } @@ -193,29 +199,29 @@ class DSProvider { // Wrap certain sync functions with $apply for (var k = 0; k < functionsToWrap.length; k++) { - let name = functionsToWrap[k]; - originals[name] = store[name]; + let name = functionsToWrap[k] + originals[name] = store[name] store[name] = (...args) => { if (!$rootScope.$$phase) { - return $rootScope.$apply(() => originals[name].apply(store, args)); + return $rootScope.$apply(() => originals[name].apply(store, args)) } - return originals[name].apply(store, args); - }; + return originals[name].apply(store, args) + } } // Hook into the digest loop if (typeof Object.observe !== 'function' || typeof Array.observe !== 'function') { - $rootScope.$watch(() => store.observe.Platform.performMicrotaskCheckpoint()); + $rootScope.$watch(() => store.observe.Platform.performMicrotaskCheckpoint()) } - return store; + return store } - deps.push('$rootScope'); - deps.push('$q'); - deps.push(load); + deps.push('$rootScope') + deps.push('$q') + deps.push(load) - _this.$get = deps; + _this.$get = deps } } angular.module('js-data', ['ng']) @@ -225,14 +231,15 @@ angular.module('js-data', ['ng']) .provider('DS', DSProvider) .provider('DSHttpAdapter', DSHttpAdapterProvider) .run(['DS', 'DSHttpAdapter', (DS, DSHttpAdapter) => { - DS.registerAdapter('http', DSHttpAdapter, { 'default': true }); - }]); - + DS.registerAdapter('http', DSHttpAdapter, { 'default': true }) + }]) for (var i = 0; i < adapters.length; i++) { - registerAdapter(adapters[i]); + registerAdapter(adapters[i]) } // return the module name -module.exports = 'js-data'; -module.exports.name = 'js-data'; +module.exports = 'js-data' +try { + module.exports.name = 'js-data' +} catch (e) {} diff --git a/test/datastore/sync_methods/bindAll.test.js b/test/datastore/sync_methods/bindAll.test.js index aea4692..801b38a 100644 --- a/test/datastore/sync_methods/bindAll.test.js +++ b/test/datastore/sync_methods/bindAll.test.js @@ -13,26 +13,26 @@ describe('DS.bindAll', function () { it('should throw an error when method pre-conditions are not met', function () { assert.throws(function () { DS.bindAll('does not exist'); - }, DS.errors.NonexistentResourceError, 'does not exist is not a registered resource!'); + }, Error, 'does not exist is not a registered resource!'); angular.forEach(TYPES_EXCEPT_OBJECT, function (key) { if (key) { assert.throws(function () { DS.bindAll('post', key); - }, DS.errors.IllegalArgumentError, '"params" must be an object!'); + }, Error, '"params" must be an object!'); } }); angular.forEach(TYPES_EXCEPT_OBJECT, function (key) { assert.throws(function () { DS.bindAll('post', {}, key); - }, DS.errors.IllegalArgumentError, '"scope" must be an object!'); + }, Error, '"scope" must be an object!'); }); angular.forEach(TYPES_EXCEPT_STRING, function (key) { assert.throws(function () { DS.bindAll('post', {}, $scope, key); - }, DS.errors.IllegalArgumentError, '"expr" must be a string!'); + }, Error, '"expr" must be a string!'); }); }); it('should bind an item in the data store to the scope', function () { diff --git a/test/datastore/sync_methods/bindOne.test.js b/test/datastore/sync_methods/bindOne.test.js index 42a9564..a0f938b 100644 --- a/test/datastore/sync_methods/bindOne.test.js +++ b/test/datastore/sync_methods/bindOne.test.js @@ -13,24 +13,24 @@ describe('DS.bindOne', function () { it('should throw an error when method pre-conditions are not met', function () { assert.throws(function () { DS.bindOne('does not exist'); - }, DS.errors.NonexistentResourceError, 'does not exist is not a registered resource!'); + }, Error, 'does not exist is not a registered resource!'); angular.forEach(TYPES_EXCEPT_STRING_OR_NUMBER, function (key) { assert.throws(function () { DS.bindOne('post', key); - }, DS.errors.IllegalArgumentError, '"id" must be a string or a number!'); + }, Error, '"id" must be a string or a number!'); }); angular.forEach(TYPES_EXCEPT_OBJECT, function (key) { assert.throws(function () { DS.bindOne('post', 5, key); - }, DS.errors.IllegalArgumentError, '"scope" must be an object!'); + }, Error, '"scope" must be an object!'); }); angular.forEach(TYPES_EXCEPT_STRING, function (key) { assert.throws(function () { DS.bindOne('post', 5, $scope, key); - }, DS.errors.IllegalArgumentError, '"expr" must be a string!'); + }, Error, '"expr" must be a string!'); }); }); it('should bind an item in the data store to the scope', function () { diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..2911e48 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,35 @@ +var path = require('path') + +module.exports = { + devtool: 'source-map', + entry: { + './dist/js-data-angular.js': './src/index.js' + }, + output: { + filename: '[name]', + libraryTarget: 'umd2', + library: 'jsDataAngularModuleName' + }, + externals: { + 'js-data': { + amd: 'js-data', + commonjs: 'js-data', + commonjs2: 'js-data', + root: 'JSData' + }, + 'axios': 'axios', + 'angular': 'angular' + }, + module: { + loaders: [ + { + loader: 'babel-loader', + include: [ + path.resolve(__dirname, 'src'), + path.resolve(__dirname) + ], + test: /\.js$/ + } + ] + } +}