├── .babelrc ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .npmignore ├── .npmrc ├── LICENSE ├── README.md ├── dist ├── index.js └── mixin.js ├── es ├── index.js └── mixin.js ├── example ├── index.html └── server.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── index.js ├── mixin.js └── umd.js ├── tests └── unit │ ├── .eslintrc.js │ ├── actions.test.js │ ├── index.test.js │ ├── mixin.test.js │ ├── mutations.test.js │ ├── state.test.js │ └── types.test.js ├── umd ├── vuex-async-module.js ├── vuex-async-module.js.map ├── vuex-async-module.min.js └── vuex-async-module.min.js.map └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "loose": true, 5 | "modules": false 6 | }] 7 | ], 8 | "plugins": ["transform-object-rest-spread"], 9 | "env": { 10 | "cjs": { 11 | "presets": [ 12 | ["env", { 13 | "loose": true, 14 | "modules": "commonjs" 15 | }] 16 | ], 17 | "plugins": ["add-module-exports"] 18 | }, 19 | "rollup": { 20 | "plugins": ["external-helpers"] 21 | }, 22 | "test": { 23 | "presets": [ 24 | ["env", { 25 | "loose": true, 26 | "modules": "commonjs", 27 | "targets": { "node": "current" } 28 | }] 29 | ], 30 | "plugins": ["transform-es2015-modules-commonjs"] 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | es 3 | umd 4 | node_modules 5 | *.conf.js 6 | *.config.js -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['plugin:vue-libs/recommended'], 3 | root: true, 4 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 5 | parserOptions: { 6 | sourceType: 'module' 7 | }, 8 | env: { 9 | 'browser': true, 10 | }, 11 | // add your custom rules here 12 | 'rules': { 13 | // allow paren-less arrow functions 14 | 'arrow-parens': 0, 15 | // allow debugger during development 16 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 17 | 'no-unused-vars': 1, 18 | 'camelcase': 0, 19 | 'space-before-function-paren': 0, 20 | } 21 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directory 27 | node_modules 28 | .idea 29 | .vscode 30 | *.sublime-workspace 31 | *.sublime-project 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | # Windows 40 | Thumbs.db 41 | ehthumbs.db 42 | Desktop.ini 43 | $RECYCLE.BIN/ 44 | 45 | #Mac 46 | .DS_Store 47 | .DS_Store? 48 | .AppleDouble 49 | .LSOverride 50 | Icon 51 | ._* 52 | .Spotlight-V100 53 | .Trashes -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | test 4 | examples 5 | .babelrc 6 | .editorconfig 7 | .eslintrc.js 8 | rollup.* -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | tag-version-prefix="" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017-2018 Lorenzo Girardi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vuex-async-module 2 | 3 | > Reduce async boilerplate code generating [Vuex](http://vuex.vuejs.org) modules. Compatible with Vue 2.x 4 | 5 | ## Installation 6 | ``` bash 7 | npm install @liqueflies/vuex-async-module --save 8 | # or 9 | yarn add @liqueflies/vuex-async-module 10 | ``` 11 | 12 | ## Introduction 13 | 14 | `vuex-async-module` generates [Vuex Modules](https://vuex.vuejs.org/en/modules.html) reducing boilerplate for asynchronous request, inspired by this [post](https://medium.com/@lachlanmiller_52885/reducing-vuex-boilerplate-for-ajax-calls-1cd4a74cef26) of [Lachlan Miller](https://twitter.com/Lachlan06036367). 15 | 16 | ### Behind the idea 17 | 18 | The workflow for a successful asynchronous request should be like: 19 | 20 | ```js 21 | state = { 22 | isPending: true // pending... show a spinner 23 | statusCode: null, 24 | data: null, 25 | errors: null 26 | } 27 | // some time later... the ajax request is successful 28 | state = { 29 | isPending: false, // no longer pending 30 | statusCode: 200, // success code 200 31 | data: {...}, // response data 32 | errors: null // no errors 33 | } 34 | ``` 35 | 36 | Standard Vuex code should write also `types`, `actions`, `mutations`, and `getters` for each async action. 37 | 38 | We can notice that in many cases we will write the same code over and over again. 39 | 40 | `vuex-async-module` will scaffold this code for you. 41 | 42 | ## Basic usage 43 | 44 | ```js 45 | import getAsyncModule from '@liqueflies/vuex-async-module' 46 | 47 | export default new Vuex.Store({ 48 | state, // your state, 49 | actions, // your actions 50 | getters, // your getters 51 | mutations, // your mutations 52 | modules: { 53 | // use a promise async library that return data and status on response 54 | movies: getAsyncModule({ xhr: axios.get }) 55 | } 56 | }) 57 | ``` 58 | 59 | and then in your `.vue` 60 | 61 | ```js 62 | import { asyncModuleMixin } from '@liqueflies/vuex-async-module' 63 | 64 | export default { 65 | // component `name` is the same as module name 66 | name: 'movies', 67 | // include mixin for automatically bind two computed props: 68 | // [componentName]RequestIsPending i.e moviesRequestIsPending 69 | // [componentName] i.e. movies 70 | // and a method! 71 | // getAsync[componentName] i.e. getAsyncMovies(url, forceUpdate) 72 | mixins: [asyncModuleMixin], 73 | // place this call where you prefer, here we will use `beforeMount` 74 | beforeMount () { 75 | this.getAsyncMovies({ url: 'https://ghibliapi.herokuapp.com/films' }) 76 | } 77 | } 78 | ``` 79 | 80 | and in the template 81 | 82 | ```html 83 |
84 | 89 | ``` 90 | 91 | ## Documentation 92 | 93 | `vuex-async-module` has only one constrain: `component` name must be the same of `module` name. 94 | 95 | `vuex-async-module` mixin adds two `computed` properties: 96 | 97 | - [`componentName`]RequestIsPending - i.e `moviesRequestIsPending` 98 | - [`componentName`] - i.e. `movies` 99 | 100 | and a `method` 101 | 102 | - getAsync[`componentName`] i.e. getAsyncMovies 103 | 104 | `getAsync` expects to receive the url for the ajax call, and a boolean parameter to force the update of the previous fetched data. 105 | 106 | And the job is done! 107 | 108 | ## Contributors 109 | 110 | Thanks to [Marco Solazzi](https://github.com/dwightjack) and [Giovanni Rodighiero](https://github.com/giovanniRodighiero). 111 | 112 | ## License 113 | 114 | [MIT](http://opensource.org/licenses/MIT) 115 | 116 | Copyright (c) 2017 Lorenzo Girardi -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.asyncModuleMixin = undefined; 5 | exports.getDefaultState = getDefaultState; 6 | exports.getDefaultTypes = getDefaultTypes; 7 | exports.getDefaultMutations = getDefaultMutations; 8 | exports.getDefaultActions = getDefaultActions; 9 | exports.default = getAsyncModule; 10 | 11 | var _mixin = require('./mixin'); 12 | 13 | var _mixin2 = _interopRequireDefault(_mixin); 14 | 15 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16 | 17 | exports.asyncModuleMixin = _mixin2.default; 18 | function getDefaultState() { 19 | return { 20 | isPending: true, 21 | statusCode: null, 22 | data: null, 23 | errors: null 24 | }; 25 | } 26 | 27 | function getDefaultTypes() { 28 | return { 29 | SET_RESPONSE_DATA: 'SET_RESPONSE_DATA', 30 | SET_IS_PENDING: 'SET_IS_PENDING', 31 | SET_STATUS_CODE: 'SET_STATUS_CODE', 32 | SET_ERRORS: 'SET_ERRORS' 33 | }; 34 | } 35 | 36 | function getDefaultMutations() { 37 | var _ref; 38 | 39 | var types = getDefaultTypes(); 40 | return _ref = {}, _ref[types.SET_RESPONSE_DATA] = function (state, data) { 41 | state.data = data; 42 | return state.data; 43 | }, _ref[types.SET_IS_PENDING] = function (state, isPending) { 44 | state.isPending = isPending; 45 | return state.isPending; 46 | }, _ref[types.SET_STATUS_CODE] = function (state, status) { 47 | state.statusCode = status; 48 | return state.statusCode; 49 | }, _ref[types.SET_ERRORS] = function (state, errors) { 50 | state.errors = errors; 51 | return state.errors; 52 | }, _ref; 53 | } 54 | 55 | function getDefaultActions(xhr) { 56 | var _getDefaultTypes = getDefaultTypes(), 57 | SET_RESPONSE_DATA = _getDefaultTypes.SET_RESPONSE_DATA, 58 | SET_IS_PENDING = _getDefaultTypes.SET_IS_PENDING, 59 | SET_STATUS_CODE = _getDefaultTypes.SET_STATUS_CODE, 60 | SET_ERRORS = _getDefaultTypes.SET_ERRORS; 61 | 62 | return { 63 | getAsync: function getAsync(_ref2, _ref3) { 64 | var state = _ref2.state, 65 | commit = _ref2.commit; 66 | var url = _ref3.url, 67 | _ref3$forceUpdate = _ref3.forceUpdate, 68 | forceUpdate = _ref3$forceUpdate === undefined ? false : _ref3$forceUpdate; 69 | 70 | if (state.isPending || forceUpdate) { 71 | return xhr(url).then(function (response) { 72 | commit(SET_RESPONSE_DATA, response.data); 73 | commit(SET_STATUS_CODE, response.status); 74 | commit(SET_IS_PENDING, false); 75 | }).catch(function (response) { 76 | commit(SET_ERRORS, response.errors); 77 | commit(SET_STATUS_CODE, response.status); 78 | commit(SET_IS_PENDING, false); 79 | }); 80 | } else { 81 | return Promise.resolve(null); 82 | } 83 | } 84 | }; 85 | } 86 | 87 | function getAsyncModule() { 88 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 89 | 90 | var opts = Object.assign({}, options); // for extensibility 91 | if (opts.xhr === undefined) { 92 | throw new TypeError('You must provide a valid XHR transport library in `options.xhr`'); 93 | } 94 | return { 95 | namespaced: true, 96 | state: getDefaultState(), 97 | mutations: getDefaultMutations(), 98 | actions: getDefaultActions(opts.xhr) 99 | }; 100 | } -------------------------------------------------------------------------------- /dist/mixin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _lodash = require('lodash.camelcase'); 6 | 7 | var _lodash2 = _interopRequireDefault(_lodash); 8 | 9 | var _lodash3 = require('lodash.upperfirst'); 10 | 11 | var _lodash4 = _interopRequireDefault(_lodash3); 12 | 13 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 14 | 15 | exports.default = { 16 | beforeCreate: function beforeCreate() { 17 | var _Object$assign, _Object$assign2; 18 | 19 | var name = this.$options.name; 20 | 21 | this.$options.computed = Object.assign({}, this.$options.computed, (_Object$assign = {}, _Object$assign[name] = function () { 22 | return this.$store.state[name].data; 23 | }, _Object$assign[name + 'RequestIsPending'] = function undefined() { 24 | return this.$store.state[name].isPending; 25 | }, _Object$assign)); 26 | this.$options.methods = Object.assign({}, this.$options.methods, (_Object$assign2 = {}, _Object$assign2['getAsync' + (0, _lodash4.default)((0, _lodash2.default)(name))] = function undefined() { 27 | var _$store; 28 | 29 | return (_$store = this.$store).dispatch.apply(_$store, [name + '/getAsync'].concat(Array.prototype.slice.call(arguments))); 30 | }, _Object$assign2)); 31 | } 32 | }; 33 | module.exports = exports['default']; -------------------------------------------------------------------------------- /es/index.js: -------------------------------------------------------------------------------- 1 | import asyncModuleMixin from './mixin'; 2 | 3 | export { asyncModuleMixin }; 4 | 5 | export function getDefaultState() { 6 | return { 7 | isPending: true, 8 | statusCode: null, 9 | data: null, 10 | errors: null 11 | }; 12 | } 13 | 14 | export function getDefaultTypes() { 15 | return { 16 | SET_RESPONSE_DATA: 'SET_RESPONSE_DATA', 17 | SET_IS_PENDING: 'SET_IS_PENDING', 18 | SET_STATUS_CODE: 'SET_STATUS_CODE', 19 | SET_ERRORS: 'SET_ERRORS' 20 | }; 21 | } 22 | 23 | export function getDefaultMutations() { 24 | var _ref; 25 | 26 | var types = getDefaultTypes(); 27 | return _ref = {}, _ref[types.SET_RESPONSE_DATA] = function (state, data) { 28 | state.data = data; 29 | return state.data; 30 | }, _ref[types.SET_IS_PENDING] = function (state, isPending) { 31 | state.isPending = isPending; 32 | return state.isPending; 33 | }, _ref[types.SET_STATUS_CODE] = function (state, status) { 34 | state.statusCode = status; 35 | return state.statusCode; 36 | }, _ref[types.SET_ERRORS] = function (state, errors) { 37 | state.errors = errors; 38 | return state.errors; 39 | }, _ref; 40 | } 41 | 42 | export function getDefaultActions(xhr) { 43 | var _getDefaultTypes = getDefaultTypes(), 44 | SET_RESPONSE_DATA = _getDefaultTypes.SET_RESPONSE_DATA, 45 | SET_IS_PENDING = _getDefaultTypes.SET_IS_PENDING, 46 | SET_STATUS_CODE = _getDefaultTypes.SET_STATUS_CODE, 47 | SET_ERRORS = _getDefaultTypes.SET_ERRORS; 48 | 49 | return { 50 | getAsync: function getAsync(_ref2, _ref3) { 51 | var state = _ref2.state, 52 | commit = _ref2.commit; 53 | var url = _ref3.url, 54 | _ref3$forceUpdate = _ref3.forceUpdate, 55 | forceUpdate = _ref3$forceUpdate === undefined ? false : _ref3$forceUpdate; 56 | 57 | if (state.isPending || forceUpdate) { 58 | return xhr(url).then(function (response) { 59 | commit(SET_RESPONSE_DATA, response.data); 60 | commit(SET_STATUS_CODE, response.status); 61 | commit(SET_IS_PENDING, false); 62 | }).catch(function (response) { 63 | commit(SET_ERRORS, response.errors); 64 | commit(SET_STATUS_CODE, response.status); 65 | commit(SET_IS_PENDING, false); 66 | }); 67 | } else { 68 | return Promise.resolve(null); 69 | } 70 | } 71 | }; 72 | } 73 | 74 | export default function getAsyncModule() { 75 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 76 | 77 | var opts = Object.assign({}, options); // for extensibility 78 | if (opts.xhr === undefined) { 79 | throw new TypeError('You must provide a valid XHR transport library in `options.xhr`'); 80 | } 81 | return { 82 | namespaced: true, 83 | state: getDefaultState(), 84 | mutations: getDefaultMutations(), 85 | actions: getDefaultActions(opts.xhr) 86 | }; 87 | } -------------------------------------------------------------------------------- /es/mixin.js: -------------------------------------------------------------------------------- 1 | import camelCase from 'lodash.camelcase'; 2 | import upperFirst from 'lodash.upperfirst'; 3 | 4 | export default { 5 | beforeCreate: function beforeCreate() { 6 | var _Object$assign, _Object$assign2; 7 | 8 | var name = this.$options.name; 9 | 10 | this.$options.computed = Object.assign({}, this.$options.computed, (_Object$assign = {}, _Object$assign[name] = function () { 11 | return this.$store.state[name].data; 12 | }, _Object$assign[name + 'RequestIsPending'] = function undefined() { 13 | return this.$store.state[name].isPending; 14 | }, _Object$assign)); 15 | this.$options.methods = Object.assign({}, this.$options.methods, (_Object$assign2 = {}, _Object$assign2['getAsync' + upperFirst(camelCase(name))] = function undefined() { 16 | var _$store; 17 | 18 | return (_$store = this.$store).dispatch.apply(_$store, [name + '/getAsync'].concat(Array.prototype.slice.call(arguments))); 19 | }, _Object$assign2)); 20 | } 21 | }; -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Basic Example 6 | 7 | 8 |

Basic Example

9 |
10 | 11 | 12 | 13 | 14 | 15 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /example/server.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const exec = require('child_process').exec 3 | const Express = require('express') 4 | 5 | const app = new Express() 6 | const port = 3000 7 | 8 | app.use(Express.static('umd')) 9 | 10 | app.get('/*', (req, res) => { 11 | res.sendFile(path.join(__dirname, 'index.html')) 12 | }) 13 | 14 | app.listen(port, error => { 15 | /* eslint-disable no-console */ 16 | if (error) { 17 | console.error(error) 18 | } else { 19 | console.info( 20 | '🌎 Listening on port %s. Open up http://localhost:%s/ in your browser.', 21 | port, 22 | port 23 | ) 24 | } 25 | /* eslint-enable no-console */ 26 | }) 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@liqueflies/vuex-async-module", 3 | "version": "0.0.5", 4 | "description": "vuex async module generator.", 5 | "main": "dist/index.js", 6 | "author": { 7 | "name": "Lorenzo Girardi", 8 | "url": "https://github.com/liqueflies" 9 | }, 10 | "contributors": [ 11 | { 12 | "name": "Marco Solazzi", 13 | "url": "https://github.com/dwightjack" 14 | }, 15 | { 16 | "name": "Giovanni Rodighiero", 17 | "url": "https://github.com/giovanniRodighiero" 18 | } 19 | ], 20 | "homepage": "https://github.com/liqueflies/vuex-async-module", 21 | "unpkg": "umd/vuex-async-module.min.js", 22 | "jsnext:main": "es/index.js", 23 | "module": "es/index.js", 24 | "files": [ 25 | "dist", 26 | "es", 27 | "src", 28 | "umd" 29 | ], 30 | "scripts": { 31 | "prepublishOnly": "npm run build", 32 | "build": "npm run lint && npm test && npm run build:cjs && npm run build:es && npm run build:umd", 33 | "build:cjs": "rimraf dist && cross-env BABEL_ENV=cjs babel ./src -d dist --ignore umd.js", 34 | "build:es": "rimraf es && cross-env BABEL_ENV=es babel ./src -d es --ignore umd.js", 35 | "build:umd": "rimraf umd && cross-env BABEL_ENV=rollup rollup -c rollup.config.js", 36 | "example": "node example/server.js", 37 | "test": "jest --verbose --coverage", 38 | "lint": "eslint src/*.js tests/**/*.test.js" 39 | }, 40 | "keywords": [ 41 | "vue", 42 | "vuex", 43 | "async", 44 | "vue.js" 45 | ], 46 | "license": "MIT", 47 | "devDependencies": { 48 | "babel-cli": "6.26.0", 49 | "babel-core": "6.26.0", 50 | "babel-plugin-add-module-exports": "0.2.1", 51 | "babel-plugin-external-helpers": "6.22.0", 52 | "babel-plugin-transform-object-rest-spread": "6.26.0", 53 | "babel-preset-env": "1.6.1", 54 | "cross-env": "5.1.1", 55 | "eslint": "4.11.0", 56 | "eslint-plugin-html": "4.0.0-alpha.1", 57 | "eslint-plugin-vue-libs": "1.2.0", 58 | "express": "4.16.2", 59 | "jest": "21.2.1", 60 | "rimraf": "2.6.2", 61 | "rollup": "0.51.5", 62 | "rollup-plugin-babel": "3.0.2", 63 | "rollup-plugin-commonjs": "8.2.6", 64 | "rollup-plugin-node-resolve": "3.0.0", 65 | "rollup-plugin-replace": "2.0.0", 66 | "rollup-plugin-uglify": "2.0.1" 67 | }, 68 | "dependencies": { 69 | "lodash.camelcase": "4.3.0", 70 | "lodash.upperfirst": "4.3.1" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import commonjs from 'rollup-plugin-commonjs' 2 | import resolve from 'rollup-plugin-node-resolve' 3 | import babel from 'rollup-plugin-babel' 4 | import uglify from 'rollup-plugin-uglify' 5 | import replace from 'rollup-plugin-replace' 6 | 7 | import { version, name, license, author, homepage } from './package.json' 8 | 9 | const banner = ` 10 | /*! ${name} - v${version} 11 | * ${homepage} 12 | * Copyright (c) ${(new Date().getFullYear())} - ${author}; 13 | * Licensed ${license} 14 | */ 15 | ` 16 | 17 | const plugins = [ 18 | resolve(), 19 | commonjs(), 20 | babel({ 21 | exclude: 'node_modules/**' // only transpile our source code 22 | }) 23 | ] 24 | 25 | const baseConfig = { 26 | input: 'src/umd.js', 27 | banner, 28 | sourcemap: true 29 | } 30 | 31 | export default [ 32 | Object.assign({ 33 | output: { 34 | exports: 'named', 35 | file: 'umd/vuex-async-module.js', 36 | name: 'VuexAsyncModule', 37 | format: 'umd', 38 | }, 39 | plugins: [replace({ 40 | 'process.env.NODE_ENV': JSON.stringify('development') 41 | }), ...plugins] 42 | }, baseConfig), 43 | Object.assign({ 44 | output: { 45 | exports: 'named', 46 | file: 'umd/vuex-async-module.min.js', 47 | name: 'VuexAsyncModule', 48 | format: 'umd', 49 | }, 50 | plugins: [replace({ 51 | 'process.env.NODE_ENV': JSON.stringify('production') 52 | }), ...plugins, uglify({ 53 | warnings: false, 54 | mangle: true, 55 | compress: { 56 | pure_funcs: ['warn'] 57 | }, 58 | output: { 59 | comments: /^!/ 60 | } 61 | })] 62 | }, baseConfig) 63 | ] -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import asyncModuleMixin from './mixin' 2 | 3 | export { asyncModuleMixin } 4 | 5 | export function getDefaultState () { 6 | return { 7 | isPending: true, 8 | statusCode: null, 9 | data: null, 10 | errors: null 11 | } 12 | } 13 | 14 | export function getDefaultTypes () { 15 | return { 16 | SET_RESPONSE_DATA: 'SET_RESPONSE_DATA', 17 | SET_IS_PENDING: 'SET_IS_PENDING', 18 | SET_STATUS_CODE: 'SET_STATUS_CODE', 19 | SET_ERRORS: 'SET_ERRORS' 20 | } 21 | } 22 | 23 | export function getDefaultMutations () { 24 | const types = getDefaultTypes() 25 | return { 26 | [types.SET_RESPONSE_DATA]: (state, data) => { 27 | state.data = data 28 | return state.data 29 | }, 30 | [types.SET_IS_PENDING]: (state, isPending) => { 31 | state.isPending = isPending 32 | return state.isPending 33 | }, 34 | [types.SET_STATUS_CODE]: (state, status) => { 35 | state.statusCode = status 36 | return state.statusCode 37 | }, 38 | [types.SET_ERRORS]: (state, errors) => { 39 | state.errors = errors 40 | return state.errors 41 | } 42 | } 43 | } 44 | 45 | export function getDefaultActions (xhr) { 46 | const { 47 | SET_RESPONSE_DATA, 48 | SET_IS_PENDING, 49 | SET_STATUS_CODE, 50 | SET_ERRORS } = getDefaultTypes() 51 | return { 52 | getAsync ({ state, commit }, { url, forceUpdate = false }) { 53 | if (state.isPending || forceUpdate) { 54 | return xhr(url) 55 | .then(response => { 56 | commit(SET_RESPONSE_DATA, response.data) 57 | commit(SET_STATUS_CODE, response.status) 58 | commit(SET_IS_PENDING, false) 59 | }) 60 | .catch(response => { 61 | commit(SET_ERRORS, response.errors) 62 | commit(SET_STATUS_CODE, response.status) 63 | commit(SET_IS_PENDING, false) 64 | }) 65 | } else { 66 | return Promise.resolve(null) 67 | } 68 | } 69 | } 70 | } 71 | 72 | export default function getAsyncModule (options = {}) { 73 | const opts = Object.assign({}, options) // for extensibility 74 | if (opts.xhr === undefined) { 75 | throw new TypeError('You must provide a valid XHR transport library in `options.xhr`') 76 | } 77 | return { 78 | namespaced: true, 79 | state: getDefaultState(), 80 | mutations: getDefaultMutations(), 81 | actions: getDefaultActions(opts.xhr) 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/mixin.js: -------------------------------------------------------------------------------- 1 | import camelCase from 'lodash.camelcase' 2 | import upperFirst from 'lodash.upperfirst' 3 | 4 | export default { 5 | beforeCreate () { 6 | const { name } = this.$options 7 | this.$options.computed = Object.assign( 8 | {}, 9 | this.$options.computed, 10 | { 11 | [name]: function () { 12 | return this.$store.state[name].data 13 | }, 14 | [`${name}RequestIsPending`]: function () { 15 | return this.$store.state[name].isPending 16 | } 17 | } 18 | ) 19 | this.$options.methods = Object.assign( 20 | {}, 21 | this.$options.methods, 22 | { 23 | [`getAsync${upperFirst(camelCase(name))}`]: function () { 24 | return this.$store.dispatch(`${name}/getAsync`, ...arguments) 25 | } 26 | } 27 | ) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/umd.js: -------------------------------------------------------------------------------- 1 | import getAsyncModule from './index' 2 | import asyncModuleMixin from './mixin' 3 | 4 | export { asyncModuleMixin } 5 | export default getAsyncModule 6 | -------------------------------------------------------------------------------- /tests/unit/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['../../.eslintrc.js'], 3 | env: { 4 | browser: true, 5 | jest: true 6 | } 7 | } -------------------------------------------------------------------------------- /tests/unit/actions.test.js: -------------------------------------------------------------------------------- 1 | import { getDefaultActions, getDefaultTypes } from '../../src/index' 2 | 3 | describe('getDefaultActions', () => { 4 | test('should be defined', () => { 5 | expect(getDefaultActions).toBeDefined() 6 | }) 7 | 8 | test('should be a function', () => { 9 | expect(getDefaultActions).toEqual(expect.any(Function)) 10 | }) 11 | 12 | test('should return an function', () => { 13 | expect(getDefaultActions()).toEqual(expect.any(Object)) 14 | }) 15 | 16 | test('should return an object that contains the correct properties', () => { 17 | expect(getDefaultActions(() => {})).toMatchObject({ 18 | getAsync: expect.any(Function) 19 | }) 20 | }) 21 | }) 22 | 23 | describe('getDefaultActions lifecycle', () => { 24 | let mockRequestSuccess 25 | let mockRequestError 26 | let commit 27 | let state 28 | 29 | const successResponse = { status: 200, data: Object.assign({}) } 30 | const error = { errors: new Error('my error'), status: 500 } 31 | const types = getDefaultTypes() 32 | const url = '' 33 | 34 | beforeEach(() => { 35 | // https://facebook.github.io/jest/docs/en/mock-functions.html 36 | mockRequestSuccess = jest.fn((url) => Promise.resolve(successResponse)) 37 | mockRequestError = jest.fn((url) => Promise.reject(error)) 38 | commit = jest.fn() 39 | state = { isPending: true } 40 | }) 41 | 42 | test('returns a promise-like interface', () => { 43 | const { getAsync } = getDefaultActions(mockRequestSuccess) 44 | const resp = getAsync({ commit, state }, { url }) 45 | 46 | expect(resp.then).toEqual(expect.any(Function)) 47 | expect(resp.catch).toEqual(expect.any(Function)) 48 | }) 49 | 50 | test('returned promise should resolve to a `null` value if data was already loaded', (done) => { 51 | const { getAsync } = getDefaultActions(mockRequestSuccess) 52 | state = { isPending: false } 53 | const resp = getAsync({ commit, state }, { url }) 54 | 55 | expect(resp.then((res) => { 56 | expect(res).toBeNull() 57 | done() 58 | })) 59 | }) 60 | 61 | test('commits pending to `false` on success', (done) => { 62 | const { getAsync } = getDefaultActions(mockRequestSuccess) 63 | const resp = getAsync({ commit, state }, { url }) 64 | 65 | resp.then(() => { 66 | expect(commit).toBeCalledWith(types.SET_IS_PENDING, false) 67 | done() 68 | }) 69 | }) 70 | 71 | test('commits statusCode on success', (done) => { 72 | const { getAsync } = getDefaultActions(mockRequestSuccess) 73 | const resp = getAsync({ commit, state }, { url }) 74 | 75 | resp.then(() => { 76 | expect(commit).toBeCalledWith(types.SET_STATUS_CODE, successResponse.status) 77 | done() 78 | }) 79 | }) 80 | 81 | test('commits response data on success', (done) => { 82 | const { getAsync } = getDefaultActions(mockRequestSuccess) 83 | const resp = getAsync({ commit, state }, { url }) 84 | 85 | resp.then(() => { 86 | expect(commit).toBeCalledWith(types.SET_RESPONSE_DATA, successResponse.data) 87 | done() 88 | }) 89 | }) 90 | 91 | test('commits response error on failure', (done) => { 92 | const { getAsync } = getDefaultActions(mockRequestError) 93 | const resp = getAsync({ commit, state }, { url }) 94 | 95 | resp.then(() => { 96 | expect(commit).toBeCalledWith(types.SET_ERRORS, error.errors) 97 | done() 98 | }) 99 | }) 100 | 101 | test('commits statusCode error on failure', (done) => { 102 | const { getAsync } = getDefaultActions(mockRequestError) 103 | const resp = getAsync({ commit, state }, { url }) 104 | 105 | resp.then(() => { 106 | expect(commit).toBeCalledWith(types.SET_STATUS_CODE, error.status) 107 | done() 108 | }) 109 | }) 110 | 111 | test('commits pending to `false` on failure', (done) => { 112 | const { getAsync } = getDefaultActions(mockRequestError) 113 | const resp = getAsync({ commit, state }, { url }) 114 | 115 | resp.then(() => { 116 | expect(commit).toBeCalledWith(types.SET_IS_PENDING, false) 117 | done() 118 | }) 119 | }) 120 | }) 121 | -------------------------------------------------------------------------------- /tests/unit/index.test.js: -------------------------------------------------------------------------------- 1 | import getAsyncModule from '../../src/index' 2 | 3 | describe('getAsyncModule', () => { 4 | test('should be defined', () => { 5 | expect(getAsyncModule).toBeDefined() 6 | }) 7 | 8 | test('should be a function', () => { 9 | expect(getAsyncModule).toEqual(expect.any(Function)) 10 | }) 11 | 12 | test('throws on xhr options missing', () => { 13 | expect(getAsyncModule).toThrow() 14 | }) 15 | 16 | test('should return an object', () => { 17 | expect(getAsyncModule({ xhr: Promise.resolve })).toEqual(expect.any(Object)) 18 | }) 19 | 20 | test('object should have valid properties', () => { 21 | expect(getAsyncModule({ xhr: Promise.resolve })).toMatchObject({ 22 | namespaced: true, 23 | state: expect.any(Object), 24 | mutations: expect.any(Object), 25 | actions: expect.any(Object) 26 | }) 27 | }) 28 | }) 29 | -------------------------------------------------------------------------------- /tests/unit/mixin.test.js: -------------------------------------------------------------------------------- 1 | import mixin from '../../src/mixin' 2 | 3 | describe('vuex-async-module mixin', () => { 4 | test('should be an object', () => { 5 | expect(mixin).toEqual(expect.any(Object)) 6 | }) 7 | 8 | test('should have correct properties', () => { 9 | expect(mixin).toMatchObject({ 10 | beforeCreate: expect.any(Function) 11 | }) 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /tests/unit/mutations.test.js: -------------------------------------------------------------------------------- 1 | import { getDefaultMutations, getDefaultTypes } from '../../src/index' 2 | 3 | describe('getDefaultMutations', () => { 4 | test('should be defined', () => { 5 | expect(getDefaultMutations).toBeDefined() 6 | }) 7 | 8 | test('should be a function', () => { 9 | expect(getDefaultMutations).toEqual(expect.any(Function)) 10 | }) 11 | 12 | test('should return an object', () => { 13 | expect(getDefaultMutations()).toEqual(expect.any(Object)) 14 | }) 15 | 16 | test('should return an object that contains the correct properties', () => { 17 | const types = getDefaultTypes() 18 | expect(getDefaultMutations()).toMatchObject({ 19 | [types.SET_RESPONSE_DATA]: expect.any(Function), 20 | [types.SET_IS_PENDING]: expect.any(Function), 21 | [types.SET_STATUS_CODE]: expect.any(Function), 22 | [types.SET_ERRORS]: expect.any(Function) 23 | }) 24 | }) 25 | }) 26 | 27 | describe('getDefaultMutations lifecycle', () => { 28 | let result 29 | let state 30 | 31 | const types = getDefaultTypes() 32 | 33 | test('should update successfully state with pending result', () => { 34 | state = { isPending: true } 35 | result = false 36 | 37 | const rsp = getDefaultMutations()[types.SET_IS_PENDING](state, result) 38 | expect(rsp).toBe(result) 39 | }) 40 | 41 | test('should update successfully state with response payload result', () => { 42 | state = { data: null } 43 | result = {} 44 | 45 | const rsp = getDefaultMutations()[types.SET_RESPONSE_DATA](state, result) 46 | expect(rsp).toBe(result) 47 | }) 48 | 49 | test('should update successfully state with status code result', () => { 50 | state = { statusCode: null } 51 | result = 400 52 | 53 | const rsp = getDefaultMutations()[types.SET_STATUS_CODE](state, result) 54 | expect(rsp).toBe(result) 55 | }) 56 | 57 | test('should update successfully state with given error result', () => { 58 | state = { errors: null } 59 | result = new Error('my error') 60 | 61 | const rsp = getDefaultMutations()[types.SET_ERRORS](state, result) 62 | expect(rsp).toBe(result) 63 | }) 64 | }) 65 | -------------------------------------------------------------------------------- /tests/unit/state.test.js: -------------------------------------------------------------------------------- 1 | import { getDefaultState } from '../../src/index' 2 | 3 | describe('getDefaultState', () => { 4 | test('getDefaultState should be defined', () => { 5 | expect(getDefaultState).toBeDefined() 6 | }) 7 | 8 | test('getDefaultState should be a function', () => { 9 | expect(getDefaultState).toEqual(expect.any(Function)) 10 | }) 11 | 12 | test('should return an object', () => { 13 | expect(getDefaultState()).toEqual(expect.any(Object)) 14 | }) 15 | 16 | test('should return an object that contains the right keys', () => { 17 | const state = { 18 | isPending: true, 19 | statusCode: null, 20 | data: null, 21 | errors: null 22 | } 23 | expect(getDefaultState()).toEqual(state) 24 | }) 25 | 26 | test('should return an object that have all the same properties', () => { 27 | const state = getDefaultState() 28 | expect(getDefaultState()).toEqual(state) 29 | }) 30 | 31 | test('should return an object that is not exact same state', () => { 32 | const state = getDefaultState() 33 | expect(getDefaultState()).not.toBe(state) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /tests/unit/types.test.js: -------------------------------------------------------------------------------- 1 | import { getDefaultTypes } from '../../src/index' 2 | 3 | describe('getDefaultTypes', () => { 4 | test('should be defined', () => { 5 | expect(getDefaultTypes).toBeDefined() 6 | }) 7 | 8 | test('should be a function', () => { 9 | expect(getDefaultTypes).toEqual(expect.any(Function)) 10 | }) 11 | 12 | test('should return an object', () => { 13 | expect(getDefaultTypes()).toEqual(expect.any(Object)) 14 | }) 15 | 16 | test('should return an object that contains the correct properties', () => { 17 | const types = { 18 | SET_RESPONSE_DATA: 'SET_RESPONSE_DATA', 19 | SET_IS_PENDING: 'SET_IS_PENDING', 20 | SET_STATUS_CODE: 'SET_STATUS_CODE', 21 | SET_ERRORS: 'SET_ERRORS' 22 | } 23 | expect(getDefaultTypes()).toEqual(types) 24 | }) 25 | 26 | test('should return an object that have all the same properties', () => { 27 | const state = getDefaultTypes() 28 | expect(getDefaultTypes()).toEqual(state) 29 | }) 30 | 31 | test('should return an object that is not exact same state', () => { 32 | const state = getDefaultTypes() 33 | expect(getDefaultTypes()).not.toBe(state) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /umd/vuex-async-module.js: -------------------------------------------------------------------------------- 1 | 2 | /*! @liqueflies/vuex-async-module - v0.0.5 3 | * https://github.com/liqueflies/vuex-async-module 4 | * Copyright (c) 2017 - [object Object]; 5 | * Licensed MIT 6 | */ 7 | 8 | (function (global, factory) { 9 | typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 10 | typeof define === 'function' && define.amd ? define(['exports'], factory) : 11 | (factory((global.VuexAsyncModule = {}))); 12 | }(this, (function (exports) { 'use strict'; 13 | 14 | var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; 15 | 16 | /** 17 | * lodash (Custom Build) 18 | * Build: `lodash modularize exports="npm" -o ./` 19 | * Copyright jQuery Foundation and other contributors 20 | * Released under MIT license 21 | * Based on Underscore.js 1.8.3 22 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 23 | */ 24 | 25 | /** Used as references for various `Number` constants. */ 26 | var INFINITY = 1 / 0; 27 | 28 | /** `Object#toString` result references. */ 29 | var symbolTag = '[object Symbol]'; 30 | 31 | /** Used to match words composed of alphanumeric characters. */ 32 | var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; 33 | 34 | /** Used to match Latin Unicode letters (excluding mathematical operators). */ 35 | var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; 36 | 37 | /** Used to compose unicode character classes. */ 38 | var rsAstralRange = '\\ud800-\\udfff'; 39 | var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23'; 40 | var rsComboSymbolsRange = '\\u20d0-\\u20f0'; 41 | var rsDingbatRange = '\\u2700-\\u27bf'; 42 | var rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff'; 43 | var rsMathOpRange = '\\xac\\xb1\\xd7\\xf7'; 44 | var rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf'; 45 | var rsPunctuationRange = '\\u2000-\\u206f'; 46 | var rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'; 47 | var rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde'; 48 | var rsVarRange = '\\ufe0e\\ufe0f'; 49 | var rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; 50 | 51 | /** Used to compose unicode capture groups. */ 52 | var rsApos = "['\u2019]"; 53 | var rsAstral = '[' + rsAstralRange + ']'; 54 | var rsBreak = '[' + rsBreakRange + ']'; 55 | var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; 56 | var rsDigits = '\\d+'; 57 | var rsDingbat = '[' + rsDingbatRange + ']'; 58 | var rsLower = '[' + rsLowerRange + ']'; 59 | var rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']'; 60 | var rsFitz = '\\ud83c[\\udffb-\\udfff]'; 61 | var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')'; 62 | var rsNonAstral = '[^' + rsAstralRange + ']'; 63 | var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; 64 | var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; 65 | var rsUpper = '[' + rsUpperRange + ']'; 66 | var rsZWJ = '\\u200d'; 67 | 68 | /** Used to compose unicode regexes. */ 69 | var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')'; 70 | var rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')'; 71 | var rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?'; 72 | var rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?'; 73 | var reOptMod = rsModifier + '?'; 74 | var rsOptVar = '[' + rsVarRange + ']?'; 75 | var rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*'; 76 | var rsSeq = rsOptVar + reOptMod + rsOptJoin; 77 | var rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; 78 | var rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; 79 | 80 | /** Used to match apostrophes. */ 81 | var reApos = RegExp(rsApos, 'g'); 82 | 83 | /** 84 | * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and 85 | * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). 86 | */ 87 | var reComboMark = RegExp(rsCombo, 'g'); 88 | 89 | /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ 90 | var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); 91 | 92 | /** Used to match complex or compound words. */ 93 | var reUnicodeWord = RegExp([ 94 | rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', 95 | rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', 96 | rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, 97 | rsUpper + '+' + rsOptUpperContr, 98 | rsDigits, 99 | rsEmoji 100 | ].join('|'), 'g'); 101 | 102 | /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ 103 | var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); 104 | 105 | /** Used to detect strings that need a more robust regexp to match words. */ 106 | var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; 107 | 108 | /** Used to map Latin Unicode letters to basic Latin letters. */ 109 | var deburredLetters = { 110 | // Latin-1 Supplement block. 111 | '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', 112 | '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', 113 | '\xc7': 'C', '\xe7': 'c', 114 | '\xd0': 'D', '\xf0': 'd', 115 | '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', 116 | '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', 117 | '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', 118 | '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', 119 | '\xd1': 'N', '\xf1': 'n', 120 | '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', 121 | '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', 122 | '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', 123 | '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', 124 | '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', 125 | '\xc6': 'Ae', '\xe6': 'ae', 126 | '\xde': 'Th', '\xfe': 'th', 127 | '\xdf': 'ss', 128 | // Latin Extended-A block. 129 | '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', 130 | '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', 131 | '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', 132 | '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', 133 | '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', 134 | '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', 135 | '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', 136 | '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', 137 | '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', 138 | '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', 139 | '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', 140 | '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', 141 | '\u0134': 'J', '\u0135': 'j', 142 | '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', 143 | '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', 144 | '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', 145 | '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', 146 | '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', 147 | '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', 148 | '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', 149 | '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', 150 | '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', 151 | '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', 152 | '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', 153 | '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', 154 | '\u0163': 't', '\u0165': 't', '\u0167': 't', 155 | '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', 156 | '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', 157 | '\u0174': 'W', '\u0175': 'w', 158 | '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', 159 | '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', 160 | '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', 161 | '\u0132': 'IJ', '\u0133': 'ij', 162 | '\u0152': 'Oe', '\u0153': 'oe', 163 | '\u0149': "'n", '\u017f': 'ss' 164 | }; 165 | 166 | /** Detect free variable `global` from Node.js. */ 167 | var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; 168 | 169 | /** Detect free variable `self`. */ 170 | var freeSelf = typeof self == 'object' && self && self.Object === Object && self; 171 | 172 | /** Used as a reference to the global object. */ 173 | var root = freeGlobal || freeSelf || Function('return this')(); 174 | 175 | /** 176 | * A specialized version of `_.reduce` for arrays without support for 177 | * iteratee shorthands. 178 | * 179 | * @private 180 | * @param {Array} [array] The array to iterate over. 181 | * @param {Function} iteratee The function invoked per iteration. 182 | * @param {*} [accumulator] The initial value. 183 | * @param {boolean} [initAccum] Specify using the first element of `array` as 184 | * the initial value. 185 | * @returns {*} Returns the accumulated value. 186 | */ 187 | function arrayReduce(array, iteratee, accumulator, initAccum) { 188 | var index = -1, 189 | length = array ? array.length : 0; 190 | 191 | if (initAccum && length) { 192 | accumulator = array[++index]; 193 | } 194 | while (++index < length) { 195 | accumulator = iteratee(accumulator, array[index], index, array); 196 | } 197 | return accumulator; 198 | } 199 | 200 | /** 201 | * Converts an ASCII `string` to an array. 202 | * 203 | * @private 204 | * @param {string} string The string to convert. 205 | * @returns {Array} Returns the converted array. 206 | */ 207 | function asciiToArray(string) { 208 | return string.split(''); 209 | } 210 | 211 | /** 212 | * Splits an ASCII `string` into an array of its words. 213 | * 214 | * @private 215 | * @param {string} The string to inspect. 216 | * @returns {Array} Returns the words of `string`. 217 | */ 218 | function asciiWords(string) { 219 | return string.match(reAsciiWord) || []; 220 | } 221 | 222 | /** 223 | * The base implementation of `_.propertyOf` without support for deep paths. 224 | * 225 | * @private 226 | * @param {Object} object The object to query. 227 | * @returns {Function} Returns the new accessor function. 228 | */ 229 | function basePropertyOf(object) { 230 | return function(key) { 231 | return object == null ? undefined : object[key]; 232 | }; 233 | } 234 | 235 | /** 236 | * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A 237 | * letters to basic Latin letters. 238 | * 239 | * @private 240 | * @param {string} letter The matched letter to deburr. 241 | * @returns {string} Returns the deburred letter. 242 | */ 243 | var deburrLetter = basePropertyOf(deburredLetters); 244 | 245 | /** 246 | * Checks if `string` contains Unicode symbols. 247 | * 248 | * @private 249 | * @param {string} string The string to inspect. 250 | * @returns {boolean} Returns `true` if a symbol is found, else `false`. 251 | */ 252 | function hasUnicode(string) { 253 | return reHasUnicode.test(string); 254 | } 255 | 256 | /** 257 | * Checks if `string` contains a word composed of Unicode symbols. 258 | * 259 | * @private 260 | * @param {string} string The string to inspect. 261 | * @returns {boolean} Returns `true` if a word is found, else `false`. 262 | */ 263 | function hasUnicodeWord(string) { 264 | return reHasUnicodeWord.test(string); 265 | } 266 | 267 | /** 268 | * Converts `string` to an array. 269 | * 270 | * @private 271 | * @param {string} string The string to convert. 272 | * @returns {Array} Returns the converted array. 273 | */ 274 | function stringToArray(string) { 275 | return hasUnicode(string) 276 | ? unicodeToArray(string) 277 | : asciiToArray(string); 278 | } 279 | 280 | /** 281 | * Converts a Unicode `string` to an array. 282 | * 283 | * @private 284 | * @param {string} string The string to convert. 285 | * @returns {Array} Returns the converted array. 286 | */ 287 | function unicodeToArray(string) { 288 | return string.match(reUnicode) || []; 289 | } 290 | 291 | /** 292 | * Splits a Unicode `string` into an array of its words. 293 | * 294 | * @private 295 | * @param {string} The string to inspect. 296 | * @returns {Array} Returns the words of `string`. 297 | */ 298 | function unicodeWords(string) { 299 | return string.match(reUnicodeWord) || []; 300 | } 301 | 302 | /** Used for built-in method references. */ 303 | var objectProto = Object.prototype; 304 | 305 | /** 306 | * Used to resolve the 307 | * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) 308 | * of values. 309 | */ 310 | var objectToString = objectProto.toString; 311 | 312 | /** Built-in value references. */ 313 | var Symbol = root.Symbol; 314 | 315 | /** Used to convert symbols to primitives and strings. */ 316 | var symbolProto = Symbol ? Symbol.prototype : undefined; 317 | var symbolToString = symbolProto ? symbolProto.toString : undefined; 318 | 319 | /** 320 | * The base implementation of `_.slice` without an iteratee call guard. 321 | * 322 | * @private 323 | * @param {Array} array The array to slice. 324 | * @param {number} [start=0] The start position. 325 | * @param {number} [end=array.length] The end position. 326 | * @returns {Array} Returns the slice of `array`. 327 | */ 328 | function baseSlice(array, start, end) { 329 | var index = -1, 330 | length = array.length; 331 | 332 | if (start < 0) { 333 | start = -start > length ? 0 : (length + start); 334 | } 335 | end = end > length ? length : end; 336 | if (end < 0) { 337 | end += length; 338 | } 339 | length = start > end ? 0 : ((end - start) >>> 0); 340 | start >>>= 0; 341 | 342 | var result = Array(length); 343 | while (++index < length) { 344 | result[index] = array[index + start]; 345 | } 346 | return result; 347 | } 348 | 349 | /** 350 | * The base implementation of `_.toString` which doesn't convert nullish 351 | * values to empty strings. 352 | * 353 | * @private 354 | * @param {*} value The value to process. 355 | * @returns {string} Returns the string. 356 | */ 357 | function baseToString(value) { 358 | // Exit early for strings to avoid a performance hit in some environments. 359 | if (typeof value == 'string') { 360 | return value; 361 | } 362 | if (isSymbol(value)) { 363 | return symbolToString ? symbolToString.call(value) : ''; 364 | } 365 | var result = (value + ''); 366 | return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 367 | } 368 | 369 | /** 370 | * Casts `array` to a slice if it's needed. 371 | * 372 | * @private 373 | * @param {Array} array The array to inspect. 374 | * @param {number} start The start position. 375 | * @param {number} [end=array.length] The end position. 376 | * @returns {Array} Returns the cast slice. 377 | */ 378 | function castSlice(array, start, end) { 379 | var length = array.length; 380 | end = end === undefined ? length : end; 381 | return (!start && end >= length) ? array : baseSlice(array, start, end); 382 | } 383 | 384 | /** 385 | * Creates a function like `_.lowerFirst`. 386 | * 387 | * @private 388 | * @param {string} methodName The name of the `String` case method to use. 389 | * @returns {Function} Returns the new case function. 390 | */ 391 | function createCaseFirst(methodName) { 392 | return function(string) { 393 | string = toString(string); 394 | 395 | var strSymbols = hasUnicode(string) 396 | ? stringToArray(string) 397 | : undefined; 398 | 399 | var chr = strSymbols 400 | ? strSymbols[0] 401 | : string.charAt(0); 402 | 403 | var trailing = strSymbols 404 | ? castSlice(strSymbols, 1).join('') 405 | : string.slice(1); 406 | 407 | return chr[methodName]() + trailing; 408 | }; 409 | } 410 | 411 | /** 412 | * Creates a function like `_.camelCase`. 413 | * 414 | * @private 415 | * @param {Function} callback The function to combine each word. 416 | * @returns {Function} Returns the new compounder function. 417 | */ 418 | function createCompounder(callback) { 419 | return function(string) { 420 | return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); 421 | }; 422 | } 423 | 424 | /** 425 | * Checks if `value` is object-like. A value is object-like if it's not `null` 426 | * and has a `typeof` result of "object". 427 | * 428 | * @static 429 | * @memberOf _ 430 | * @since 4.0.0 431 | * @category Lang 432 | * @param {*} value The value to check. 433 | * @returns {boolean} Returns `true` if `value` is object-like, else `false`. 434 | * @example 435 | * 436 | * _.isObjectLike({}); 437 | * // => true 438 | * 439 | * _.isObjectLike([1, 2, 3]); 440 | * // => true 441 | * 442 | * _.isObjectLike(_.noop); 443 | * // => false 444 | * 445 | * _.isObjectLike(null); 446 | * // => false 447 | */ 448 | function isObjectLike(value) { 449 | return !!value && typeof value == 'object'; 450 | } 451 | 452 | /** 453 | * Checks if `value` is classified as a `Symbol` primitive or object. 454 | * 455 | * @static 456 | * @memberOf _ 457 | * @since 4.0.0 458 | * @category Lang 459 | * @param {*} value The value to check. 460 | * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. 461 | * @example 462 | * 463 | * _.isSymbol(Symbol.iterator); 464 | * // => true 465 | * 466 | * _.isSymbol('abc'); 467 | * // => false 468 | */ 469 | function isSymbol(value) { 470 | return typeof value == 'symbol' || 471 | (isObjectLike(value) && objectToString.call(value) == symbolTag); 472 | } 473 | 474 | /** 475 | * Converts `value` to a string. An empty string is returned for `null` 476 | * and `undefined` values. The sign of `-0` is preserved. 477 | * 478 | * @static 479 | * @memberOf _ 480 | * @since 4.0.0 481 | * @category Lang 482 | * @param {*} value The value to process. 483 | * @returns {string} Returns the string. 484 | * @example 485 | * 486 | * _.toString(null); 487 | * // => '' 488 | * 489 | * _.toString(-0); 490 | * // => '-0' 491 | * 492 | * _.toString([1, 2, 3]); 493 | * // => '1,2,3' 494 | */ 495 | function toString(value) { 496 | return value == null ? '' : baseToString(value); 497 | } 498 | 499 | /** 500 | * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). 501 | * 502 | * @static 503 | * @memberOf _ 504 | * @since 3.0.0 505 | * @category String 506 | * @param {string} [string=''] The string to convert. 507 | * @returns {string} Returns the camel cased string. 508 | * @example 509 | * 510 | * _.camelCase('Foo Bar'); 511 | * // => 'fooBar' 512 | * 513 | * _.camelCase('--foo-bar--'); 514 | * // => 'fooBar' 515 | * 516 | * _.camelCase('__FOO_BAR__'); 517 | * // => 'fooBar' 518 | */ 519 | var camelCase = createCompounder(function(result, word, index) { 520 | word = word.toLowerCase(); 521 | return result + (index ? capitalize(word) : word); 522 | }); 523 | 524 | /** 525 | * Converts the first character of `string` to upper case and the remaining 526 | * to lower case. 527 | * 528 | * @static 529 | * @memberOf _ 530 | * @since 3.0.0 531 | * @category String 532 | * @param {string} [string=''] The string to capitalize. 533 | * @returns {string} Returns the capitalized string. 534 | * @example 535 | * 536 | * _.capitalize('FRED'); 537 | * // => 'Fred' 538 | */ 539 | function capitalize(string) { 540 | return upperFirst(toString(string).toLowerCase()); 541 | } 542 | 543 | /** 544 | * Deburrs `string` by converting 545 | * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) 546 | * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) 547 | * letters to basic Latin letters and removing 548 | * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). 549 | * 550 | * @static 551 | * @memberOf _ 552 | * @since 3.0.0 553 | * @category String 554 | * @param {string} [string=''] The string to deburr. 555 | * @returns {string} Returns the deburred string. 556 | * @example 557 | * 558 | * _.deburr('déjà vu'); 559 | * // => 'deja vu' 560 | */ 561 | function deburr(string) { 562 | string = toString(string); 563 | return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); 564 | } 565 | 566 | /** 567 | * Converts the first character of `string` to upper case. 568 | * 569 | * @static 570 | * @memberOf _ 571 | * @since 4.0.0 572 | * @category String 573 | * @param {string} [string=''] The string to convert. 574 | * @returns {string} Returns the converted string. 575 | * @example 576 | * 577 | * _.upperFirst('fred'); 578 | * // => 'Fred' 579 | * 580 | * _.upperFirst('FRED'); 581 | * // => 'FRED' 582 | */ 583 | var upperFirst = createCaseFirst('toUpperCase'); 584 | 585 | /** 586 | * Splits `string` into an array of its words. 587 | * 588 | * @static 589 | * @memberOf _ 590 | * @since 3.0.0 591 | * @category String 592 | * @param {string} [string=''] The string to inspect. 593 | * @param {RegExp|string} [pattern] The pattern to match words. 594 | * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 595 | * @returns {Array} Returns the words of `string`. 596 | * @example 597 | * 598 | * _.words('fred, barney, & pebbles'); 599 | * // => ['fred', 'barney', 'pebbles'] 600 | * 601 | * _.words('fred, barney, & pebbles', /[^, ]+/g); 602 | * // => ['fred', 'barney', '&', 'pebbles'] 603 | */ 604 | function words(string, pattern, guard) { 605 | string = toString(string); 606 | pattern = guard ? undefined : pattern; 607 | 608 | if (pattern === undefined) { 609 | return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); 610 | } 611 | return string.match(pattern) || []; 612 | } 613 | 614 | var lodash_camelcase = camelCase; 615 | 616 | /** 617 | * lodash (Custom Build) 618 | * Build: `lodash modularize exports="npm" -o ./` 619 | * Copyright jQuery Foundation and other contributors 620 | * Released under MIT license 621 | * Based on Underscore.js 1.8.3 622 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 623 | */ 624 | 625 | /** Used as references for various `Number` constants. */ 626 | var INFINITY$1 = 1 / 0; 627 | 628 | /** `Object#toString` result references. */ 629 | var symbolTag$1 = '[object Symbol]'; 630 | 631 | /** Used to compose unicode character classes. */ 632 | var rsAstralRange$1 = '\\ud800-\\udfff'; 633 | var rsComboMarksRange$1 = '\\u0300-\\u036f\\ufe20-\\ufe23'; 634 | var rsComboSymbolsRange$1 = '\\u20d0-\\u20f0'; 635 | var rsVarRange$1 = '\\ufe0e\\ufe0f'; 636 | 637 | /** Used to compose unicode capture groups. */ 638 | var rsAstral$1 = '[' + rsAstralRange$1 + ']'; 639 | var rsCombo$1 = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']'; 640 | var rsFitz$1 = '\\ud83c[\\udffb-\\udfff]'; 641 | var rsModifier$1 = '(?:' + rsCombo$1 + '|' + rsFitz$1 + ')'; 642 | var rsNonAstral$1 = '[^' + rsAstralRange$1 + ']'; 643 | var rsRegional$1 = '(?:\\ud83c[\\udde6-\\uddff]){2}'; 644 | var rsSurrPair$1 = '[\\ud800-\\udbff][\\udc00-\\udfff]'; 645 | var rsZWJ$1 = '\\u200d'; 646 | 647 | /** Used to compose unicode regexes. */ 648 | var reOptMod$1 = rsModifier$1 + '?'; 649 | var rsOptVar$1 = '[' + rsVarRange$1 + ']?'; 650 | var rsOptJoin$1 = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral$1, rsRegional$1, rsSurrPair$1].join('|') + ')' + rsOptVar$1 + reOptMod$1 + ')*'; 651 | var rsSeq$1 = rsOptVar$1 + reOptMod$1 + rsOptJoin$1; 652 | var rsSymbol$1 = '(?:' + [rsNonAstral$1 + rsCombo$1 + '?', rsCombo$1, rsRegional$1, rsSurrPair$1, rsAstral$1].join('|') + ')'; 653 | 654 | /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ 655 | var reUnicode$1 = RegExp(rsFitz$1 + '(?=' + rsFitz$1 + ')|' + rsSymbol$1 + rsSeq$1, 'g'); 656 | 657 | /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ 658 | var reHasUnicode$1 = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboMarksRange$1 + rsComboSymbolsRange$1 + rsVarRange$1 + ']'); 659 | 660 | /** Detect free variable `global` from Node.js. */ 661 | var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; 662 | 663 | /** Detect free variable `self`. */ 664 | var freeSelf$1 = typeof self == 'object' && self && self.Object === Object && self; 665 | 666 | /** Used as a reference to the global object. */ 667 | var root$1 = freeGlobal$1 || freeSelf$1 || Function('return this')(); 668 | 669 | /** 670 | * Converts an ASCII `string` to an array. 671 | * 672 | * @private 673 | * @param {string} string The string to convert. 674 | * @returns {Array} Returns the converted array. 675 | */ 676 | function asciiToArray$1(string) { 677 | return string.split(''); 678 | } 679 | 680 | /** 681 | * Checks if `string` contains Unicode symbols. 682 | * 683 | * @private 684 | * @param {string} string The string to inspect. 685 | * @returns {boolean} Returns `true` if a symbol is found, else `false`. 686 | */ 687 | function hasUnicode$1(string) { 688 | return reHasUnicode$1.test(string); 689 | } 690 | 691 | /** 692 | * Converts `string` to an array. 693 | * 694 | * @private 695 | * @param {string} string The string to convert. 696 | * @returns {Array} Returns the converted array. 697 | */ 698 | function stringToArray$1(string) { 699 | return hasUnicode$1(string) 700 | ? unicodeToArray$1(string) 701 | : asciiToArray$1(string); 702 | } 703 | 704 | /** 705 | * Converts a Unicode `string` to an array. 706 | * 707 | * @private 708 | * @param {string} string The string to convert. 709 | * @returns {Array} Returns the converted array. 710 | */ 711 | function unicodeToArray$1(string) { 712 | return string.match(reUnicode$1) || []; 713 | } 714 | 715 | /** Used for built-in method references. */ 716 | var objectProto$1 = Object.prototype; 717 | 718 | /** 719 | * Used to resolve the 720 | * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) 721 | * of values. 722 | */ 723 | var objectToString$1 = objectProto$1.toString; 724 | 725 | /** Built-in value references. */ 726 | var Symbol$1 = root$1.Symbol; 727 | 728 | /** Used to convert symbols to primitives and strings. */ 729 | var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : undefined; 730 | var symbolToString$1 = symbolProto$1 ? symbolProto$1.toString : undefined; 731 | 732 | /** 733 | * The base implementation of `_.slice` without an iteratee call guard. 734 | * 735 | * @private 736 | * @param {Array} array The array to slice. 737 | * @param {number} [start=0] The start position. 738 | * @param {number} [end=array.length] The end position. 739 | * @returns {Array} Returns the slice of `array`. 740 | */ 741 | function baseSlice$1(array, start, end) { 742 | var index = -1, 743 | length = array.length; 744 | 745 | if (start < 0) { 746 | start = -start > length ? 0 : (length + start); 747 | } 748 | end = end > length ? length : end; 749 | if (end < 0) { 750 | end += length; 751 | } 752 | length = start > end ? 0 : ((end - start) >>> 0); 753 | start >>>= 0; 754 | 755 | var result = Array(length); 756 | while (++index < length) { 757 | result[index] = array[index + start]; 758 | } 759 | return result; 760 | } 761 | 762 | /** 763 | * The base implementation of `_.toString` which doesn't convert nullish 764 | * values to empty strings. 765 | * 766 | * @private 767 | * @param {*} value The value to process. 768 | * @returns {string} Returns the string. 769 | */ 770 | function baseToString$1(value) { 771 | // Exit early for strings to avoid a performance hit in some environments. 772 | if (typeof value == 'string') { 773 | return value; 774 | } 775 | if (isSymbol$1(value)) { 776 | return symbolToString$1 ? symbolToString$1.call(value) : ''; 777 | } 778 | var result = (value + ''); 779 | return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; 780 | } 781 | 782 | /** 783 | * Casts `array` to a slice if it's needed. 784 | * 785 | * @private 786 | * @param {Array} array The array to inspect. 787 | * @param {number} start The start position. 788 | * @param {number} [end=array.length] The end position. 789 | * @returns {Array} Returns the cast slice. 790 | */ 791 | function castSlice$1(array, start, end) { 792 | var length = array.length; 793 | end = end === undefined ? length : end; 794 | return (!start && end >= length) ? array : baseSlice$1(array, start, end); 795 | } 796 | 797 | /** 798 | * Creates a function like `_.lowerFirst`. 799 | * 800 | * @private 801 | * @param {string} methodName The name of the `String` case method to use. 802 | * @returns {Function} Returns the new case function. 803 | */ 804 | function createCaseFirst$1(methodName) { 805 | return function(string) { 806 | string = toString$1(string); 807 | 808 | var strSymbols = hasUnicode$1(string) 809 | ? stringToArray$1(string) 810 | : undefined; 811 | 812 | var chr = strSymbols 813 | ? strSymbols[0] 814 | : string.charAt(0); 815 | 816 | var trailing = strSymbols 817 | ? castSlice$1(strSymbols, 1).join('') 818 | : string.slice(1); 819 | 820 | return chr[methodName]() + trailing; 821 | }; 822 | } 823 | 824 | /** 825 | * Checks if `value` is object-like. A value is object-like if it's not `null` 826 | * and has a `typeof` result of "object". 827 | * 828 | * @static 829 | * @memberOf _ 830 | * @since 4.0.0 831 | * @category Lang 832 | * @param {*} value The value to check. 833 | * @returns {boolean} Returns `true` if `value` is object-like, else `false`. 834 | * @example 835 | * 836 | * _.isObjectLike({}); 837 | * // => true 838 | * 839 | * _.isObjectLike([1, 2, 3]); 840 | * // => true 841 | * 842 | * _.isObjectLike(_.noop); 843 | * // => false 844 | * 845 | * _.isObjectLike(null); 846 | * // => false 847 | */ 848 | function isObjectLike$1(value) { 849 | return !!value && typeof value == 'object'; 850 | } 851 | 852 | /** 853 | * Checks if `value` is classified as a `Symbol` primitive or object. 854 | * 855 | * @static 856 | * @memberOf _ 857 | * @since 4.0.0 858 | * @category Lang 859 | * @param {*} value The value to check. 860 | * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. 861 | * @example 862 | * 863 | * _.isSymbol(Symbol.iterator); 864 | * // => true 865 | * 866 | * _.isSymbol('abc'); 867 | * // => false 868 | */ 869 | function isSymbol$1(value) { 870 | return typeof value == 'symbol' || 871 | (isObjectLike$1(value) && objectToString$1.call(value) == symbolTag$1); 872 | } 873 | 874 | /** 875 | * Converts `value` to a string. An empty string is returned for `null` 876 | * and `undefined` values. The sign of `-0` is preserved. 877 | * 878 | * @static 879 | * @memberOf _ 880 | * @since 4.0.0 881 | * @category Lang 882 | * @param {*} value The value to process. 883 | * @returns {string} Returns the string. 884 | * @example 885 | * 886 | * _.toString(null); 887 | * // => '' 888 | * 889 | * _.toString(-0); 890 | * // => '-0' 891 | * 892 | * _.toString([1, 2, 3]); 893 | * // => '1,2,3' 894 | */ 895 | function toString$1(value) { 896 | return value == null ? '' : baseToString$1(value); 897 | } 898 | 899 | /** 900 | * Converts the first character of `string` to upper case. 901 | * 902 | * @static 903 | * @memberOf _ 904 | * @since 4.0.0 905 | * @category String 906 | * @param {string} [string=''] The string to convert. 907 | * @returns {string} Returns the converted string. 908 | * @example 909 | * 910 | * _.upperFirst('fred'); 911 | * // => 'Fred' 912 | * 913 | * _.upperFirst('FRED'); 914 | * // => 'FRED' 915 | */ 916 | var upperFirst$1 = createCaseFirst$1('toUpperCase'); 917 | 918 | var lodash_upperfirst = upperFirst$1; 919 | 920 | var mixin = { 921 | beforeCreate: function beforeCreate() { 922 | var _Object$assign, _Object$assign2; 923 | 924 | var name = this.$options.name; 925 | 926 | this.$options.computed = Object.assign({}, this.$options.computed, (_Object$assign = {}, _Object$assign[name] = function () { 927 | return this.$store.state[name].data; 928 | }, _Object$assign[name + 'RequestIsPending'] = function undefined() { 929 | return this.$store.state[name].isPending; 930 | }, _Object$assign)); 931 | this.$options.methods = Object.assign({}, this.$options.methods, (_Object$assign2 = {}, _Object$assign2['getAsync' + lodash_upperfirst(lodash_camelcase(name))] = function undefined() { 932 | var _$store; 933 | 934 | return (_$store = this.$store).dispatch.apply(_$store, [name + '/getAsync'].concat(Array.prototype.slice.call(arguments))); 935 | }, _Object$assign2)); 936 | } 937 | }; 938 | 939 | function getDefaultState() { 940 | return { 941 | isPending: true, 942 | statusCode: null, 943 | data: null, 944 | errors: null 945 | }; 946 | } 947 | 948 | function getDefaultTypes() { 949 | return { 950 | SET_RESPONSE_DATA: 'SET_RESPONSE_DATA', 951 | SET_IS_PENDING: 'SET_IS_PENDING', 952 | SET_STATUS_CODE: 'SET_STATUS_CODE', 953 | SET_ERRORS: 'SET_ERRORS' 954 | }; 955 | } 956 | 957 | function getDefaultMutations() { 958 | var _ref; 959 | 960 | var types = getDefaultTypes(); 961 | return _ref = {}, _ref[types.SET_RESPONSE_DATA] = function (state, data) { 962 | state.data = data; 963 | return state.data; 964 | }, _ref[types.SET_IS_PENDING] = function (state, isPending) { 965 | state.isPending = isPending; 966 | return state.isPending; 967 | }, _ref[types.SET_STATUS_CODE] = function (state, status) { 968 | state.statusCode = status; 969 | return state.statusCode; 970 | }, _ref[types.SET_ERRORS] = function (state, errors) { 971 | state.errors = errors; 972 | return state.errors; 973 | }, _ref; 974 | } 975 | 976 | function getDefaultActions(xhr) { 977 | var _getDefaultTypes = getDefaultTypes(), 978 | SET_RESPONSE_DATA = _getDefaultTypes.SET_RESPONSE_DATA, 979 | SET_IS_PENDING = _getDefaultTypes.SET_IS_PENDING, 980 | SET_STATUS_CODE = _getDefaultTypes.SET_STATUS_CODE, 981 | SET_ERRORS = _getDefaultTypes.SET_ERRORS; 982 | 983 | return { 984 | getAsync: function getAsync(_ref2, _ref3) { 985 | var state = _ref2.state, 986 | commit = _ref2.commit; 987 | var url = _ref3.url, 988 | _ref3$forceUpdate = _ref3.forceUpdate, 989 | forceUpdate = _ref3$forceUpdate === undefined ? false : _ref3$forceUpdate; 990 | 991 | if (state.isPending || forceUpdate) { 992 | return xhr(url).then(function (response) { 993 | commit(SET_RESPONSE_DATA, response.data); 994 | commit(SET_STATUS_CODE, response.status); 995 | commit(SET_IS_PENDING, false); 996 | }).catch(function (response) { 997 | commit(SET_ERRORS, response.errors); 998 | commit(SET_STATUS_CODE, response.status); 999 | commit(SET_IS_PENDING, false); 1000 | }); 1001 | } else { 1002 | return Promise.resolve(null); 1003 | } 1004 | } 1005 | }; 1006 | } 1007 | 1008 | function getAsyncModule$1() { 1009 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 1010 | 1011 | var opts = Object.assign({}, options); // for extensibility 1012 | if (opts.xhr === undefined) { 1013 | throw new TypeError('You must provide a valid XHR transport library in `options.xhr`'); 1014 | } 1015 | return { 1016 | namespaced: true, 1017 | state: getDefaultState(), 1018 | mutations: getDefaultMutations(), 1019 | actions: getDefaultActions(opts.xhr) 1020 | }; 1021 | } 1022 | 1023 | exports.asyncModuleMixin = mixin; 1024 | exports['default'] = getAsyncModule$1; 1025 | 1026 | Object.defineProperty(exports, '__esModule', { value: true }); 1027 | 1028 | }))); 1029 | //# sourceMappingURL=vuex-async-module.js.map 1030 | -------------------------------------------------------------------------------- /umd/vuex-async-module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vuex-async-module.js","sources":["../node_modules/lodash.camelcase/index.js","../node_modules/lodash.upperfirst/index.js","../src/mixin.js","../src/index.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n rsUpper + '+' + rsOptUpperContr,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","import camelCase from 'lodash.camelcase'\nimport upperFirst from 'lodash.upperfirst'\n\nexport default {\n beforeCreate () {\n const { name } = this.$options\n this.$options.computed = Object.assign(\n {},\n this.$options.computed,\n {\n [name]: function () {\n return this.$store.state[name].data\n },\n [`${name}RequestIsPending`]: function () {\n return this.$store.state[name].isPending\n }\n }\n )\n this.$options.methods = Object.assign(\n {},\n this.$options.methods,\n {\n [`getAsync${upperFirst(camelCase(name))}`]: function () {\n return this.$store.dispatch(`${name}/getAsync`, ...arguments)\n }\n }\n )\n }\n}\n","import asyncModuleMixin from './mixin'\n\nexport { asyncModuleMixin }\n\nexport function getDefaultState () {\n return {\n isPending: true,\n statusCode: null,\n data: null,\n errors: null\n }\n}\n\nexport function getDefaultTypes () {\n return {\n SET_RESPONSE_DATA: 'SET_RESPONSE_DATA',\n SET_IS_PENDING: 'SET_IS_PENDING',\n SET_STATUS_CODE: 'SET_STATUS_CODE',\n SET_ERRORS: 'SET_ERRORS'\n }\n}\n\nexport function getDefaultMutations () {\n const types = getDefaultTypes()\n return {\n [types.SET_RESPONSE_DATA]: (state, data) => {\n state.data = data\n return state.data\n },\n [types.SET_IS_PENDING]: (state, isPending) => {\n state.isPending = isPending\n return state.isPending\n },\n [types.SET_STATUS_CODE]: (state, status) => {\n state.statusCode = status\n return state.statusCode\n },\n [types.SET_ERRORS]: (state, errors) => {\n state.errors = errors\n return state.errors\n }\n }\n}\n\nexport function getDefaultActions (xhr) {\n const {\n SET_RESPONSE_DATA,\n SET_IS_PENDING,\n SET_STATUS_CODE,\n SET_ERRORS } = getDefaultTypes()\n return {\n getAsync ({ state, commit }, { url, forceUpdate = false }) {\n if (state.isPending || forceUpdate) {\n return xhr(url)\n .then(response => {\n commit(SET_RESPONSE_DATA, response.data)\n commit(SET_STATUS_CODE, response.status)\n commit(SET_IS_PENDING, false)\n })\n .catch(response => {\n commit(SET_ERRORS, response.errors)\n commit(SET_STATUS_CODE, response.status)\n commit(SET_IS_PENDING, false)\n })\n } else {\n return Promise.resolve(null)\n }\n }\n }\n}\n\nexport default function getAsyncModule (options = {}) {\n const opts = Object.assign({}, options) // for extensibility\n if (opts.xhr === undefined) {\n throw new TypeError('You must provide a valid XHR transport library in `options.xhr`')\n }\n return {\n namespaced: true,\n state: getDefaultState(),\n mutations: getDefaultMutations(),\n actions: getDefaultActions(opts.xhr)\n }\n}\n"],"names":["global","INFINITY","symbolTag","rsAstralRange","rsComboMarksRange","rsComboSymbolsRange","rsVarRange","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsZWJ","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","reHasUnicode","freeGlobal","freeSelf","root","asciiToArray","hasUnicode","stringToArray","unicodeToArray","objectProto","objectToString","Symbol","symbolProto","symbolToString","baseSlice","baseToString","isSymbol","castSlice","createCaseFirst","toString","isObjectLike","upperFirst","name","$options","computed","Object","assign","$store","state","data","isPending","methods","camelCase","dispatch","arguments","getDefaultState","getDefaultTypes","getDefaultMutations","types","SET_RESPONSE_DATA","SET_IS_PENDING","SET_STATUS_CODE","status","statusCode","SET_ERRORS","errors","getDefaultActions","xhr","commit","url","forceUpdate","then","response","catch","Promise","resolve","getAsyncModule","options","opts","undefined","TypeError"],"mappings":"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Q,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC1E,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC1E,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG;EAC7B,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC1E,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC1E,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC3D,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC3D,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC3D,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC3D,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;EAC5C,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EA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"} -------------------------------------------------------------------------------- /umd/vuex-async-module.min.js: -------------------------------------------------------------------------------- 1 | /*! @liqueflies/vuex-async-module - v0.0.5 2 | * https://github.com/liqueflies/vuex-async-module 3 | * Copyright (c) 2017 - [object Object]; 4 | * Licensed MIT 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.VuexAsyncModule={})}(this,function(t){"use strict";function e(t){return Z.test(t)}function u(t){return e(t)?function(t){return t.match(z)||[]}(t):function(t){return t.split("")}(t)}function n(t){if("string"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&V.call(t)==l}(t))return J?J.call(t):"";var e=t+"";return"0"==e&&1/t==-a?"-0":e}function f(t,e,u){var n=t.length;return u=void 0===u?n:u,!e&&u>=n?t:function(t,e,u){var n=-1,f=t.length;e<0&&(e=-e>f?0:f+e),(u=u>f?f:u)<0&&(u+=f),f=e>u?0:u-e>>>0,e>>>=0;for(var r=Array(f);++n=n?t:function(t,e,u){var n=-1,f=t.length;e<0&&(e=-e>f?0:f+e),(u=u>f?f:u)<0&&(u+=f),f=e>u?0:u-e>>>0,e>>>=0;for(var r=Array(f);++n0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},t);if(void 0===e.xhr)throw new TypeError("You must provide a valid XHR transport library in `options.xhr`");return{namespaced:!0,state:{isPending:!0,statusCode:null,data:null,errors:null},mutations:function(){var t,e={SET_RESPONSE_DATA:"SET_RESPONSE_DATA",SET_IS_PENDING:"SET_IS_PENDING",SET_STATUS_CODE:"SET_STATUS_CODE",SET_ERRORS:"SET_ERRORS"};return t={},t[e.SET_RESPONSE_DATA]=function(t,e){return t.data=e,t.data},t[e.SET_IS_PENDING]=function(t,e){return t.isPending=e,t.isPending},t[e.SET_STATUS_CODE]=function(t,e){return t.statusCode=e,t.statusCode},t[e.SET_ERRORS]=function(t,e){return t.errors=e,t.errors},t}(),actions:function(t){var e={SET_RESPONSE_DATA:"SET_RESPONSE_DATA",SET_IS_PENDING:"SET_IS_PENDING",SET_STATUS_CODE:"SET_STATUS_CODE",SET_ERRORS:"SET_ERRORS"},u=e.SET_RESPONSE_DATA,n=e.SET_IS_PENDING,f=e.SET_STATUS_CODE,r=e.SET_ERRORS;return{getAsync:function(e,o){var i=e.state,c=e.commit,d=o.url,s=o.forceUpdate,a=void 0!==s&&s;return i.isPending||a?t(d).then(function(t){c(u,t.data),c(f,t.status),c(n,!1)}).catch(function(t){c(r,t.errors),c(f,t.status),c(n,!1)}):Promise.resolve(null)}}}(e.xhr)}},Object.defineProperty(t,"__esModule",{value:!0})}); 7 | //# sourceMappingURL=vuex-async-module.min.js.map 8 | -------------------------------------------------------------------------------- /umd/vuex-async-module.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vuex-async-module.min.js","sources":["../node_modules/lodash.camelcase/index.js","../node_modules/lodash.upperfirst/index.js","../src/mixin.js","../src/index.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n rsUpper + '+' + rsOptUpperContr,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","import camelCase from 'lodash.camelcase'\nimport upperFirst from 'lodash.upperfirst'\n\nexport default {\n beforeCreate () {\n const { name } = this.$options\n this.$options.computed = Object.assign(\n {},\n this.$options.computed,\n {\n [name]: function () {\n return this.$store.state[name].data\n },\n [`${name}RequestIsPending`]: function () {\n return this.$store.state[name].isPending\n }\n }\n )\n this.$options.methods = Object.assign(\n {},\n this.$options.methods,\n {\n [`getAsync${upperFirst(camelCase(name))}`]: function () {\n return this.$store.dispatch(`${name}/getAsync`, ...arguments)\n }\n }\n )\n }\n}\n","import asyncModuleMixin from './mixin'\n\nexport { asyncModuleMixin }\n\nexport function getDefaultState () {\n return {\n isPending: true,\n statusCode: null,\n data: null,\n errors: null\n }\n}\n\nexport function getDefaultTypes () {\n return {\n SET_RESPONSE_DATA: 'SET_RESPONSE_DATA',\n SET_IS_PENDING: 'SET_IS_PENDING',\n SET_STATUS_CODE: 'SET_STATUS_CODE',\n SET_ERRORS: 'SET_ERRORS'\n }\n}\n\nexport function getDefaultMutations () {\n const types = getDefaultTypes()\n return {\n [types.SET_RESPONSE_DATA]: (state, data) => {\n state.data = data\n return state.data\n },\n [types.SET_IS_PENDING]: (state, isPending) => {\n state.isPending = isPending\n return state.isPending\n },\n [types.SET_STATUS_CODE]: (state, status) => {\n state.statusCode = status\n return state.statusCode\n },\n [types.SET_ERRORS]: (state, errors) => {\n state.errors = errors\n return state.errors\n }\n }\n}\n\nexport function getDefaultActions (xhr) {\n const {\n SET_RESPONSE_DATA,\n SET_IS_PENDING,\n SET_STATUS_CODE,\n SET_ERRORS } = getDefaultTypes()\n return {\n getAsync ({ state, commit }, { url, forceUpdate = false }) {\n if (state.isPending || forceUpdate) {\n return xhr(url)\n .then(response => {\n commit(SET_RESPONSE_DATA, response.data)\n commit(SET_STATUS_CODE, response.status)\n commit(SET_IS_PENDING, false)\n })\n .catch(response => {\n commit(SET_ERRORS, response.errors)\n commit(SET_STATUS_CODE, response.status)\n commit(SET_IS_PENDING, false)\n })\n } else {\n return Promise.resolve(null)\n }\n }\n }\n}\n\nexport default function getAsyncModule (options = {}) {\n const opts = Object.assign({}, options) // for extensibility\n if (opts.xhr === undefined) {\n throw new TypeError('You must provide a valid XHR transport library in `options.xhr`')\n }\n return {\n namespaced: true,\n state: getDefaultState(),\n mutations: getDefaultMutations(),\n actions: getDefaultActions(opts.xhr)\n }\n}\n"],"names":["hasUnicode","string","reHasUnicode","test","stringToArray","match","reUnicode","unicodeToArray","split","asciiToArray","baseToString","value","isObjectLike","objectToString","call","symbolTag","isSymbol","symbolToString","result","INFINITY","castSlice","array","start","end","length","undefined","index","Array","baseSlice","toString","reAsciiWord","reLatin","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsLowerMisc","rsUpperMisc","reOptMod","rsSeq","join","rsEmoji","rsSymbol","reApos","RegExp","reComboMark","reUnicodeWord","reHasUnicodeWord","freeGlobal","global","Object","freeSelf","self","root","Function","deburrLetter","object","key","basePropertyOf","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","prototype","Symbol","symbolProto","camelCase","callback","iteratee","accumulator","initAccum","arrayReduce","pattern","guard","hasUnicodeWord","unicodeWords","asciiWords","words","replace","deburr","createCompounder","word","toLowerCase","upperFirst","capitalize","methodName","strSymbols","chr","charAt","trailing","slice","createCaseFirst","name","this","$options","computed","assign","$store","state","data","isPending","methods","dispatch","arguments","options","opts","xhr","TypeError","types","SET_RESPONSE_DATA","SET_IS_PENDING","SET_STATUS_CODE","status","statusCode","SET_ERRORS","errors","getDefaultMutations","commit","url","forceUpdate","then","response","catch","Promise","resolve","getDefaultActions"],"mappings":"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"} --------------------------------------------------------------------------------