From 9965dc0f189b03eef99aed9d178e519abd9616a0 Mon Sep 17 00:00:00 2001 From: Julio Marquez Date: Sat, 31 Mar 2018 13:38:19 -0400 Subject: [PATCH] Add Typescript typings and improve the building process --- .eslintrc.js | 6 +-- .gitignore | 2 + build/rollup.esm.config.js | 26 ++++++++-- build/rollup.umd.config.js | 81 +++++++++++++++++++++++--------- nuxt/plugin.js | 4 +- package.json | 25 +++++++--- src/index.js | 11 +---- src/store.js | 6 +-- sync/index.js => src/sync.js | 4 +- test/unit/specs/VuexSync.spec.js | 2 +- types/index.js | 6 +++ types/index.ts | 6 +++ types/test/index.js | 36 ++++++++++++++ types/test/index.ts | 40 ++++++++++++++++ types/test/tsconfig.json | 20 ++++++++ types/vue.d.ts | 16 +++++++ types/warehouse.d.ts | 68 +++++++++++++++++++++++++++ yarn.lock | 78 +++++++++++++++++++++++------- 18 files changed, 363 insertions(+), 74 deletions(-) rename sync/index.js => src/sync.js (98%) create mode 100644 types/index.js create mode 100644 types/index.ts create mode 100644 types/test/index.js create mode 100644 types/test/index.ts create mode 100644 types/test/tsconfig.json create mode 100644 types/vue.d.ts create mode 100644 types/warehouse.d.ts diff --git a/.eslintrc.js b/.eslintrc.js index d3eb5595..9a88fb9c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,11 +9,9 @@ module.exports = { browser: true, }, extends: [ - // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention - // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. - 'plugin:vue/essential', // https://github.com/standard/standard/blob/master/docs/RULES-en.md - 'standard' + 'standard', + 'plugin:vue-libs/recommended' ], // add your custom rules here rules: { diff --git a/.gitignore b/.gitignore index 928178f7..ffd704ed 100644 --- a/.gitignore +++ b/.gitignore @@ -452,6 +452,8 @@ __pycache__/ # End of https://www.gitignore.io/api/osx,node,linux,windows,sublimetext,visualstudio /dist/ +/sync.js +/store.js /test/unit/coverage/ # Editor directories and files diff --git a/build/rollup.esm.config.js b/build/rollup.esm.config.js index 25147000..16299884 100644 --- a/build/rollup.esm.config.js +++ b/build/rollup.esm.config.js @@ -14,10 +14,10 @@ const base = { export default [ Object.assign({}, base, { - input: 'src/store.js', + input: 'src/index.js', output: [ { - file: 'dist/store.js', + file: 'dist/vue-warehouse.esm.js', format: 'es' } ] @@ -26,8 +26,26 @@ export default [ input: 'src/index.js', output: [ { - file: 'dist/vue-warehouse.js', - format: 'es' + file: 'dist/vue-warehouse.common.js', + format: 'cjs' + } + ] + }), + Object.assign({}, base, { + input: 'src/sync.js', + output: [ + { + file: 'sync.js', + format: 'cjs' + } + ] + }), + Object.assign({}, base, { + input: 'src/store.js', + output: [ + { + file: 'store.js', + format: 'cjs' } ] }) diff --git a/build/rollup.umd.config.js b/build/rollup.umd.config.js index f894dc89..d104e296 100644 --- a/build/rollup.umd.config.js +++ b/build/rollup.umd.config.js @@ -7,37 +7,72 @@ import commonjs from 'rollup-plugin-commonjs' import uglify from 'rollup-plugin-uglify' import replace from 'rollup-plugin-replace' -const base = { - plugins: [ - resolve({ - browser: true, - preferBuiltins: false - }), - buble({ - transforms: { - dangerousForOf: true - }, - objectAssign: 'Object.assign' - }), - commonjs(), - replace({ - 'process.env': JSON.stringify({ - NODE_ENV: 'production' - }) - }), - uglify(), - filesize() - ], +const base = (activateUglify = false) => { + return { + plugins: [ + resolve({ + browser: true, + preferBuiltins: false + }), + buble({ + transforms: { + dangerousForOf: true + }, + objectAssign: 'Object.assign' + }), + commonjs(), + replace({ + 'process.env': JSON.stringify({ + NODE_ENV: 'production' + }) + }), + activateUglify ? uglify() : {}, + filesize() + ] + } } export default [ - Object.assign({}, base, { + Object.assign({}, base(true), { input: 'src/index.js', output: [ { name: 'VueWarehouse', exports: 'named', - file: 'dist/vue-warehouse.umd.min.js', + file: 'dist/vue-warehouse.min.js', + format: 'umd' + } + ] + }), + Object.assign({}, base(), { + input: 'src/index.js', + output: [ + { + name: 'VueWarehouse', + exports: 'named', + file: 'dist/vue-warehouse.js', + format: 'umd' + } + ] + }), + Object.assign({}, base(true), { + input: 'src/sync.js', + output: [ + { + name: 'VueWarehouseSync', + exports: 'named', + file: 'dist/vue-warehouse-sync.min.js', + format: 'umd' + } + ] + }), + Object.assign({}, base(), { + input: 'src/sync.js', + output: [ + { + name: 'VueWarehouseSync', + exports: 'named', + file: 'dist/vue-warehouse-sync.js', format: 'umd' } ] diff --git a/nuxt/plugin.js b/nuxt/plugin.js index 6ec509f8..ce3f9303 100644 --- a/nuxt/plugin.js +++ b/nuxt/plugin.js @@ -1,10 +1,10 @@ -import WarehouseStore from 'vue-warehouse/dist/store' +import WarehouseStore from 'vue-warehouse/store' <% if (typeof(options.vuex) !== 'undefined') { %> import WarehouseSync from 'vue-warehouse/sync' <% } %> <% if (typeof(options.moduleName) !== 'undefined') { %> -// Define store in options +// Define module name const moduleName = '<%= options.moduleName %>' <% } else { %> // Define default store diff --git a/package.json b/package.json index 3ca58dc3..fc9f967f 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,12 @@ { "name": "vue-warehouse", "version": "0.1.0b", - "description": "Cross-browser storage for Vue.js", - "main": "dist/vue-warehouse.umd.min.js", - "module": "dist/vue-warehouse.js", + "description": "A Cross-browser storage for Vue.js and Nuxt.js, with plugins support and easy extensibility based on Store.js", + "main": "dist/vue-warehouse.common.js", + "module": "dist/vue-warehouse.esm.js", + "unpkg": "dist/vue-warehouse.js", + "jsdelivr": "dist/vue-warehouse.js", + "typings": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/bazzite/vue-warehouse.git" @@ -13,14 +16,18 @@ }, "homepage": "https://www.bazzite.com/docs/vue-warehouse", "files": [ - "src", "dist", - "nuxt" + "nuxt", + "sync", + "types/*.d.ts", + "store.js", + "sync.js" ], "scripts": { "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", - "test": "npm run unit", + "test": "npm run lint && npm run unit && npm run test:types", + "test:types": "tsc -p types/test", "lint": "eslint --ext .js src test/unit", "report-coverage": "cat ./test/unit/coverage/lcov.info | ./node_modules/.bin/codecov", "build": "yarn build:esm && yarn build:umd", @@ -45,6 +52,9 @@ "license": "MIT", "peerDependencies": { "store": "^2.0.12", + "vue": "^2.5.0" + }, + "optionalDependencies": { "vuex": "^3.0.0" }, "devDependencies": { @@ -69,7 +79,7 @@ "eslint-plugin-node": "^6.0.1", "eslint-plugin-promise": "^3.4.0", "eslint-plugin-standard": "^3.0.1", - "eslint-plugin-vue": "^4.4.0", + "eslint-plugin-vue-libs": "^2.1.0", "jest": "^22.0.4", "rollup": "^0.57.1", "rollup-plugin-buble": "^0.19.2", @@ -81,6 +91,7 @@ "semver": "^5.3.0", "shelljs": "^0.8.1", "store": "^2.0.12", + "typescript": "^2.7.2", "vue": "^2.5.0", "vuex": "^3.0.0" }, diff --git a/src/index.js b/src/index.js index c097be45..ff2e938a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,16 +1,7 @@ import VueWarehouseStore from './store' const VueWarehouse = { - install ( - Vue, - options = { - store: null, - engine: null, - plugins: null, - storages: null, - moduleName: 'warehouse' - } - ) { + install (Vue, options = {}) { const moduleName = (options || {}).moduleName || 'warehouse' const warehouse = VueWarehouseStore(options) diff --git a/src/store.js b/src/store.js index 7de28b25..f4392148 100644 --- a/src/store.js +++ b/src/store.js @@ -1,13 +1,13 @@ -export default (options) => { +export default options => { let store = options.store const engine = options.engine if (options.storages && !engine) { - throw new Error("You must define an 'engine' when storages are defined") + throw new Error('You must define an \'engine\' when storages are defined') } if (!store && !engine) { - throw new Error("You must define a 'store' or an 'engine'") + throw new Error('You must define a \'store\' or an \'engine\'') } if (!options.storages || options.storages.length === 0) { diff --git a/sync/index.js b/src/sync.js similarity index 98% rename from sync/index.js rename to src/sync.js index 4f89b52f..c6cab258 100644 --- a/sync/index.js +++ b/src/sync.js @@ -1,7 +1,7 @@ // Based on https://github.com/vuejs/vuex-router-sync/blob/master/src/index.js const undefinedChanges = { action: undefined, - key: undefined, + key: '', value: undefined, oldValue: undefined } @@ -95,7 +95,7 @@ export default (store, warehouseStore, options) => { // sync warehouse on store change const warehouseUnwatch = store.watch( state => state[moduleName], - warehouse => { + (warehouse) => { if (warehouse === currentChanges) { return } diff --git a/test/unit/specs/VuexSync.spec.js b/test/unit/specs/VuexSync.spec.js index 01bf3bf9..8d239557 100644 --- a/test/unit/specs/VuexSync.spec.js +++ b/test/unit/specs/VuexSync.spec.js @@ -1,6 +1,6 @@ import Vue from 'vue' import Vuex from 'vuex' -import WarehouseSync from '@/../sync' +import WarehouseSync from '@/sync' import WarehouseStore from '@/store' Vue.use(Vuex) diff --git a/types/index.js b/types/index.js new file mode 100644 index 00000000..2daac5f2 --- /dev/null +++ b/types/index.js @@ -0,0 +1,6 @@ +import "./vue"; +import { VueWarehouse } from "./warehouse"; +export default VueWarehouse; +// export { +// VueWarehouseSync +// } from "./sync"; diff --git a/types/index.ts b/types/index.ts new file mode 100644 index 00000000..a39e76b8 --- /dev/null +++ b/types/index.ts @@ -0,0 +1,6 @@ +import "./vue"; +import { VueWarehouse } from "./warehouse"; + +export default VueWarehouse; + +export { sync, store } from "./warehouse"; diff --git a/types/test/index.js b/types/test/index.js new file mode 100644 index 00000000..46e8855c --- /dev/null +++ b/types/test/index.js @@ -0,0 +1,36 @@ +import Vue from "vue"; +// import Vuex from "vuex"; +import VueWarehouse from "../index"; +// import WarehouseSync from "../sync"; +// import WarehouseStore from '@/store' +var store = require("store"); +// Vue.use(Vuex); +Vue.use(VueWarehouse, { + store: store +}); +var moduleName = "warehouse"; +// WarehouseSync(Vue.prototype.$store, store, { +// moduleName: moduleName +// }); +// Set new user +Vue.prototype.$warehouse.set("user", "John"); +// Vue.prototype.$store.state[moduleName].key; +// Vue.prototype.$store.state[moduleName].value; +// Vue.prototype.$store.state[moduleName].oldValue; +// Update user +Vue.prototype.$warehouse.set("user", "Jane"); +// Vue.prototype.$store.state[moduleName].key; +// Vue.prototype.$store.state[moduleName].value; +// Vue.prototype.$store.state[moduleName].oldValue; +// Remove user +Vue.prototype.$warehouse.remove("user"); +// Vue.prototype.$store.state[moduleName].key; +// Vue.prototype.$store.state[moduleName].value; +// Vue.prototype.$store.state[moduleName].oldValue; +// Clear all values +Vue.prototype.$warehouse.set("user", "Jane"); +Vue.prototype.$warehouse.set("id", 1); +Vue.prototype.$warehouse.clearAll(); +// Vue.prototype.$store.state[moduleName].key; +// Vue.prototype.$store.state[moduleName].value; +// Vue.prototype.$store.state[moduleName].oldValue; diff --git a/types/test/index.ts b/types/test/index.ts new file mode 100644 index 00000000..9da66f45 --- /dev/null +++ b/types/test/index.ts @@ -0,0 +1,40 @@ +declare var require: any; + +import Vue from "vue"; +import Vuex from "vuex"; + +import VueWarehouse from "../index"; +import { sync as WarehouseSync } from "../index"; +import { store as WarehouseStore } from "../index"; + +const store = WarehouseStore({ + store: require("store") +}); + +Vue.use(Vuex); +Vue.use(VueWarehouse, { + store: store +}); + +const moduleName = "warehouse"; + +const VuexStore = new Vuex.Store({ + state: { msg: "foo" } +}); + +WarehouseSync(VuexStore, store, { + moduleName: moduleName +}); + +// Set new user +Vue.prototype.$warehouse.set("user", "John"); +// Update user +Vue.prototype.$warehouse.set("user", "Jane"); +// Remove user +Vue.prototype.$warehouse.remove("user"); +// Clear all values +Vue.$warehouse.clearAll(); + +Vue.prototype.$store.state[moduleName].key; +Vue.prototype.$store.state[moduleName].value; +Vue.prototype.$store.state[moduleName].oldValue; \ No newline at end of file diff --git a/types/test/tsconfig.json b/types/test/tsconfig.json new file mode 100644 index 00000000..a54bb23b --- /dev/null +++ b/types/test/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "strict": true, + "noEmit": true, + "lib": [ + "es5", + "es6", + "dom", + "es2015.promise", + "es2015.core" + ] + }, + "include": [ + "*.ts", + "../*.d.ts" + ] +} \ No newline at end of file diff --git a/types/vue.d.ts b/types/vue.d.ts new file mode 100644 index 00000000..c4d7d234 --- /dev/null +++ b/types/vue.d.ts @@ -0,0 +1,16 @@ +/** + * Augment the typings of Vue.js + */ + +import Vue from "vue"; +import { WarehouseStoreAPI } from "./warehouse"; + +declare module 'vue/types/vue' { + interface VueConstructor { + $warehouse: WarehouseStoreAPI + } + + interface Vue { + $warehouse: WarehouseStoreAPI; + } +} diff --git a/types/warehouse.d.ts b/types/warehouse.d.ts new file mode 100644 index 00000000..d7363569 --- /dev/null +++ b/types/warehouse.d.ts @@ -0,0 +1,68 @@ +import Vue, { PluginObject, PluginFunction } from "vue"; +import { Store } from "vuex"; + +export class VueWarehouse implements PluginObject { + install: PluginFunction; + + static install(pVue: typeof Vue, options?: VueWarehouseStoreOptions | undefined): void; +} + +// Sync +declare function sync( + store: Store, + warehouseStore: WarehouseStoreAPI, + options: WarehouseSyncOptions +): any; + +declare namespace sync { + const prototype: {}; +} + +// Internal Store +declare function store( + options: WarehouseStoreOptions +): WarehouseStoreAPI; + +declare namespace store { + const prototype: {}; +} + +// Interfaces +interface WarehouseStoreOptions { + store?: StoreJsAPI; + engine?: StoreJsEngine; + plugins?: Function[]; + storages?: any[]; +} + +interface VueWarehouseStoreOptions extends WarehouseStoreOptions { + moduleName?: string; +} + +export interface WarehouseStoreAPI extends StoreJsAPI { + _unsetForceCommit(): void; + _setForceCommit(): void; + _getForceCommit(): boolean; +} + +interface WarehouseSyncOptions { + moduleName?: string | null; +} + +interface StoreJsAPI { + readonly version: string; + readonly enabled: boolean; + get(key: string, optionalDefaultValue?: any): any; + set(key: string, value: any): any; + remove(key: string): void; + each(callback: (val: any, namespacedKey: string) => void): void; + clearAll(): void; + hasNamespace(namespace: string): boolean; + createStore(plugins?: Function[], namespace?: string): StoreJsAPI; + addPlugin(plugin: Function): void; + namespace(namespace: string): StoreJsAPI; +} + +interface StoreJsEngine { + createStore(storages: any[], plugins?: any[], namespace?: string): StoreJsAPI; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 59dc9eaa..08d3bdac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1528,12 +1528,40 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + domexception@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" dependencies: webidl-conversions "^4.0.2" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -1552,6 +1580,10 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -1630,6 +1662,12 @@ eslint-module-utils@^2.1.1: debug "^2.6.8" pkg-dir "^1.0.0" +eslint-plugin-html@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-4.0.2.tgz#0e56149e42c2ffc3f0df6261a8bb96b1a9f2280d" + dependencies: + htmlparser2 "^3.8.2" + eslint-plugin-import@^2.7.0: version "2.9.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" @@ -1662,11 +1700,11 @@ eslint-plugin-standard@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" -eslint-plugin-vue@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.4.0.tgz#bfc3a71f76bd0e139313e4425a807257ae42f768" +eslint-plugin-vue-libs@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue-libs/-/eslint-plugin-vue-libs-2.1.0.tgz#e7faf4ae11dad58553f63f907d6642e2d816dcef" dependencies: - vue-eslint-parser "^2.0.3" + eslint-plugin-html "^4.0.1" eslint-scope@^3.7.1, eslint-scope@~3.7.1: version "3.7.1" @@ -1722,7 +1760,7 @@ eslint@^4.15.0: table "4.0.2" text-table "~0.2.0" -espree@^3.5.2, espree@^3.5.4: +espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: @@ -2292,6 +2330,17 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +htmlparser2@^3.8.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + http-signature@~0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" @@ -2342,7 +2391,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -3774,7 +3823,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" dependencies: @@ -4627,6 +4676,10 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript@^2.7.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" + uglify-es@^3.3.7: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -4725,17 +4778,6 @@ vlq@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" -vue-eslint-parser@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" - dependencies: - debug "^3.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - lodash "^4.17.4" - vue@^2.5.0: version "2.5.16" resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.16.tgz#07edb75e8412aaeed871ebafa99f4672584a0085"