├── .gitignore
├── test
├── main.js
├── index.html
└── test.vue
├── bin
└── vue-dev-server.js
├── readSource.js
├── loadPkg.js
├── transformModuleImports.js
├── package.json
├── LICENSE
├── README.md
├── middleware.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 |
--------------------------------------------------------------------------------
/test/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './test.vue'
3 |
4 | new Vue({
5 | render: h => h(App)
6 | }).$mount('#app')
7 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue Dev Server
6 |
7 |
8 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/test/test.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ msg }}
3 |
4 |
5 |
14 |
15 |
20 |
--------------------------------------------------------------------------------
/bin/vue-dev-server.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const express = require('express')
4 | const { vueMiddleware } = require('../middleware')
5 |
6 | const app = express()
7 | const root = process.cwd();
8 |
9 | app.use(vueMiddleware())
10 |
11 | app.use(express.static(root))
12 |
13 | app.listen(3000, () => {
14 | console.log('server running at http://localhost:3000')
15 | })
16 |
--------------------------------------------------------------------------------
/readSource.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 | const fs = require('fs')
3 | const readFile = require('util').promisify(fs.readFile)
4 | const stat = require('util').promisify(fs.stat)
5 | const parseUrl = require('parseurl')
6 | const root = process.cwd()
7 |
8 | async function readSource(req) {
9 | const { pathname } = parseUrl(req)
10 | const filepath = path.resolve(root, pathname.replace(/^\//, ''))
11 | return {
12 | filepath,
13 | source: await readFile(filepath, 'utf-8'),
14 | updateTime: (await stat(filepath)).mtime.getTime()
15 | }
16 | }
17 |
18 | exports.readSource = readSource
19 |
--------------------------------------------------------------------------------
/loadPkg.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 | const path = require('path')
3 | const readFile = require('util').promisify(fs.readFile)
4 |
5 | async function loadPkg(pkg) {
6 | if (pkg === 'vue') {
7 | const dir = path.dirname(require.resolve('vue'))
8 | const filepath = path.join(dir, 'vue.esm.browser.js')
9 | return readFile(filepath)
10 | }
11 | else {
12 | // TODO
13 | // check if the package has a browser es module that can be used
14 | // otherwise bundle it with rollup on the fly?
15 | throw new Error('npm imports support are not ready yet.')
16 | }
17 | }
18 |
19 | exports.loadPkg = loadPkg
20 |
--------------------------------------------------------------------------------
/transformModuleImports.js:
--------------------------------------------------------------------------------
1 | const recast = require('recast')
2 | const isPkg = require('validate-npm-package-name')
3 |
4 | function transformModuleImports(code) {
5 | const ast = recast.parse(code)
6 | recast.types.visit(ast, {
7 | visitImportDeclaration(path) {
8 | const source = path.node.source.value
9 | if (!/^\.\/?/.test(source) && isPkg(source)) {
10 | path.node.source = recast.types.builders.literal(`/__modules/${source}`)
11 | }
12 | this.traverse(path)
13 | }
14 | })
15 | return recast.print(ast).code
16 | }
17 |
18 | exports.transformModuleImports = transformModuleImports
19 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vue/dev-server",
3 | "version": "0.1.1",
4 | "description": "Instant dev server for Vue single file components",
5 | "main": "middleware.js",
6 | "bin": {
7 | "vue-dev-server": "./bin/vue-dev-server.js"
8 | },
9 | "scripts": {
10 | "test": "cd test && node ../bin/vue-dev-server.js"
11 | },
12 | "author": "Evan You",
13 | "license": "MIT",
14 | "dependencies": {
15 | "@vue/component-compiler": "^3.6.0",
16 | "express": "^4.16.4",
17 | "lru-cache": "^5.1.1",
18 | "recast": "^0.17.3",
19 | "validate-npm-package-name": "^3.0.0",
20 | "vue": "^2.6.8",
21 | "vue-template-compiler": "^2.6.8"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2019 Evan You
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
13 | all 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
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # @vue/dev-server
2 |
3 | > **This is a proof of concept.**
4 | >
5 | > Imagine you can import Vue single-file components natively in your browser... without a build step.
6 |
7 | In an directory, create an `index.html`:
8 |
9 | ``` html
10 |
11 |
19 | ```
20 |
21 | In `App.vue`:
22 |
23 | ``` vue
24 |
25 | {{ msg }}
26 |
27 |
28 |
37 |
38 |
43 | ```
44 |
45 | Then:
46 |
47 | ``` bash
48 | npm i @vue/dev-server
49 | npx vue-dev-server
50 | ```
51 |
52 | ## How It Works
53 |
54 | - Imports are requested by the browser as native ES module imports - there's no bundling.
55 |
56 | - The server intercepts requests to `*.vue` files, compiles them on the fly, and sends them back as JavaScript.
57 |
58 | - For libraries that provide ES modules builds that work in browsers, just directly import them from a CDN.
59 |
60 | - Imports to npm packages inside `.js` files (package name only) are re-written on the fly to point to locally installed files. Currently, only `vue` is supported as a special case. Other packages will likely need to be transformed to be exposed as a native browser-targeting ES module.
61 |
62 | ## TODOs
63 |
64 | - [x] Caching
65 | - [ ] NPM module imports
66 | - [ ] Pre-processors
67 |
--------------------------------------------------------------------------------
/middleware.js:
--------------------------------------------------------------------------------
1 | const vueCompiler = require('@vue/component-compiler')
2 | const fs = require('fs')
3 | const stat = require('util').promisify(fs.stat)
4 | const root = process.cwd()
5 | const path = require('path')
6 | const parseUrl = require('parseurl')
7 | const { transformModuleImports } = require('./transformModuleImports')
8 | const { loadPkg } = require('./loadPkg')
9 | const { readSource } = require('./readSource')
10 |
11 | const defaultOptions = {
12 | cache: true
13 | }
14 |
15 | const vueMiddleware = (options = defaultOptions) => {
16 | let cache
17 | let time = {}
18 | if (options.cache) {
19 | const LRU = require('lru-cache')
20 |
21 | cache = new LRU({
22 | max: 500,
23 | length: function (n, key) { return n * 2 + key.length }
24 | })
25 | }
26 |
27 | const compiler = vueCompiler.createDefaultCompiler()
28 |
29 | function send(res, source, mime) {
30 | res.setHeader('Content-Type', mime)
31 | res.end(source)
32 | }
33 |
34 | function injectSourceMapToBlock (block, lang) {
35 | const map = Base64.toBase64(
36 | JSON.stringify(block.map)
37 | )
38 | let mapInject
39 |
40 | switch (lang) {
41 | case 'js': mapInject = `//# sourceMappingURL=data:application/json;base64,${map}\n`; break;
42 | case 'css': mapInject = `/*# sourceMappingURL=data:application/json;base64,${map}*/\n`; break;
43 | default: break;
44 | }
45 |
46 | return {
47 | ...block,
48 | code: mapInject + block.code
49 | }
50 | }
51 |
52 | function injectSourceMapToScript (script) {
53 | return injectSourceMapToBlock(script, 'js')
54 | }
55 |
56 | function injectSourceMapsToStyles (styles) {
57 | return styles.map(style => injectSourceMapToBlock(style, 'css'))
58 | }
59 |
60 | async function tryCache (key, checkUpdateTime = true) {
61 | const data = cache.get(key)
62 |
63 | if (checkUpdateTime) {
64 | const cacheUpdateTime = time[key]
65 | const fileUpdateTime = (await stat(path.resolve(root, key.replace(/^\//, '')))).mtime.getTime()
66 | if (cacheUpdateTime < fileUpdateTime) return null
67 | }
68 |
69 | return data
70 | }
71 |
72 | function cacheData (key, data, updateTime) {
73 | const old = cache.peek(key)
74 |
75 | if (old != data) {
76 | cache.set(key, data)
77 | if (updateTime) time[key] = updateTime
78 | return true
79 | } else return false
80 | }
81 |
82 | async function bundleSFC (req) {
83 | const { filepath, source, updateTime } = await readSource(req)
84 | const descriptorResult = compiler.compileToDescriptor(filepath, source)
85 | const assembledResult = vueCompiler.assemble(compiler, filepath, {
86 | ...descriptorResult,
87 | script: injectSourceMapToScript(descriptorResult.script),
88 | styles: injectSourceMapsToStyles(descriptorResult.styles)
89 | })
90 | return { ...assembledResult, updateTime }
91 | }
92 |
93 | return async (req, res, next) => {
94 | if (req.path.endsWith('.vue')) {
95 | const key = parseUrl(req).pathname
96 | let out = await tryCache(key)
97 |
98 | if (!out) {
99 | // Bundle Single-File Component
100 | const result = await bundleSFC(req)
101 | out = result
102 | cacheData(key, out, result.updateTime)
103 | }
104 |
105 | send(res, out.code, 'application/javascript')
106 | } else if (req.path.endsWith('.js')) {
107 | const key = parseUrl(req).pathname
108 | let out = await tryCache(key)
109 |
110 | if (!out) {
111 | // transform import statements
112 | const result = await readSource(req)
113 | out = transformModuleImports(result.source)
114 | cacheData(key, out, result.updateTime)
115 | }
116 |
117 | send(res, out, 'application/javascript')
118 | } else if (req.path.startsWith('/__modules/')) {
119 | const key = parseUrl(req).pathname
120 | const pkg = req.path.replace(/^\/__modules\//, '')
121 |
122 | let out = await tryCache(key, false) // Do not outdate modules
123 | if (!out) {
124 | out = (await loadPkg(pkg)).toString()
125 | cacheData(key, out, false) // Do not outdate modules
126 | }
127 |
128 | send(res, out, 'application/javascript')
129 | } else {
130 | next()
131 | }
132 | }
133 | }
134 |
135 | exports.vueMiddleware = vueMiddleware
136 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@vue/component-compiler-utils@^2.1.0":
6 | version "2.6.0"
7 | resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b"
8 | integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==
9 | dependencies:
10 | consolidate "^0.15.1"
11 | hash-sum "^1.0.2"
12 | lru-cache "^4.1.2"
13 | merge-source-map "^1.1.0"
14 | postcss "^7.0.14"
15 | postcss-selector-parser "^5.0.0"
16 | prettier "1.16.3"
17 | source-map "~0.6.1"
18 | vue-template-es2015-compiler "^1.9.0"
19 |
20 | "@vue/component-compiler@^3.6.0":
21 | version "3.6.0"
22 | resolved "https://registry.yarnpkg.com/@vue/component-compiler/-/component-compiler-3.6.0.tgz#8db313e50eaa2903cef5aac68c37a09364dba79d"
23 | integrity sha512-NIA0vmOI4zbtJAn69iZls8IJ8VxmguswAuiUdu8TcR+YYTYzntfw290HUCSFjzAdRg+FUWZv8r+wc3TzJ/IjwA==
24 | dependencies:
25 | "@vue/component-compiler-utils" "^2.1.0"
26 | clean-css "^4.1.11"
27 | hash-sum "^1.0.2"
28 | postcss-modules-sync "^1.0.0"
29 | source-map "0.6.*"
30 |
31 | accepts@~1.3.5:
32 | version "1.3.5"
33 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
34 | integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
35 | dependencies:
36 | mime-types "~2.1.18"
37 | negotiator "0.6.1"
38 |
39 | ansi-regex@^2.0.0:
40 | version "2.1.1"
41 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
42 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
43 |
44 | ansi-styles@^2.2.1:
45 | version "2.2.1"
46 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
47 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
48 |
49 | ansi-styles@^3.2.1:
50 | version "3.2.1"
51 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
52 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
53 | dependencies:
54 | color-convert "^1.9.0"
55 |
56 | array-flatten@1.1.1:
57 | version "1.1.1"
58 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
59 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
60 |
61 | ast-types@0.12.2:
62 | version "0.12.2"
63 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.2.tgz#341656049ee328ac03fc805c156b49ebab1e4462"
64 | integrity sha512-8c83xDLJM/dLDyXNLiR6afRRm4dPKN6KAnKqytRK3DBJul9lA+atxdQkNDkSVPdTqea5HiRq3lnnOIZ0MBpvdg==
65 |
66 | big.js@^3.1.3:
67 | version "3.2.0"
68 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
69 | integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
70 |
71 | bluebird@^3.1.1:
72 | version "3.5.3"
73 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
74 | integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
75 |
76 | body-parser@1.18.3:
77 | version "1.18.3"
78 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
79 | integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
80 | dependencies:
81 | bytes "3.0.0"
82 | content-type "~1.0.4"
83 | debug "2.6.9"
84 | depd "~1.1.2"
85 | http-errors "~1.6.3"
86 | iconv-lite "0.4.23"
87 | on-finished "~2.3.0"
88 | qs "6.5.2"
89 | raw-body "2.3.3"
90 | type-is "~1.6.16"
91 |
92 | builtins@^1.0.3:
93 | version "1.0.3"
94 | resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
95 | integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
96 |
97 | bytes@3.0.0:
98 | version "3.0.0"
99 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
100 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
101 |
102 | chalk@^1.1.3:
103 | version "1.1.3"
104 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
105 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
106 | dependencies:
107 | ansi-styles "^2.2.1"
108 | escape-string-regexp "^1.0.2"
109 | has-ansi "^2.0.0"
110 | strip-ansi "^3.0.0"
111 | supports-color "^2.0.0"
112 |
113 | chalk@^2.4.1, chalk@^2.4.2:
114 | version "2.4.2"
115 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
116 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
117 | dependencies:
118 | ansi-styles "^3.2.1"
119 | escape-string-regexp "^1.0.5"
120 | supports-color "^5.3.0"
121 |
122 | clean-css@^4.1.11:
123 | version "4.2.1"
124 | resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
125 | integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
126 | dependencies:
127 | source-map "~0.6.0"
128 |
129 | color-convert@^1.9.0:
130 | version "1.9.3"
131 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
132 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
133 | dependencies:
134 | color-name "1.1.3"
135 |
136 | color-name@1.1.3:
137 | version "1.1.3"
138 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
139 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
140 |
141 | consolidate@^0.15.1:
142 | version "0.15.1"
143 | resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
144 | integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
145 | dependencies:
146 | bluebird "^3.1.1"
147 |
148 | content-disposition@0.5.2:
149 | version "0.5.2"
150 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
151 | integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
152 |
153 | content-type@~1.0.4:
154 | version "1.0.4"
155 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
156 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
157 |
158 | cookie-signature@1.0.6:
159 | version "1.0.6"
160 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
161 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
162 |
163 | cookie@0.3.1:
164 | version "0.3.1"
165 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
166 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
167 |
168 | css-selector-tokenizer@^0.7.0:
169 | version "0.7.1"
170 | resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
171 | integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
172 | dependencies:
173 | cssesc "^0.1.0"
174 | fastparse "^1.1.1"
175 | regexpu-core "^1.0.0"
176 |
177 | cssesc@^0.1.0:
178 | version "0.1.0"
179 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
180 | integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
181 |
182 | cssesc@^2.0.0:
183 | version "2.0.0"
184 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
185 | integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
186 |
187 | de-indent@^1.0.2:
188 | version "1.0.2"
189 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
190 | integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
191 |
192 | debug@2.6.9:
193 | version "2.6.9"
194 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
195 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
196 | dependencies:
197 | ms "2.0.0"
198 |
199 | depd@~1.1.2:
200 | version "1.1.2"
201 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
202 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
203 |
204 | destroy@~1.0.4:
205 | version "1.0.4"
206 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
207 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
208 |
209 | ee-first@1.1.1:
210 | version "1.1.1"
211 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
212 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
213 |
214 | emojis-list@^2.0.0:
215 | version "2.1.0"
216 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
217 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
218 |
219 | encodeurl@~1.0.2:
220 | version "1.0.2"
221 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
222 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
223 |
224 | escape-html@~1.0.3:
225 | version "1.0.3"
226 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
227 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
228 |
229 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
230 | version "1.0.5"
231 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
232 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
233 |
234 | esprima@~4.0.0:
235 | version "4.0.1"
236 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
237 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
238 |
239 | etag@~1.8.1:
240 | version "1.8.1"
241 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
242 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
243 |
244 | express@^4.16.4:
245 | version "4.16.4"
246 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
247 | integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
248 | dependencies:
249 | accepts "~1.3.5"
250 | array-flatten "1.1.1"
251 | body-parser "1.18.3"
252 | content-disposition "0.5.2"
253 | content-type "~1.0.4"
254 | cookie "0.3.1"
255 | cookie-signature "1.0.6"
256 | debug "2.6.9"
257 | depd "~1.1.2"
258 | encodeurl "~1.0.2"
259 | escape-html "~1.0.3"
260 | etag "~1.8.1"
261 | finalhandler "1.1.1"
262 | fresh "0.5.2"
263 | merge-descriptors "1.0.1"
264 | methods "~1.1.2"
265 | on-finished "~2.3.0"
266 | parseurl "~1.3.2"
267 | path-to-regexp "0.1.7"
268 | proxy-addr "~2.0.4"
269 | qs "6.5.2"
270 | range-parser "~1.2.0"
271 | safe-buffer "5.1.2"
272 | send "0.16.2"
273 | serve-static "1.13.2"
274 | setprototypeof "1.1.0"
275 | statuses "~1.4.0"
276 | type-is "~1.6.16"
277 | utils-merge "1.0.1"
278 | vary "~1.1.2"
279 |
280 | fastparse@^1.1.1:
281 | version "1.1.2"
282 | resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
283 | integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
284 |
285 | finalhandler@1.1.1:
286 | version "1.1.1"
287 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
288 | integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
289 | dependencies:
290 | debug "2.6.9"
291 | encodeurl "~1.0.2"
292 | escape-html "~1.0.3"
293 | on-finished "~2.3.0"
294 | parseurl "~1.3.2"
295 | statuses "~1.4.0"
296 | unpipe "~1.0.0"
297 |
298 | forwarded@~0.1.2:
299 | version "0.1.2"
300 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
301 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
302 |
303 | fresh@0.5.2:
304 | version "0.5.2"
305 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
306 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
307 |
308 | generic-names@^1.0.2:
309 | version "1.0.3"
310 | resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917"
311 | integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=
312 | dependencies:
313 | loader-utils "^0.2.16"
314 |
315 | has-ansi@^2.0.0:
316 | version "2.0.0"
317 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
318 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
319 | dependencies:
320 | ansi-regex "^2.0.0"
321 |
322 | has-flag@^1.0.0:
323 | version "1.0.0"
324 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
325 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
326 |
327 | has-flag@^3.0.0:
328 | version "3.0.0"
329 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
330 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
331 |
332 | hash-sum@^1.0.2:
333 | version "1.0.2"
334 | resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
335 | integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
336 |
337 | he@^1.1.0:
338 | version "1.2.0"
339 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
340 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
341 |
342 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
343 | version "1.6.3"
344 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
345 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
346 | dependencies:
347 | depd "~1.1.2"
348 | inherits "2.0.3"
349 | setprototypeof "1.1.0"
350 | statuses ">= 1.4.0 < 2"
351 |
352 | iconv-lite@0.4.23:
353 | version "0.4.23"
354 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
355 | integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
356 | dependencies:
357 | safer-buffer ">= 2.1.2 < 3"
358 |
359 | icss-replace-symbols@^1.0.2:
360 | version "1.1.0"
361 | resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
362 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
363 |
364 | indexes-of@^1.0.1:
365 | version "1.0.1"
366 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
367 | integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
368 |
369 | inherits@2.0.3:
370 | version "2.0.3"
371 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
372 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
373 |
374 | ipaddr.js@1.8.0:
375 | version "1.8.0"
376 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
377 | integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
378 |
379 | js-base64@^2.1.9:
380 | version "2.5.1"
381 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
382 | integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
383 |
384 | jsesc@~0.5.0:
385 | version "0.5.0"
386 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
387 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
388 |
389 | json5@^0.5.0:
390 | version "0.5.1"
391 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
392 | integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
393 |
394 | loader-utils@^0.2.16:
395 | version "0.2.17"
396 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
397 | integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
398 | dependencies:
399 | big.js "^3.1.3"
400 | emojis-list "^2.0.0"
401 | json5 "^0.5.0"
402 | object-assign "^4.0.1"
403 |
404 | lru-cache@^4.1.2:
405 | version "4.1.5"
406 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
407 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
408 | dependencies:
409 | pseudomap "^1.0.2"
410 | yallist "^2.1.2"
411 |
412 | lru-cache@^5.1.1:
413 | version "5.1.1"
414 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
415 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
416 | dependencies:
417 | yallist "^3.0.2"
418 |
419 | media-typer@0.3.0:
420 | version "0.3.0"
421 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
422 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
423 |
424 | merge-descriptors@1.0.1:
425 | version "1.0.1"
426 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
427 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
428 |
429 | merge-source-map@^1.1.0:
430 | version "1.1.0"
431 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
432 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
433 | dependencies:
434 | source-map "^0.6.1"
435 |
436 | methods@~1.1.2:
437 | version "1.1.2"
438 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
439 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
440 |
441 | mime-db@~1.38.0:
442 | version "1.38.0"
443 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
444 | integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
445 |
446 | mime-types@~2.1.18:
447 | version "2.1.22"
448 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
449 | integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
450 | dependencies:
451 | mime-db "~1.38.0"
452 |
453 | mime@1.4.1:
454 | version "1.4.1"
455 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
456 | integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
457 |
458 | ms@2.0.0:
459 | version "2.0.0"
460 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
461 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
462 |
463 | negotiator@0.6.1:
464 | version "0.6.1"
465 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
466 | integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
467 |
468 | object-assign@^4.0.1:
469 | version "4.1.1"
470 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
471 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
472 |
473 | on-finished@~2.3.0:
474 | version "2.3.0"
475 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
476 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
477 | dependencies:
478 | ee-first "1.1.1"
479 |
480 | parseurl@~1.3.2:
481 | version "1.3.2"
482 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
483 | integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
484 |
485 | path-to-regexp@0.1.7:
486 | version "0.1.7"
487 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
488 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
489 |
490 | postcss-modules-local-by-default@^1.1.1:
491 | version "1.2.0"
492 | resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
493 | integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
494 | dependencies:
495 | css-selector-tokenizer "^0.7.0"
496 | postcss "^6.0.1"
497 |
498 | postcss-modules-scope@^1.0.2:
499 | version "1.1.0"
500 | resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
501 | integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
502 | dependencies:
503 | css-selector-tokenizer "^0.7.0"
504 | postcss "^6.0.1"
505 |
506 | postcss-modules-sync@^1.0.0:
507 | version "1.0.0"
508 | resolved "https://registry.yarnpkg.com/postcss-modules-sync/-/postcss-modules-sync-1.0.0.tgz#619a719cf78dd16a4834135140b324cf77334be1"
509 | integrity sha1-YZpxnPeN0WpINBNRQLMkz3czS+E=
510 | dependencies:
511 | generic-names "^1.0.2"
512 | icss-replace-symbols "^1.0.2"
513 | postcss "^5.2.5"
514 | postcss-modules-local-by-default "^1.1.1"
515 | postcss-modules-scope "^1.0.2"
516 | string-hash "^1.1.0"
517 |
518 | postcss-selector-parser@^5.0.0:
519 | version "5.0.0"
520 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
521 | integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
522 | dependencies:
523 | cssesc "^2.0.0"
524 | indexes-of "^1.0.1"
525 | uniq "^1.0.1"
526 |
527 | postcss@^5.2.5:
528 | version "5.2.18"
529 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
530 | integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
531 | dependencies:
532 | chalk "^1.1.3"
533 | js-base64 "^2.1.9"
534 | source-map "^0.5.6"
535 | supports-color "^3.2.3"
536 |
537 | postcss@^6.0.1:
538 | version "6.0.23"
539 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
540 | integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
541 | dependencies:
542 | chalk "^2.4.1"
543 | source-map "^0.6.1"
544 | supports-color "^5.4.0"
545 |
546 | postcss@^7.0.14:
547 | version "7.0.14"
548 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
549 | integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
550 | dependencies:
551 | chalk "^2.4.2"
552 | source-map "^0.6.1"
553 | supports-color "^6.1.0"
554 |
555 | prettier@1.16.3:
556 | version "1.16.3"
557 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
558 | integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
559 |
560 | private@^0.1.8:
561 | version "0.1.8"
562 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
563 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
564 |
565 | proxy-addr@~2.0.4:
566 | version "2.0.4"
567 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
568 | integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
569 | dependencies:
570 | forwarded "~0.1.2"
571 | ipaddr.js "1.8.0"
572 |
573 | pseudomap@^1.0.2:
574 | version "1.0.2"
575 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
576 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
577 |
578 | qs@6.5.2:
579 | version "6.5.2"
580 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
581 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
582 |
583 | range-parser@~1.2.0:
584 | version "1.2.0"
585 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
586 | integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
587 |
588 | raw-body@2.3.3:
589 | version "2.3.3"
590 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
591 | integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
592 | dependencies:
593 | bytes "3.0.0"
594 | http-errors "1.6.3"
595 | iconv-lite "0.4.23"
596 | unpipe "1.0.0"
597 |
598 | recast@^0.17.3:
599 | version "0.17.3"
600 | resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.3.tgz#f49a9c9a64c59b55f6c93b5a53e3cffd7a13354d"
601 | integrity sha512-NwQguXPwHqaVb6M7tsY11+8RDoAKHGRdymPGDxHJrsxOlNADQh0b08uz/MgYp1R1wmHuSBK4A4I5Oq+cE1J40g==
602 | dependencies:
603 | ast-types "0.12.2"
604 | esprima "~4.0.0"
605 | private "^0.1.8"
606 | source-map "~0.6.1"
607 |
608 | regenerate@^1.2.1:
609 | version "1.4.0"
610 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
611 | integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
612 |
613 | regexpu-core@^1.0.0:
614 | version "1.0.0"
615 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
616 | integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
617 | dependencies:
618 | regenerate "^1.2.1"
619 | regjsgen "^0.2.0"
620 | regjsparser "^0.1.4"
621 |
622 | regjsgen@^0.2.0:
623 | version "0.2.0"
624 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
625 | integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
626 |
627 | regjsparser@^0.1.4:
628 | version "0.1.5"
629 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
630 | integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
631 | dependencies:
632 | jsesc "~0.5.0"
633 |
634 | safe-buffer@5.1.2:
635 | version "5.1.2"
636 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
637 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
638 |
639 | "safer-buffer@>= 2.1.2 < 3":
640 | version "2.1.2"
641 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
642 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
643 |
644 | send@0.16.2:
645 | version "0.16.2"
646 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
647 | integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
648 | dependencies:
649 | debug "2.6.9"
650 | depd "~1.1.2"
651 | destroy "~1.0.4"
652 | encodeurl "~1.0.2"
653 | escape-html "~1.0.3"
654 | etag "~1.8.1"
655 | fresh "0.5.2"
656 | http-errors "~1.6.2"
657 | mime "1.4.1"
658 | ms "2.0.0"
659 | on-finished "~2.3.0"
660 | range-parser "~1.2.0"
661 | statuses "~1.4.0"
662 |
663 | serve-static@1.13.2:
664 | version "1.13.2"
665 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
666 | integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
667 | dependencies:
668 | encodeurl "~1.0.2"
669 | escape-html "~1.0.3"
670 | parseurl "~1.3.2"
671 | send "0.16.2"
672 |
673 | setprototypeof@1.1.0:
674 | version "1.1.0"
675 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
676 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
677 |
678 | source-map@0.6.*, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
679 | version "0.6.1"
680 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
681 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
682 |
683 | source-map@^0.5.6:
684 | version "0.5.7"
685 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
686 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
687 |
688 | "statuses@>= 1.4.0 < 2":
689 | version "1.5.0"
690 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
691 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
692 |
693 | statuses@~1.4.0:
694 | version "1.4.0"
695 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
696 | integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
697 |
698 | string-hash@^1.1.0:
699 | version "1.1.3"
700 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
701 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
702 |
703 | strip-ansi@^3.0.0:
704 | version "3.0.1"
705 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
706 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
707 | dependencies:
708 | ansi-regex "^2.0.0"
709 |
710 | supports-color@^2.0.0:
711 | version "2.0.0"
712 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
713 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
714 |
715 | supports-color@^3.2.3:
716 | version "3.2.3"
717 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
718 | integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
719 | dependencies:
720 | has-flag "^1.0.0"
721 |
722 | supports-color@^5.3.0, supports-color@^5.4.0:
723 | version "5.5.0"
724 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
725 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
726 | dependencies:
727 | has-flag "^3.0.0"
728 |
729 | supports-color@^6.1.0:
730 | version "6.1.0"
731 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
732 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
733 | dependencies:
734 | has-flag "^3.0.0"
735 |
736 | type-is@~1.6.16:
737 | version "1.6.16"
738 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
739 | integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
740 | dependencies:
741 | media-typer "0.3.0"
742 | mime-types "~2.1.18"
743 |
744 | uniq@^1.0.1:
745 | version "1.0.1"
746 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
747 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
748 |
749 | unpipe@1.0.0, unpipe@~1.0.0:
750 | version "1.0.0"
751 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
752 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
753 |
754 | utils-merge@1.0.1:
755 | version "1.0.1"
756 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
757 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
758 |
759 | validate-npm-package-name@^3.0.0:
760 | version "3.0.0"
761 | resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
762 | integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34=
763 | dependencies:
764 | builtins "^1.0.3"
765 |
766 | vary@~1.1.2:
767 | version "1.1.2"
768 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
769 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
770 |
771 | vue-template-compiler@^2.6.8:
772 | version "2.6.8"
773 | resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.8.tgz#750802604595134775b9c53141b9850b35255e1c"
774 | integrity sha512-SwWKANE5ee+oJg+dEJmsdxsxWYICPsNwk68+1AFjOS8l0O/Yz2845afuJtFqf3UjS/vXG7ECsPeHHEAD65Cjng==
775 | dependencies:
776 | de-indent "^1.0.2"
777 | he "^1.1.0"
778 |
779 | vue-template-es2015-compiler@^1.9.0:
780 | version "1.9.1"
781 | resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
782 | integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
783 |
784 | vue@^2.6.8:
785 | version "2.6.8"
786 | resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.8.tgz#f21cbc536bfc14f7d1d792a137bb12f69e60ea91"
787 | integrity sha512-+vp9lEC2Kt3yom673pzg1J7T1NVGuGzO9j8Wxno+rQN2WYVBX2pyo/RGQ3fXCLh2Pk76Skw/laAPCuBuEQ4diw==
788 |
789 | yallist@^2.1.2:
790 | version "2.1.2"
791 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
792 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
793 |
794 | yallist@^3.0.2:
795 | version "3.0.3"
796 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
797 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
798 |
--------------------------------------------------------------------------------