├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── LICENSE.md
├── README.md
├── package.json
├── scripts
└── release.js
├── src
├── index.js
├── lazy-component.js
├── lazy-container.js
├── lazy-image.js
├── lazy.js
├── listener.js
└── util.js
├── vite.config.js
└── yarn.lock
/.browserslistrc:
--------------------------------------------------------------------------------
1 | current node
2 | last 2 versions and > 2%
3 | ie > 10
4 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/prettier'],
7 | rules: {
8 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
9 | 'vue/no-deprecated-dollar-listeners-api': 'off',
10 | },
11 | parserOptions: {
12 | ecmaVersion: 2020,
13 | sourceType: 'module',
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 |
5 | # Log files
6 | npm-debug.log*
7 | yarn-debug.log*
8 | yarn-error.log*
9 | pnpm-debug.log*
10 |
11 | # Editor directories and files
12 | .idea
13 | .vscode
14 | *.suo
15 | *.ntvs*
16 | *.njsproj
17 | *.sln
18 | *.sw?
19 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 - Jambon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue-Lazyload
2 | Vue module for lazyloading images in your Vue 3 applications. This module is base on vue-lazyload. Vue 1.x or 2.x please use [vue-lazyload](https://github.com/hilongjw/vue-lazyload). Some of goals of this project worth noting include:
3 |
4 | * Be lightweight, powerful and easy to use
5 | * Work on any image type
6 | * Add loading class while image is loading
7 | * Supports Vue 3
8 |
9 | # Table of Contents
10 |
11 | * [___Requirements___](#requirements)
12 | * [___Installation___](#installation)
13 | * [___Usage___](#usage)
14 | * [___Constructor Options___](#constructor-options)
15 | * [___Implementation___](#implementation)
16 | * [___Basic___](#basic)
17 | * [___Css state___](#css-state)
18 | * [___Methods___](#methods)
19 | * [__Event hook__](#event-hook)
20 | * [__LazyLoadHandler__](#lazyloadhandler)
21 | * [__Performance__](#performance)
22 | * [___Authors && Contributors___](#authors-&&-Contributors)
23 | * [___License___](#license)
24 |
25 | # Requirements
26 |
27 | - [Vue.js](https://github.com/vuejs/vue-next) `3.x`
28 |
29 | # Installation
30 |
31 | ## npm
32 |
33 | ```bash
34 |
35 | $ npm i @jambonn/vue-lazyload
36 |
37 | ```
38 |
39 | ## yarn
40 |
41 | ```bash
42 |
43 | $ yarn add @jambonn/vue-lazyload
44 |
45 | ```
46 |
47 | ## CDN
48 |
49 | CDN: [https://unpkg.com/@jambonn/vue-lazyload/dist/vue-lazyload.umd.js](https://unpkg.com/@jambonn/vue-lazyload/dist/vue-lazyload.umd.js)
50 |
51 | ```html
52 |
53 |
66 |
67 | ```
68 |
69 | # Usage
70 |
71 | main.js:
72 |
73 | ```javascript
74 |
75 | import { createApp } from 'vue'
76 | import VueLazyload from '@jambonn/vue-lazyload'
77 | import App from './App.vue'
78 |
79 | const app = createApp(App)
80 | app.use(VueLazyload)
81 |
82 | // or with options
83 | const loadimage = require('./assets/loading.gif')
84 | const errorimage = require('./assets/error.gif')
85 | app.use(VueLazyload, {
86 | preLoad: 1.3,
87 | error: errorimage,
88 | loading: loadimage,
89 | attempt: 1
90 | })
91 |
92 | app.mount('#app')
93 | ```
94 |
95 | template:
96 |
97 | ```html
98 |
99 | -
100 |
101 |
102 |
103 | ```
104 |
105 | use `v-lazy-container` work with raw HTML
106 |
107 | ```html
108 |
113 | ```
114 |
115 | custom `error` and `loading` placeholder image
116 |
117 | ```html
118 |
123 | ```
124 |
125 | ```html
126 |
131 | ```
132 |
133 | ## Constructor Options
134 |
135 | |key|description|default|options|
136 | |:---|---|---|---|
137 | | `preLoad`|proportion of pre-loading height|`1.3`|`Number`|
138 | |`error`|src of the image upon load fail|`'data-src'`|`String`
139 | |`loading`|src of the image while loading|`'data-src'`|`String`|
140 | |`attempt`|attempts count|`3`|`Number`|
141 | |`listenEvents`|events that you want vue listen for|`['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove']`| [Desired Listen Events](#desired-listen-events) |
142 | |`adapter`| dynamically modify the attribute of element |`{ }`| [Element Adapter](#element-adapter) |
143 | |`filter`| the image's listener filter |`{ }`| [Image listener filter](#image-listener-filter) |
144 | |`lazyComponent`| lazyload component | `false` | [Lazy Component](#lazy-component)
145 | | `dispatchEvent`|trigger the dom event|`false`|`Boolean`|
146 | | `throttleWait`|throttle wait|`200`|`Number`|
147 | | `observer`|use IntersectionObserver|`false`|`Boolean`|
148 | | `observerOptions`|IntersectionObserver options|{ rootMargin: '0px', threshold: 0.1 }|[IntersectionObserver](#intersectionobserver)|
149 | | `silent`|do not print debug info|`true`|`Boolean`|
150 |
151 | ### Desired Listen Events
152 |
153 | You can configure which events you want vue-lazyload by passing in an array
154 | of listener names.
155 |
156 | ```javascript
157 | const app = createApp(AttributeBindingApp)
158 | app.use(VueLazyload, {
159 | preLoad: 1.3,
160 | error: 'dist/error.png',
161 | loading: 'dist/loading.gif',
162 | attempt: 1,
163 | // the default is ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend']
164 | listenEvents: [ 'scroll' ]
165 | })
166 | ```
167 |
168 | This is useful if you are having trouble with this plugin resetting itself to loading
169 | when you have certain animations and transitions taking place
170 |
171 | ### Image listener filter
172 |
173 | dynamically modify the src of image
174 |
175 | ```javascript
176 | const app = createApp(AttributeBindingApp)
177 | app.use(VueLazyload, {
178 | filter: {
179 | progressive (listener, options) {
180 | const isCDN = /qiniudn.com/
181 | if (isCDN.test(listener.src)) {
182 | listener.el.setAttribute('lazy-progressive', 'true')
183 | listener.loading = listener.src + '?imageView2/1/w/10/h/10'
184 | }
185 | },
186 | webp (listener, options) {
187 | if (!options.supportWebp) return
188 | const isCDN = /qiniudn.com/
189 | if (isCDN.test(listener.src)) {
190 | listener.src += '?imageView2/2/format/webp'
191 | }
192 | }
193 | }
194 | })
195 | ```
196 |
197 | ### Element Adapter
198 |
199 | ```javascript
200 | const app = createApp(AttributeBindingApp)
201 | app.use(VueLazyload, {
202 | adapter: {
203 | loaded ({ bindType, el, naturalHeight, naturalWidth, $parent, src, loading, error, Init }) {
204 | // do something here
205 | // example for call LoadedHandler
206 | LoadedHandler(el)
207 | },
208 | loading (listender, Init) {
209 | console.log('loading')
210 | },
211 | error (listender, Init) {
212 | console.log('error')
213 | }
214 | }
215 | })
216 | ```
217 |
218 | ### IntersectionObserver
219 |
220 | use [Intersection Observer](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) to to improve performance of a large number of nodes.
221 |
222 | ```javascript
223 | const app = createApp(AttributeBindingApp)
224 | app.use(vueLazy, {
225 | // set observer to true
226 | observer: true,
227 |
228 | // optional
229 | observerOptions: {
230 | rootMargin: '0px',
231 | threshold: 0.1
232 | }
233 | })
234 | ```
235 |
236 | ### Lazy Component
237 | ```javascript
238 | const app = createApp(AttributeBindingApp)
239 | app.use(VueLazyload, {
240 | lazyComponent: true
241 | });
242 | ```
243 |
244 | ```html
245 |
246 |
247 |
248 |
249 |
259 | ```
260 | Use in list
261 | ```html
262 |
263 |
264 |
265 | ```
266 |
267 |
268 | ## Implementation
269 |
270 | ### Basic
271 |
272 | vue-lazyload will set this img element's `src` with `imgUrl` string
273 |
274 | ```html
275 |
276 |
277 |
![]()
278 |
279 |
280 |
281 |
![]()
282 |
283 |
284 |
285 |
![]()
286 |
287 |
288 |
289 |
![]()
290 |
![]()
291 |
292 |
293 |
294 |
309 | ```
310 |
311 | ### CSS state
312 |
313 | There are three states while img loading
314 |
315 | `loading` `loaded` `error`
316 |
317 | ```html
318 |
319 |
320 |
321 | ```
322 |
323 | ```html
324 |
347 | ```
348 |
349 |
350 |
351 | ## Methods
352 |
353 | ### Event Hook
354 | ```javascript
355 | import { getCurrentInstance, inject } from 'vue'
356 | export default {
357 | setup() {
358 | const internalInstance = getCurrentInstance().appContext.config.globalProperties
359 | const LazyLoad = internalInstance.$Lazyload
360 | // or
361 | const Lazyload = inject('Lazyload')
362 |
363 | Lazyload.$on(event, callback)
364 | Lazyload.$off(event, callback)
365 | Lazyload.$once(event, callback)
366 | }
367 | }
368 | ```
369 | - `$on` Listen for a custom events `loading`, `loaded`, `error`
370 | - `$once` Listen for a custom event, but only once. The listener will be removed once it triggers for the first time.
371 | - `$off` Remove event listener(s).
372 |
373 | #### `Lazyload.$on`
374 |
375 | #### Arguments:
376 |
377 | * `{string} event`
378 | * `{Function} callback`
379 |
380 | #### Example
381 |
382 | ```javascript
383 | Lazyload.$on('loaded', function ({ bindType, el, naturalHeight, naturalWidth, $parent, src, loading, error }, formCache) {
384 | console.log(el, src)
385 | })
386 | ```
387 |
388 | #### `Lazyload.$once`
389 |
390 | #### Arguments:
391 |
392 | * `{string} event`
393 | * `{Function} callback`
394 |
395 | #### Example
396 |
397 | ```javascript
398 | Lazyload.$once('loaded', function ({ el, src }) {
399 | console.log(el, src)
400 | })
401 | ```
402 |
403 | #### `Lazyload.$off`
404 |
405 | If only the event is provided, remove all listeners for that event
406 |
407 | #### Arguments:
408 |
409 | * `{string} event`
410 | * `{Function} callback`
411 |
412 | #### Example
413 |
414 | ```javascript
415 | import { getCurrentInstance, inject } from 'vue'
416 | export default {
417 | setup() {
418 | const internalInstance = getCurrentInstance().appContext.config.globalProperties
419 | const LazyLoad = internalInstance.$Lazyload
420 | // or
421 | const Lazyload = inject('Lazyload')
422 |
423 | const handler = ({ el, src }, formCache) => {
424 | console.log(el, src)
425 | }
426 | Lazyload.$on('loaded', handler)
427 | Lazyload.$off('loaded', handler)
428 | Lazyload.$off('loaded')
429 | }
430 | }
431 | ```
432 |
433 | ### LazyLoadHandler
434 |
435 | `Lazyload.lazyLoadHandler`
436 |
437 | Manually trigger lazy loading position calculation
438 |
439 | #### Example
440 |
441 | ```javascript
442 | import { getCurrentInstance, inject } from 'vue'
443 | export default {
444 | setup() {
445 | const internalInstance = getCurrentInstance().appContext.config.globalProperties
446 | const LazyLoad = internalInstance.$Lazyload
447 | // or
448 | const Lazyload = inject('Lazyload')
449 |
450 | Lazyload.lazyLoadHandler()
451 | }
452 | }
453 | ```
454 |
455 | ### Performance
456 |
457 | ```javascript
458 | import { getCurrentInstance, inject } from 'vue'
459 | export default {
460 | setup() {
461 | const internalInstance = getCurrentInstance().appContext.config.globalProperties
462 | const LazyLoad = internalInstance.$Lazyload
463 | // or
464 | const Lazyload = inject('Lazyload')
465 |
466 | Lazyload.$on('loaded', function (listener) {
467 | console.table(Lazyload.performance())
468 | })
469 | }
470 | }
471 | ```
472 |
473 | 
474 |
475 | ### Dynamic switching pictures
476 |
477 | ```vue
478 |
479 | ```
480 |
481 | # Authors && Contributors
482 |
483 | - [hilongjw](https://github.com/hilongjw)
484 | - [imcvampire](https://github.com/imcvampire)
485 | - [darrynten](https://github.com/darrynten)
486 | - [biluochun](https://github.com/biluochun)
487 | - [whwnow](https://github.com/whwnow)
488 | - [Leopoldthecoder](https://github.com/Leopoldthecoder)
489 | - [michalbcz](https://github.com/michalbcz)
490 | - [blue0728](https://github.com/blue0728)
491 | - [JounQin](https://github.com/JounQin)
492 | - [llissery](https://github.com/llissery)
493 | - [mega667](https://github.com/mega667)
494 | - [RobinCK](https://github.com/RobinCK)
495 | - [GallenHu](https://github.com/GallenHu)
496 | - [Jambon](https://github.com/jambonn)
497 |
498 | # License
499 |
500 | [The MIT License](http://opensource.org/licenses/MIT)
501 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@jambonn/vue-lazyload",
3 | "version": "1.0.10",
4 | "description": "Vue module for lazy-loading images in your vue 3 applications.",
5 | "main": "dist/vue-lazyload.cjs.js",
6 | "module": "dist/vue-lazyload.es.js",
7 | "unpkg": "dist/vue-lazyload.umd.js",
8 | "files": [
9 | "dist"
10 | ],
11 | "scripts": {
12 | "build": "vite build",
13 | "release": "node scripts/release.js"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "https://github.com/jambonn/vue-lazyload.git"
18 | },
19 | "keywords": [
20 | "vue-lazyload",
21 | "vue",
22 | "vue 3",
23 | "lazyload",
24 | "vue-directive"
25 | ],
26 | "author": "Jambon ",
27 | "bugs": {
28 | "url": "https://github.com/jambonn/vue-lazyload/issues"
29 | },
30 | "license": "MIT",
31 | "dependencies": {},
32 | "devDependencies": {
33 | "@vue/eslint-config-prettier": "^6.0.0",
34 | "chalk": "^4.1.1",
35 | "eslint": "^7.24.0",
36 | "eslint-loader": "^4.0.2",
37 | "eslint-plugin-import": "^2.22.1",
38 | "eslint-plugin-prettier": "^3.3.1",
39 | "eslint-plugin-vue": "^7.9.0",
40 | "execa": "^5.1.1",
41 | "minimist": "^1.2.5",
42 | "prettier": "^2.2.1",
43 | "semver": "^7.3.5",
44 | "vite": "^2.1.5"
45 | },
46 | "peerDependencies": {
47 | "vue": "^3.0.11"
48 | },
49 | "engines": {
50 | "node": ">=12.x"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/scripts/release.js:
--------------------------------------------------------------------------------
1 | const args = require('minimist')(process.argv.slice(2))
2 | const fs = require('fs')
3 | const path = require('path')
4 | const chalk = require('chalk')
5 | const semver = require('semver')
6 | const execa = require('execa')
7 | const currentVersion = require('../package.json').version
8 | const { prompt } = require('enquirer')
9 |
10 | const preId =
11 | args.preid ||
12 | (semver.prerelease(currentVersion) && semver.prerelease(currentVersion)[0])
13 | const skipBuild = args.skipBuild
14 |
15 | const versionIncrements = [
16 | 'patch',
17 | 'minor',
18 | 'major',
19 | ...(preId ? ['prepatch', 'preminor', 'premajor', 'prerelease'] : []),
20 | ]
21 |
22 | const inc = i => semver.inc(currentVersion, i, preId)
23 | const run = (bin, args, opts = {}) =>
24 | execa(bin, args, { stdio: 'inherit', ...opts })
25 | const step = msg => console.log(chalk.cyan(msg))
26 |
27 | const updatePackage = (pkgRoot, version) => {
28 | const pkgPath = path.resolve(pkgRoot, 'package.json')
29 | const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))
30 | pkg.version = version
31 | fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
32 | }
33 |
34 | const publishPackage = async version => {
35 | const pkgPath = path.resolve(path.resolve(__dirname, '..'), 'package.json')
36 | const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))
37 | const pkgName = pkg.name
38 | const releaseTag = args.tag || null
39 |
40 | step(`Publishing ${pkgName}...`)
41 | try {
42 | await run('yarn', [
43 | 'publish',
44 | '--new-version',
45 | version,
46 | ...(releaseTag ? ['--tag', releaseTag] : []),
47 | '--access',
48 | 'public',
49 | ])
50 | console.log(chalk.green(`Successfully published ${pkgName}@${version}`))
51 | } catch (e) {
52 | if (e.stderr.match(/previously published/)) {
53 | console.log(chalk.red(`Skipping already published: ${pkgName}`))
54 | } else {
55 | throw e
56 | }
57 | }
58 | }
59 |
60 | const main = async () => {
61 | let targetVersion = args._[0]
62 | if (!targetVersion) {
63 | // no explicit version, offer suggestions
64 | const { release } = await prompt({
65 | type: 'select',
66 | name: 'release',
67 | message: 'Select release type',
68 | choices: versionIncrements
69 | .map(i => `${i} (${inc(i)})`)
70 | .concat(['custom']),
71 | })
72 |
73 | if (release === 'custom') {
74 | targetVersion = (
75 | await prompt({
76 | type: 'input',
77 | name: 'version',
78 | message: 'Input custom version',
79 | initial: currentVersion,
80 | })
81 | ).version
82 | } else {
83 | targetVersion = release.match(/\((.*)\)/)[1]
84 | }
85 |
86 | if (!semver.valid(targetVersion)) {
87 | throw new Error(`invalid target version: ${targetVersion}`)
88 | }
89 |
90 | const { yes } = await prompt({
91 | type: 'confirm',
92 | name: 'yes',
93 | message: `Releasing v${targetVersion}. Confirm?`,
94 | })
95 |
96 | if (!yes) {
97 | return
98 | }
99 |
100 | // update package versions
101 | step('\nUpdate package.json...')
102 | updatePackage(path.resolve(__dirname, '..'), targetVersion)
103 |
104 | // build package
105 | step('\nBuilding package...')
106 | if (!skipBuild) {
107 | await run('yarn', ['build'])
108 | } else {
109 | console.log(`(skipped)`)
110 | }
111 |
112 | const { stdout } = await run('git', ['diff'], { stdio: 'pipe' })
113 | if (stdout) {
114 | step('\nCommitting changes...')
115 | await run('git', ['add', '-A'])
116 | await run('git', [
117 | 'commit',
118 | '-m',
119 | `:tada: :rocket: release: v${targetVersion}`,
120 | ])
121 | } else {
122 | console.log('No changes to commit.')
123 | }
124 |
125 | // publish package
126 | step('\nPublishing package...')
127 | await publishPackage(targetVersion)
128 |
129 | // push to GitHub
130 | step('\nPushing to GitHub...')
131 | await run('git', ['tag', `v${targetVersion}`])
132 | await run('git', ['push', 'origin', `refs/tags/v${targetVersion}`])
133 | await run('git', ['push'])
134 |
135 | console.log()
136 | }
137 | }
138 |
139 | main().catch(err => {
140 | console.error(err)
141 | })
142 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import Lazy from './lazy'
2 | import LazyComponent from './lazy-component'
3 | import LazyContainer from './lazy-container'
4 | import LazyImage from './lazy-image'
5 |
6 | export default {
7 | /**
8 | * install function
9 | * @param app
10 | * @param options
11 | */
12 | install(app, options = {}) {
13 | const vueVersion = Number(app.version.split('.')[0])
14 | if (vueVersion < 3) {
15 | return new Error('Vue version at least 3.0')
16 | }
17 |
18 | const LazyClass = Lazy()
19 | const lazy = new LazyClass(options)
20 | const lazyContainer = new LazyContainer({ lazy })
21 |
22 | app.provide('Lazyload', lazy)
23 | app.config.globalProperties.$Lazyload = lazy
24 |
25 | if (options.lazyComponent) {
26 | app.component('LazyComponent', LazyComponent(lazy))
27 | }
28 |
29 | if (options.lazyImage) {
30 | app.component('LazyImage', LazyImage(lazy))
31 | }
32 |
33 | app.directive('lazy', {
34 | beforeMount: lazy.add.bind(lazy),
35 | updated: lazy.update.bind(lazy),
36 | unmounted: lazy.remove.bind(lazy),
37 | })
38 | app.directive('lazy-container', {
39 | beforeMount: lazyContainer.bind.bind(lazyContainer),
40 | updated: lazyContainer.update.bind(lazyContainer),
41 | unmounted: lazyContainer.unbind.bind(lazyContainer),
42 | })
43 | },
44 | }
45 |
--------------------------------------------------------------------------------
/src/lazy-component.js:
--------------------------------------------------------------------------------
1 | import { h } from 'vue'
2 | import { inBrowser } from './util'
3 |
4 | export default lazy => {
5 | return {
6 | props: {
7 | tag: {
8 | type: String,
9 | default: 'div',
10 | },
11 | },
12 | emits: ['show'],
13 | render() {
14 | return h(
15 | this.tag,
16 | null,
17 | this.show && this.$slots.default ? this.$slots.default() : null,
18 | )
19 | },
20 | data() {
21 | return {
22 | el: null,
23 | state: {
24 | loaded: false,
25 | },
26 | rect: {},
27 | show: false,
28 | }
29 | },
30 | mounted() {
31 | this.el = this.$el
32 | lazy.addLazyBox(this)
33 | lazy.lazyLoadHandler()
34 | },
35 | beforeUnmount() {
36 | lazy.removeComponent(this)
37 | },
38 | methods: {
39 | getRect() {
40 | this.rect = this.$el.getBoundingClientRect()
41 | },
42 | checkInView() {
43 | this.getRect()
44 | return (
45 | inBrowser &&
46 | this.rect.top < window.innerHeight * lazy.options.preLoad &&
47 | this.rect.bottom > 0 &&
48 | this.rect.left < window.innerWidth * lazy.options.preLoad &&
49 | this.rect.right > 0
50 | )
51 | },
52 | load() {
53 | this.show = true
54 | this.state.loaded = true
55 | this.$emit('show', this)
56 | },
57 | destroy() {
58 | return this.$destroy
59 | },
60 | },
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/lazy-container.js:
--------------------------------------------------------------------------------
1 | import { remove } from './util'
2 |
3 | const defaultOptions = {
4 | selector: 'img',
5 | }
6 |
7 | class LazyContainer {
8 | constructor({ el, binding, lazy }) {
9 | this.el = null
10 | this.binding = binding
11 | this.options = {}
12 | this.lazy = lazy
13 |
14 | this.update({ el, binding })
15 | }
16 |
17 | update({ el, binding }) {
18 | this.el = el
19 | this.options = Object.assign({}, defaultOptions, binding.value)
20 |
21 | const imgs = this.getImgs()
22 | imgs.forEach(el => {
23 | this.lazy.add(
24 | el,
25 | Object.assign({}, this.binding, {
26 | value: {
27 | src: 'dataset' in el ? el.dataset.src : el.getAttribute('data-src'),
28 | error:
29 | ('dataset' in el
30 | ? el.dataset.error
31 | : el.getAttribute('data-error')) || this.options.error,
32 | loading:
33 | ('dataset' in el
34 | ? el.dataset.loading
35 | : el.getAttribute('data-loading')) || this.options.loading,
36 | },
37 | }),
38 | )
39 | })
40 | }
41 |
42 | getImgs() {
43 | return Array.from(this.el.querySelectorAll(this.options.selector))
44 | }
45 |
46 | clear() {
47 | const imgs = this.getImgs()
48 | imgs.forEach(el => this.lazy.remove(el))
49 |
50 | this.binding = null
51 | this.lazy = null
52 | }
53 | }
54 |
55 | export default class LazyContainerMananger {
56 | constructor({ lazy }) {
57 | this.lazy = lazy
58 | this._queue = []
59 | }
60 |
61 | bind(el, binding) {
62 | const container = new LazyContainer({ el, binding, lazy: this.lazy })
63 | this._queue.push(container)
64 | }
65 |
66 | update(el, binding) {
67 | const container = this._queue.find(item => item.el === el)
68 | if (!container) return
69 | container.update({ el, binding })
70 | }
71 |
72 | unbind(el) {
73 | const container = this._queue.find(item => item.el === el)
74 | if (!container) return
75 | container.clear()
76 | remove(this._queue, container)
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/lazy-image.js:
--------------------------------------------------------------------------------
1 | import { h } from 'vue'
2 | import { inBrowser, loadImageAsync, noop } from './util'
3 |
4 | export default lazyManager => {
5 | return {
6 | props: {
7 | src: [String, Object],
8 | tag: {
9 | type: String,
10 | default: 'img',
11 | },
12 | },
13 | render() {
14 | return h(
15 | this.tag,
16 | {
17 | src: this.renderSrc,
18 | },
19 | this.$slots.default ? this.$slots.default() : null,
20 | )
21 | },
22 | data() {
23 | return {
24 | el: null,
25 | options: {
26 | src: '',
27 | error: '',
28 | loading: '',
29 | attempt: lazyManager.options.attempt,
30 | },
31 | state: {
32 | loaded: false,
33 | error: false,
34 | attempt: 0,
35 | },
36 | rect: {},
37 | renderSrc: '',
38 | }
39 | },
40 | watch: {
41 | src() {
42 | this.init()
43 | lazyManager.addLazyBox(this)
44 | lazyManager.lazyLoadHandler()
45 | },
46 | },
47 | created() {
48 | this.init()
49 | this.renderSrc = this.options.loading
50 | },
51 | mounted() {
52 | this.el = this.$el
53 | lazyManager.addLazyBox(this)
54 | lazyManager.lazyLoadHandler()
55 | },
56 | beforeUnmount() {
57 | lazyManager.removeComponent(this)
58 | },
59 | methods: {
60 | init() {
61 | const { src, loading, error } = lazyManager._valueFormatter(this.src)
62 | this.state.loaded = false
63 | this.options.src = src
64 | this.options.error = error
65 | this.options.loading = loading
66 | this.renderSrc = this.options.loading
67 | },
68 | getRect() {
69 | this.rect = this.$el.getBoundingClientRect()
70 | },
71 | checkInView() {
72 | this.getRect()
73 | return (
74 | inBrowser &&
75 | this.rect.top < window.innerHeight * lazyManager.options.preLoad &&
76 | this.rect.bottom > 0 &&
77 | this.rect.left < window.innerWidth * lazyManager.options.preLoad &&
78 | this.rect.right > 0
79 | )
80 | },
81 | load(onFinish = noop) {
82 | if (this.state.attempt > this.options.attempt - 1 && this.state.error) {
83 | if (!lazyManager.options.silent)
84 | console.log(
85 | `VueLazyload log: ${this.options.src} tried too more than ${this.options.attempt} times`,
86 | )
87 | onFinish()
88 | return
89 | }
90 | const src = this.options.src
91 | loadImageAsync(
92 | { src },
93 | ({ src }) => {
94 | this.renderSrc = src
95 | this.state.loaded = true
96 | },
97 | () => {
98 | this.state.attempt++
99 | this.renderSrc = this.options.error
100 | this.state.error = true
101 | },
102 | )
103 | },
104 | },
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/src/lazy.js:
--------------------------------------------------------------------------------
1 | import { nextTick } from 'vue'
2 | import {
3 | inBrowser,
4 | CustomEvent,
5 | remove,
6 | _,
7 | throttle,
8 | supportWebp,
9 | getDPR,
10 | scrollParent,
11 | getBestSelectionFromSrcset,
12 | isObject,
13 | hasIntersectionObserver,
14 | modeType,
15 | ImageCache,
16 | } from './util'
17 |
18 | import ReactiveListener from './listener'
19 |
20 | const DEFAULT_URL =
21 | 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
22 | const DEFAULT_EVENTS = [
23 | 'scroll',
24 | 'wheel',
25 | 'mousewheel',
26 | 'resize',
27 | 'animationend',
28 | 'transitionend',
29 | 'touchmove',
30 | ]
31 | const DEFAULT_OBSERVER_OPTIONS = {
32 | rootMargin: '0px',
33 | threshold: 0,
34 | }
35 |
36 | export default function Lazy() {
37 | return class Lazy {
38 | constructor({
39 | preLoad,
40 | error,
41 | throttleWait,
42 | preLoadTop,
43 | dispatchEvent,
44 | loading,
45 | attempt,
46 | silent = true,
47 | scale,
48 | listenEvents,
49 | filter,
50 | adapter,
51 | observer,
52 | observerOptions,
53 | }) {
54 | this.mode = modeType.event
55 | this.ListenerQueue = []
56 | this.TargetIndex = 0
57 | this.TargetQueue = []
58 | this.options = {
59 | silent,
60 | dispatchEvent: !!dispatchEvent,
61 | throttleWait: throttleWait || 200,
62 | preLoad: preLoad || 1.3,
63 | preLoadTop: preLoadTop || 0,
64 | error: error || DEFAULT_URL,
65 | loading: loading || DEFAULT_URL,
66 | attempt: attempt || 3,
67 | scale: scale || getDPR(scale),
68 | ListenEvents: listenEvents || DEFAULT_EVENTS,
69 | hasbind: false,
70 | supportWebp: supportWebp(),
71 | filter: filter || {},
72 | adapter: adapter || {},
73 | observer: !!observer,
74 | observerOptions: observerOptions || DEFAULT_OBSERVER_OPTIONS,
75 | }
76 | this._initEvent()
77 | this._imageCache = new ImageCache({ max: 200 })
78 | this.lazyLoadHandler = throttle(
79 | this._lazyLoadHandler.bind(this),
80 | this.options.throttleWait,
81 | )
82 |
83 | this.setMode(this.options.observer ? modeType.observer : modeType.event)
84 | }
85 |
86 | /**
87 | * update config
88 | * @param options
89 | */
90 | config(options = {}) {
91 | Object.assign(this.options, options)
92 | }
93 |
94 | /**
95 | * output listener's load performance
96 | * @return {Array}
97 | */
98 | performance() {
99 | return this.ListenerQueue.map(item => item.performance())
100 | }
101 |
102 | /*
103 | * add lazy component to queue
104 | * @param {Vue} vm lazy component instance
105 | * @return
106 | */
107 | addLazyBox(vm) {
108 | this.ListenerQueue.push(vm)
109 | if (inBrowser) {
110 | this._addListenerTarget(window)
111 | this._observer && this._observer.observe(vm.el)
112 | if (vm.$el && vm.$el.parentNode) {
113 | this._addListenerTarget(vm.$el.parentNode)
114 | }
115 | }
116 | }
117 |
118 | /*
119 | * add image listener to queue
120 | * @param {DOM} el
121 | * @param {object} binding vue directive binding
122 | * @return
123 | */
124 | add(el, binding) {
125 | if (this.ListenerQueue.some(item => item.el === el)) {
126 | this.update(el, binding)
127 | nextTick(() => this.lazyLoadHandler())
128 | return
129 | }
130 |
131 | const value = this._valueFormatter(binding.value)
132 | let { src } = value
133 |
134 | nextTick(() => {
135 | src = getBestSelectionFromSrcset(el, this.options.scale) || src
136 | this._observer && this._observer.observe(el)
137 |
138 | const container = Object.keys(binding.modifiers)[0]
139 | let $parent
140 |
141 | if (container) {
142 | $parent = binding.instance.$refs[container]
143 | // if there is container passed in, try ref first, then fallback to getElementById to support the original usage
144 | $parent = $parent
145 | ? $parent.$el || $parent
146 | : document.getElementById(container)
147 | }
148 |
149 | if (!$parent) {
150 | $parent = scrollParent(el)
151 | }
152 |
153 | const newListener = new ReactiveListener({
154 | el,
155 | $parent,
156 | src,
157 | loading: value.loading,
158 | error: value.error,
159 | cors: value.cors,
160 | bindType: binding.arg,
161 | elRenderer: this._elRenderer.bind(this),
162 | options: this.options,
163 | imageCache: this._imageCache,
164 | })
165 |
166 | this.ListenerQueue.push(newListener)
167 |
168 | if (inBrowser) {
169 | this._addListenerTarget(window)
170 | this._addListenerTarget($parent)
171 | }
172 |
173 | this.lazyLoadHandler()
174 | nextTick(() => this.lazyLoadHandler())
175 | })
176 | }
177 |
178 | /**
179 | * update image src
180 | * @param el
181 | * @param binding
182 | */
183 | update(el, binding) {
184 | const value = this._valueFormatter(binding.value)
185 | let { src } = value
186 | src = getBestSelectionFromSrcset(el, this.options.scale) || src
187 |
188 | const exist = this.ListenerQueue.find(item => item.el === el)
189 | if (!exist) {
190 | this.add(el, binding)
191 | } else {
192 | exist.update({
193 | src,
194 | error: value.error,
195 | loading: value.loading,
196 | })
197 | }
198 | if (this._observer) {
199 | this._observer.unobserve(el)
200 | this._observer.observe(el)
201 | }
202 |
203 | this.lazyLoadHandler()
204 | nextTick(() => this.lazyLoadHandler())
205 | }
206 |
207 | /**
208 | * remove listener form list
209 | * @param el
210 | */
211 | remove(el) {
212 | if (!el) return
213 | this._observer && this._observer.unobserve(el)
214 | const existItem = this.ListenerQueue.find(item => item.el === el)
215 | if (existItem) {
216 | this._removeListenerTarget(existItem.$parent)
217 | this._removeListenerTarget(window)
218 | remove(this.ListenerQueue, existItem)
219 | existItem.$destroy && existItem.$destroy()
220 | }
221 | }
222 |
223 | /*
224 | * remove lazy components form list
225 | * @param {Vue} vm Vue instance
226 | * @return
227 | */
228 | removeComponent(vm) {
229 | if (!vm) return
230 | remove(this.ListenerQueue, vm)
231 | this._observer && this._observer.unobserve(vm.el)
232 | if (vm.$parent && vm.$el.parentNode) {
233 | this._removeListenerTarget(vm.$el.parentNode)
234 | }
235 | this._removeListenerTarget(window)
236 | }
237 |
238 | setMode(mode) {
239 | if (!hasIntersectionObserver && mode === modeType.observer) {
240 | mode = modeType.event
241 | }
242 |
243 | this.mode = mode // event or observer
244 |
245 | if (mode === modeType.event) {
246 | if (this._observer) {
247 | this.ListenerQueue.forEach(listener => {
248 | this._observer.unobserve(listener.el)
249 | })
250 | this._observer = null
251 | }
252 |
253 | this.TargetQueue.forEach(target => {
254 | this._initListen(target.el, true)
255 | })
256 | } else {
257 | this.TargetQueue.forEach(target => {
258 | this._initListen(target.el, false)
259 | })
260 | this._initIntersectionObserver()
261 | }
262 | }
263 |
264 | /*
265 | *** Private functions ***
266 | */
267 |
268 | /*
269 | * add listener target
270 | * @param {DOM} el listener target
271 | * @return
272 | */
273 | _addListenerTarget(el) {
274 | if (!el) return
275 | let target = this.TargetQueue.find(target => target.el === el)
276 | if (!target) {
277 | target = {
278 | el: el,
279 | id: ++this.TargetIndex,
280 | childrenCount: 1,
281 | listened: true,
282 | }
283 | this.mode === modeType.event && this._initListen(target.el, true)
284 | this.TargetQueue.push(target)
285 | } else {
286 | target.childrenCount++
287 | }
288 | return this.TargetIndex
289 | }
290 |
291 | /*
292 | * remove listener target or reduce target childrenCount
293 | * @param {DOM} el or window
294 | * @return
295 | */
296 | _removeListenerTarget(el) {
297 | this.TargetQueue.forEach((target, index) => {
298 | if (target.el === el) {
299 | target.childrenCount--
300 | if (!target.childrenCount) {
301 | this._initListen(target.el, false)
302 | this.TargetQueue.splice(index, 1)
303 | target = null
304 | }
305 | }
306 | })
307 | }
308 |
309 | /*
310 | * add or remove eventlistener
311 | * @param {DOM} el DOM or Window
312 | * @param {boolean} start flag
313 | * @return
314 | */
315 | _initListen(el, start) {
316 | this.options.ListenEvents.forEach(evt =>
317 | _[start ? 'on' : 'off'](el, evt, this.lazyLoadHandler),
318 | )
319 | }
320 |
321 | _initEvent() {
322 | this.Event = {
323 | listeners: {
324 | loading: [],
325 | loaded: [],
326 | error: [],
327 | },
328 | }
329 |
330 | this.$on = (event, func) => {
331 | if (!this.Event.listeners[event]) this.Event.listeners[event] = []
332 | this.Event.listeners[event].push(func)
333 | }
334 |
335 | this.$once = (event, func) => {
336 | const on = (...args) => {
337 | this.$off(event, on)
338 | func.apply(this, args)
339 | }
340 | this.$on(event, on)
341 | }
342 |
343 | this.$off = (event, func) => {
344 | if (!func) {
345 | if (!this.Event.listeners[event]) return
346 | this.Event.listeners[event].length = 0
347 | return
348 | }
349 | remove(this.Event.listeners[event], func)
350 | }
351 |
352 | this.$emit = (event, context, inCache) => {
353 | if (!this.Event.listeners[event]) return
354 | this.Event.listeners[event].forEach(func => func(context, inCache))
355 | }
356 | }
357 |
358 | /**
359 | * find nodes which in viewport and trigger load
360 | * @return
361 | */
362 | _lazyLoadHandler() {
363 | const freeList = []
364 | this.ListenerQueue.forEach(listener => {
365 | if (!listener.el || !listener.el.parentNode) {
366 | freeList.push(listener)
367 | }
368 | const catIn = listener.checkInView()
369 | if (!catIn) return
370 | listener.load()
371 | })
372 | freeList.forEach(item => {
373 | remove(this.ListenerQueue, item)
374 | item.$destroy && item.$destroy()
375 | })
376 | }
377 | /**
378 | * init IntersectionObserver
379 | * set mode to observer
380 | * @return
381 | */
382 | _initIntersectionObserver() {
383 | if (!hasIntersectionObserver) {
384 | return
385 | }
386 |
387 | this._observer = new IntersectionObserver(
388 | this._observerHandler.bind(this),
389 | this.options.observerOptions,
390 | )
391 | if (this.ListenerQueue.length) {
392 | this.ListenerQueue.forEach(listener => {
393 | this._observer.observe(listener.el)
394 | })
395 | }
396 | }
397 |
398 | /**
399 | * init IntersectionObserver
400 | * @return
401 | */
402 | _observerHandler(entries) {
403 | entries.forEach(entry => {
404 | if (entry.isIntersecting) {
405 | this.ListenerQueue.forEach(listener => {
406 | if (listener.el === entry.target) {
407 | if (listener.state.loaded)
408 | return this._observer.unobserve(listener.el)
409 | listener.load()
410 | }
411 | })
412 | }
413 | })
414 | }
415 |
416 | /**
417 | * set element attribute with image'url and state
418 | * @param listener
419 | * @param state
420 | * @param cache
421 | * @private
422 | */
423 | _elRenderer(listener, state, cache) {
424 | if (!listener.el) return
425 | const { el, bindType } = listener
426 |
427 | let src
428 | switch (state) {
429 | case 'loading':
430 | src = listener.loading
431 | break
432 | case 'error':
433 | src = listener.error
434 | break
435 | default:
436 | src = listener.src
437 | break
438 | }
439 |
440 | if (bindType) {
441 | el.style[bindType] = 'url("' + src + '")'
442 | } else if (el.getAttribute('src') !== src) {
443 | el.setAttribute('src', src)
444 | }
445 |
446 | el.setAttribute('lazy', state)
447 |
448 | this.$emit(state, listener, cache)
449 | this.options.adapter[state] &&
450 | this.options.adapter[state](listener, this.options)
451 |
452 | if (this.options.dispatchEvent) {
453 | const event = new CustomEvent(state, {
454 | detail: listener,
455 | })
456 | el.dispatchEvent(event)
457 | }
458 | }
459 |
460 | /**
461 | * generate loading loaded error image url
462 | * @param value
463 | * @returns {{src, loading: string, error: string}}
464 | * @private
465 | */
466 | _valueFormatter(value) {
467 | let src = value
468 | let { loading, error } = this.options
469 |
470 | // value is object
471 | if (isObject(value)) {
472 | if (!value.src && !this.options.silent) {
473 | console.error('Vue Lazyload warning: miss src with ' + value)
474 | }
475 |
476 | src = value.src
477 | loading = value.loading || this.options.loading
478 | error = value.error || this.options.error
479 | }
480 | return {
481 | src,
482 | loading,
483 | error,
484 | }
485 | }
486 | }
487 | }
488 |
--------------------------------------------------------------------------------
/src/listener.js:
--------------------------------------------------------------------------------
1 | import { loadImageAsync, noop } from './util.js'
2 |
3 | export default class ReactiveListener {
4 | constructor({
5 | el,
6 | src,
7 | error,
8 | loading,
9 | bindType,
10 | $parent,
11 | options,
12 | cors,
13 | elRenderer,
14 | imageCache,
15 | }) {
16 | this.el = el
17 | this.src = src
18 | this.error = error
19 | this.loading = loading
20 | this.bindType = bindType
21 | this.attempt = 0
22 | this.cors = cors
23 |
24 | this.naturalHeight = 0
25 | this.naturalWidth = 0
26 |
27 | this.options = options
28 |
29 | this.rect = null
30 |
31 | this.$parent = $parent
32 | this.elRenderer = elRenderer
33 | this._imageCache = imageCache
34 | this.performanceData = {
35 | init: Date.now(),
36 | loadStart: 0,
37 | loadEnd: 0,
38 | }
39 |
40 | this.filter()
41 | this.initState()
42 | this.render('loading', false)
43 | }
44 |
45 | /*
46 | * init listener state
47 | * @return
48 | */
49 | initState() {
50 | if ('dataset' in this.el) {
51 | this.el.dataset.src = this.src
52 | } else {
53 | this.el.setAttribute('data-src', this.src)
54 | }
55 |
56 | this.state = {
57 | loading: false,
58 | error: false,
59 | loaded: false,
60 | rendered: false,
61 | }
62 | }
63 |
64 | /*
65 | * record performance
66 | * @return
67 | */
68 | record(event) {
69 | this.performanceData[event] = Date.now()
70 | }
71 |
72 | /*
73 | * update image listener data
74 | * @param {String} image uri
75 | * @param {String} loading image uri
76 | * @param {String} error image uri
77 | * @return
78 | */
79 | update({ src, loading, error }) {
80 | const oldSrc = this.src
81 | this.src = src
82 | this.loading = loading
83 | this.error = error
84 | this.filter()
85 | if (oldSrc !== this.src) {
86 | this.attempt = 0
87 | this.initState()
88 | }
89 | }
90 |
91 | /*
92 | * get el node rect
93 | * @return
94 | */
95 | getRect() {
96 | this.rect = this.el.getBoundingClientRect()
97 | }
98 |
99 | /*
100 | * check el is in view
101 | * @return {Boolean} el is in view
102 | */
103 | checkInView() {
104 | this.getRect()
105 | return (
106 | this.rect.top < window.innerHeight * this.options.preLoad &&
107 | this.rect.bottom > this.options.preLoadTop &&
108 | this.rect.left < window.innerWidth * this.options.preLoad &&
109 | this.rect.right > 0
110 | )
111 | }
112 |
113 | /*
114 | * listener filter
115 | */
116 | filter() {
117 | Object.keys(this.options.filter).map(key => {
118 | this.options.filter[key](this, this.options)
119 | })
120 | }
121 |
122 | /*
123 | * render loading first
124 | * @params cb:Function
125 | * @return
126 | */
127 | renderLoading(cb) {
128 | this.state.loading = true
129 | loadImageAsync(
130 | {
131 | src: this.loading,
132 | cors: this.cors,
133 | },
134 | () => {
135 | this.render('loading', false)
136 | this.state.loading = false
137 | cb()
138 | },
139 | () => {
140 | // handler `loading image` load failed
141 | cb()
142 | this.state.loading = false
143 | if (!this.options.silent) {
144 | console.warn(
145 | `VueLazyload log: load failed with loading image(${this.loading})`,
146 | )
147 | }
148 | },
149 | )
150 | }
151 |
152 | /*
153 | * try load image and render it
154 | * @return
155 | */
156 | load(onFinish = noop) {
157 | if (this.attempt > this.options.attempt - 1 && this.state.error) {
158 | if (!this.options.silent) {
159 | console.log(
160 | `VueLazyload log: ${this.src} tried too more than ${this.options.attempt} times`,
161 | )
162 | }
163 |
164 | onFinish()
165 | return
166 | }
167 | if (this.state.rendered && this.state.loaded) {
168 | return
169 | }
170 |
171 | if (this._imageCache.has(this.src)) {
172 | this.state.loaded = true
173 | this.render('loaded', true)
174 | this.state.rendered = true
175 | return onFinish()
176 | }
177 |
178 | this.renderLoading(() => {
179 | this.attempt++
180 |
181 | this.options.adapter['beforeLoad'] &&
182 | this.options.adapter['beforeLoad'](this, this.options)
183 | this.record('loadStart')
184 |
185 | loadImageAsync(
186 | {
187 | src: this.src,
188 | cors: this.cors,
189 | },
190 | data => {
191 | this.naturalHeight = data.naturalHeight
192 | this.naturalWidth = data.naturalWidth
193 | this.state.loaded = true
194 | this.state.error = false
195 | this.record('loadEnd')
196 | this.render('loaded', false)
197 | this.state.rendered = true
198 | this._imageCache.add(this.src)
199 | onFinish()
200 | },
201 | err => {
202 | !this.options.silent && console.error(err)
203 | this.state.error = true
204 | this.state.loaded = false
205 | this.render('error', false)
206 | },
207 | )
208 | })
209 | }
210 |
211 | /*
212 | * render image
213 | * @param {String} state to render // ['loading', 'src', 'error']
214 | * @param {String} is form cache
215 | * @return
216 | */
217 | render(state, cache) {
218 | this.elRenderer(this, state, cache)
219 | }
220 |
221 | /*
222 | * output performance data
223 | * @return {Object} performance data
224 | */
225 | performance() {
226 | let state = 'loading'
227 | let time = 0
228 |
229 | if (this.state.loaded) {
230 | state = 'loaded'
231 | time =
232 | (this.performanceData.loadEnd - this.performanceData.loadStart) / 1000
233 | }
234 |
235 | if (this.state.error) state = 'error'
236 |
237 | return {
238 | src: this.src,
239 | state,
240 | time,
241 | }
242 | }
243 |
244 | /*
245 | * $destroy
246 | * @return
247 | */
248 | $destroy() {
249 | this.el = null
250 | this.src = null
251 | this.error = null
252 | this.loading = null
253 | this.bindType = null
254 | this.attempt = 0
255 | }
256 | }
257 |
--------------------------------------------------------------------------------
/src/util.js:
--------------------------------------------------------------------------------
1 | const inBrowser = typeof window !== 'undefined' && window !== null
2 |
3 | export const hasIntersectionObserver = checkIntersectionObserver()
4 |
5 | function checkIntersectionObserver() {
6 | if (
7 | inBrowser &&
8 | 'IntersectionObserver' in window &&
9 | 'IntersectionObserverEntry' in window &&
10 | 'intersectionRatio' in window.IntersectionObserverEntry.prototype
11 | ) {
12 | // Minimal polyfill for Edge 15's lack of `isIntersecting`
13 | // See: https://github.com/w3c/IntersectionObserver/issues/211
14 | if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
15 | Object.defineProperty(
16 | window.IntersectionObserverEntry.prototype,
17 | 'isIntersecting',
18 | {
19 | get: function () {
20 | return this.intersectionRatio > 0
21 | },
22 | },
23 | )
24 | }
25 | return true
26 | }
27 | return false
28 | }
29 |
30 | export const modeType = {
31 | event: 'event',
32 | observer: 'observer',
33 | }
34 |
35 | // CustomEvent polyfill for IE
36 | const CustomEvent = (function () {
37 | if (!inBrowser) return
38 | // not IE
39 | if (typeof window.CustomEvent === 'function') return window.CustomEvent
40 | function CustomEvent(event, params) {
41 | params = params || { bubbles: false, cancelable: false, detail: undefined }
42 | const evt = document.createEvent('CustomEvent')
43 | evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)
44 | return evt
45 | }
46 | CustomEvent.prototype = window.Event.prototype
47 | return CustomEvent
48 | })()
49 |
50 | function remove(arr, item) {
51 | if (!arr.length) return
52 | const index = arr.indexOf(item)
53 | if (index > -1) return arr.splice(index, 1)
54 | }
55 |
56 | function getBestSelectionFromSrcset(el, scale) {
57 | if (el.tagName !== 'IMG' || !el.getAttribute('data-srcset')) return
58 |
59 | let options = el.getAttribute('data-srcset')
60 | const container = el.parentNode
61 | const containerWidth = container.offsetWidth * scale
62 |
63 | let spaceIndex
64 | let tmpSrc
65 | let tmpWidth
66 |
67 | options = options.trim().split(/(?<=\d+w),/)
68 |
69 | const result = options.map(item => {
70 | item = item.trim()
71 | spaceIndex = item.lastIndexOf(' ')
72 | if (spaceIndex === -1) {
73 | tmpSrc = item
74 | tmpWidth = 999998
75 | } else {
76 | tmpSrc = item.substr(0, spaceIndex)
77 | tmpWidth = parseInt(
78 | item.substr(spaceIndex + 1, item.length - spaceIndex - 2),
79 | 10,
80 | )
81 | }
82 | return [tmpWidth, tmpSrc]
83 | })
84 |
85 | result.sort(function (a, b) {
86 | if (a[0] < b[0]) {
87 | return 1
88 | }
89 | if (a[0] > b[0]) {
90 | return -1
91 | }
92 | if (a[0] === b[0]) {
93 | if (b[1].indexOf('.webp', b[1].length - 5) !== -1) {
94 | return 1
95 | }
96 | if (a[1].indexOf('.webp', a[1].length - 5) !== -1) {
97 | return -1
98 | }
99 | }
100 | return 0
101 | })
102 | let bestSelectedSrc = ''
103 | let tmpOption
104 |
105 | for (let i = 0; i < result.length; i++) {
106 | tmpOption = result[i]
107 | bestSelectedSrc = tmpOption[1]
108 | const next = result[i + 1]
109 | if (next && next[0] < containerWidth) {
110 | bestSelectedSrc = tmpOption[1]
111 | break
112 | } else if (!next) {
113 | bestSelectedSrc = tmpOption[1]
114 | break
115 | }
116 | }
117 |
118 | return bestSelectedSrc
119 | }
120 |
121 | const getDPR = (scale = 1) =>
122 | inBrowser ? window.devicePixelRatio || scale : scale
123 |
124 | function supportWebp() {
125 | if (!inBrowser) return false
126 |
127 | let support = true
128 |
129 | try {
130 | const elem = document.createElement('canvas')
131 |
132 | if (elem.getContext && elem.getContext('2d')) {
133 | support = elem.toDataURL('image/webp').indexOf('data:image/webp') === 0
134 | }
135 | } catch (err) {
136 | support = false
137 | }
138 |
139 | return support
140 | }
141 |
142 | function throttle(action, delay) {
143 | let timeout = null
144 | let lastRun = 0
145 | let movement = null
146 | let needRun = false
147 | return function (...args) {
148 | if (timeout) {
149 | return
150 | }
151 |
152 | let elapsed = Date.now() - lastRun
153 | let runCallback = function () {
154 | lastRun = Date.now()
155 | timeout = false
156 | action.apply(this, args)
157 | }
158 | if (elapsed >= delay) {
159 | runCallback()
160 | } else {
161 | timeout = setTimeout(runCallback, delay)
162 | }
163 |
164 | if (needRun) {
165 | clearTimeout(movement)
166 | movement = setTimeout(runCallback, 2 * delay)
167 | }
168 | }
169 | }
170 |
171 | function testSupportsPassive() {
172 | if (!inBrowser) return
173 | let support = false
174 | try {
175 | let opts = Object.defineProperty({}, 'passive', {
176 | // eslint-disable-next-line getter-return
177 | get: function () {
178 | support = true
179 | },
180 | })
181 | window.addEventListener('test', null, opts)
182 | } catch (e) {
183 | // do nothing
184 | }
185 | return support
186 | }
187 |
188 | const supportsPassive = testSupportsPassive()
189 |
190 | const _ = {
191 | on(el, type, func, capture = false) {
192 | if (supportsPassive) {
193 | el.addEventListener(type, func, {
194 | capture,
195 | passive: true,
196 | })
197 | } else {
198 | el.addEventListener(type, func, capture)
199 | }
200 | },
201 | off(el, type, func, capture = false) {
202 | el.removeEventListener(type, func, capture)
203 | },
204 | }
205 |
206 | const loadImageAsync = (item, resolve, reject) => {
207 | let image = new Image()
208 | if (!item || !item.src) {
209 | const err = new Error('image src is required')
210 | return reject(err)
211 | }
212 |
213 | image.src = item.src
214 | if (item.cors) {
215 | image.crossOrigin = item.cors
216 | }
217 |
218 | image.onload = function () {
219 | resolve({
220 | naturalHeight: image.naturalHeight,
221 | naturalWidth: image.naturalWidth,
222 | src: image.src,
223 | })
224 | }
225 |
226 | image.onerror = function (e) {
227 | reject(e)
228 | }
229 | }
230 |
231 | const style = (el, prop) => {
232 | return typeof getComputedStyle !== 'undefined'
233 | ? getComputedStyle(el, null).getPropertyValue(prop)
234 | : el.style[prop]
235 | }
236 |
237 | const overflow = el => {
238 | return (
239 | style(el, 'overflow') + style(el, 'overflow-y') + style(el, 'overflow-x')
240 | )
241 | }
242 |
243 | const scrollParent = el => {
244 | if (!inBrowser) return
245 | if (!(el instanceof HTMLElement)) {
246 | return window
247 | }
248 |
249 | let parent = el
250 |
251 | while (parent) {
252 | if (parent === document.body || parent === document.documentElement) {
253 | break
254 | }
255 |
256 | if (!parent.parentNode) {
257 | break
258 | }
259 |
260 | if (/(scroll|auto)/.test(overflow(parent))) {
261 | return parent
262 | }
263 |
264 | parent = parent.parentNode
265 | }
266 |
267 | return window
268 | }
269 |
270 | function isObject(obj) {
271 | return obj !== null && typeof obj === 'object'
272 | }
273 |
274 | function noop() {}
275 |
276 | class ImageCache {
277 | constructor({ max }) {
278 | this.options = {
279 | max: max || 100,
280 | }
281 | this._caches = []
282 | }
283 |
284 | has(key) {
285 | return this._caches.indexOf(key) > -1
286 | }
287 |
288 | add(key) {
289 | if (this.has(key)) return
290 | this._caches.push(key)
291 | if (this._caches.length > this.options.max) {
292 | this.free()
293 | }
294 | }
295 |
296 | free() {
297 | this._caches.shift()
298 | }
299 | }
300 |
301 | export {
302 | ImageCache,
303 | inBrowser,
304 | CustomEvent,
305 | remove,
306 | noop,
307 | _,
308 | isObject,
309 | throttle,
310 | supportWebp,
311 | getDPR,
312 | scrollParent,
313 | loadImageAsync,
314 | getBestSelectionFromSrcset,
315 | }
316 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 |
3 | // https://vitejs.dev/config/
4 | export default defineConfig({
5 | build: {
6 | lib: {
7 | entry: 'src/index.js',
8 | name: 'vue-lazyload',
9 | formats: ['es', 'cjs', 'umd'],
10 | },
11 | rollupOptions: {
12 | external: /^vue/,
13 | output: {
14 | exports: 'named',
15 | globals: {
16 | vue: 'Vue',
17 | },
18 | },
19 | },
20 | },
21 | })
22 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@7.12.11":
6 | version "7.12.11"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
9 | dependencies:
10 | "@babel/highlight" "^7.10.4"
11 |
12 | "@babel/helper-validator-identifier@^7.12.11":
13 | version "7.12.11"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
15 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
16 |
17 | "@babel/highlight@^7.10.4":
18 | version "7.13.10"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
20 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.12.11"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@eslint/eslintrc@^0.4.0":
27 | version "0.4.0"
28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
29 | integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
30 | dependencies:
31 | ajv "^6.12.4"
32 | debug "^4.1.1"
33 | espree "^7.3.0"
34 | globals "^12.1.0"
35 | ignore "^4.0.6"
36 | import-fresh "^3.2.1"
37 | js-yaml "^3.13.1"
38 | minimatch "^3.0.4"
39 | strip-json-comments "^3.1.1"
40 |
41 | "@types/json-schema@^7.0.5":
42 | version "7.0.7"
43 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
44 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
45 |
46 | "@types/json5@^0.0.29":
47 | version "0.0.29"
48 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
49 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
50 |
51 | "@vue/eslint-config-prettier@^6.0.0":
52 | version "6.0.0"
53 | resolved "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#ad5912b308f4ae468458e02a2b05db0b9d246700"
54 | integrity sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==
55 | dependencies:
56 | eslint-config-prettier "^6.0.0"
57 |
58 | acorn-jsx@^5.2.0, acorn-jsx@^5.3.1:
59 | version "5.3.1"
60 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
61 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
62 |
63 | acorn@^7.1.1, acorn@^7.4.0:
64 | version "7.4.1"
65 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
66 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
67 |
68 | ajv-keywords@^3.5.2:
69 | version "3.5.2"
70 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
71 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
72 |
73 | ajv@^6.10.0, ajv@^6.12.4:
74 | version "6.12.6"
75 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
76 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
77 | dependencies:
78 | fast-deep-equal "^3.1.1"
79 | fast-json-stable-stringify "^2.0.0"
80 | json-schema-traverse "^0.4.1"
81 | uri-js "^4.2.2"
82 |
83 | ajv@^8.0.1:
84 | version "8.1.0"
85 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736"
86 | integrity sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==
87 | dependencies:
88 | fast-deep-equal "^3.1.1"
89 | json-schema-traverse "^1.0.0"
90 | require-from-string "^2.0.2"
91 | uri-js "^4.2.2"
92 |
93 | ansi-colors@^4.1.1:
94 | version "4.1.1"
95 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
96 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
97 |
98 | ansi-regex@^5.0.0:
99 | version "5.0.0"
100 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
101 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
102 |
103 | ansi-styles@^3.2.1:
104 | version "3.2.1"
105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
106 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
107 | dependencies:
108 | color-convert "^1.9.0"
109 |
110 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
111 | version "4.3.0"
112 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
113 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
114 | dependencies:
115 | color-convert "^2.0.1"
116 |
117 | argparse@^1.0.7:
118 | version "1.0.10"
119 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
120 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
121 | dependencies:
122 | sprintf-js "~1.0.2"
123 |
124 | array-includes@^3.1.1:
125 | version "3.1.3"
126 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
127 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
128 | dependencies:
129 | call-bind "^1.0.2"
130 | define-properties "^1.1.3"
131 | es-abstract "^1.18.0-next.2"
132 | get-intrinsic "^1.1.1"
133 | is-string "^1.0.5"
134 |
135 | array.prototype.flat@^1.2.3:
136 | version "1.2.4"
137 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
138 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
139 | dependencies:
140 | call-bind "^1.0.0"
141 | define-properties "^1.1.3"
142 | es-abstract "^1.18.0-next.1"
143 |
144 | astral-regex@^2.0.0:
145 | version "2.0.0"
146 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
147 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
148 |
149 | balanced-match@^1.0.0:
150 | version "1.0.2"
151 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
152 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
153 |
154 | big.js@^5.2.2:
155 | version "5.2.2"
156 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
157 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
158 |
159 | brace-expansion@^1.1.7:
160 | version "1.1.11"
161 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
162 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
163 | dependencies:
164 | balanced-match "^1.0.0"
165 | concat-map "0.0.1"
166 |
167 | call-bind@^1.0.0, call-bind@^1.0.2:
168 | version "1.0.2"
169 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
170 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
171 | dependencies:
172 | function-bind "^1.1.1"
173 | get-intrinsic "^1.0.2"
174 |
175 | callsites@^3.0.0:
176 | version "3.1.0"
177 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
178 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
179 |
180 | chalk@^2.0.0:
181 | version "2.4.2"
182 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
183 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
184 | dependencies:
185 | ansi-styles "^3.2.1"
186 | escape-string-regexp "^1.0.5"
187 | supports-color "^5.3.0"
188 |
189 | chalk@^4.0.0:
190 | version "4.1.0"
191 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
192 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
193 | dependencies:
194 | ansi-styles "^4.1.0"
195 | supports-color "^7.1.0"
196 |
197 | chalk@^4.1.1:
198 | version "4.1.1"
199 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
200 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
201 | dependencies:
202 | ansi-styles "^4.1.0"
203 | supports-color "^7.1.0"
204 |
205 | color-convert@^1.9.0:
206 | version "1.9.3"
207 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
208 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
209 | dependencies:
210 | color-name "1.1.3"
211 |
212 | color-convert@^2.0.1:
213 | version "2.0.1"
214 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
215 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
216 | dependencies:
217 | color-name "~1.1.4"
218 |
219 | color-name@1.1.3:
220 | version "1.1.3"
221 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
222 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
223 |
224 | color-name@~1.1.4:
225 | version "1.1.4"
226 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
227 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
228 |
229 | colorette@^1.2.2:
230 | version "1.2.2"
231 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
232 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
233 |
234 | commondir@^1.0.1:
235 | version "1.0.1"
236 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
237 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
238 |
239 | concat-map@0.0.1:
240 | version "0.0.1"
241 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
242 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
243 |
244 | contains-path@^0.1.0:
245 | version "0.1.0"
246 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
247 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
248 |
249 | cross-spawn@^7.0.2, cross-spawn@^7.0.3:
250 | version "7.0.3"
251 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
252 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
253 | dependencies:
254 | path-key "^3.1.0"
255 | shebang-command "^2.0.0"
256 | which "^2.0.1"
257 |
258 | debug@^2.6.9:
259 | version "2.6.9"
260 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
261 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
262 | dependencies:
263 | ms "2.0.0"
264 |
265 | debug@^4.0.1, debug@^4.1.1:
266 | version "4.3.1"
267 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
268 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
269 | dependencies:
270 | ms "2.1.2"
271 |
272 | deep-is@^0.1.3:
273 | version "0.1.3"
274 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
275 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
276 |
277 | define-properties@^1.1.3:
278 | version "1.1.3"
279 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
280 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
281 | dependencies:
282 | object-keys "^1.0.12"
283 |
284 | doctrine@1.5.0:
285 | version "1.5.0"
286 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
287 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
288 | dependencies:
289 | esutils "^2.0.2"
290 | isarray "^1.0.0"
291 |
292 | doctrine@^3.0.0:
293 | version "3.0.0"
294 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
295 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
296 | dependencies:
297 | esutils "^2.0.2"
298 |
299 | emoji-regex@^8.0.0:
300 | version "8.0.0"
301 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
302 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
303 |
304 | emojis-list@^3.0.0:
305 | version "3.0.0"
306 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
307 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
308 |
309 | enquirer@^2.3.5:
310 | version "2.3.6"
311 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
312 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
313 | dependencies:
314 | ansi-colors "^4.1.1"
315 |
316 | error-ex@^1.2.0:
317 | version "1.3.2"
318 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
319 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
320 | dependencies:
321 | is-arrayish "^0.2.1"
322 |
323 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
324 | version "1.18.0"
325 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
326 | integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
327 | dependencies:
328 | call-bind "^1.0.2"
329 | es-to-primitive "^1.2.1"
330 | function-bind "^1.1.1"
331 | get-intrinsic "^1.1.1"
332 | has "^1.0.3"
333 | has-symbols "^1.0.2"
334 | is-callable "^1.2.3"
335 | is-negative-zero "^2.0.1"
336 | is-regex "^1.1.2"
337 | is-string "^1.0.5"
338 | object-inspect "^1.9.0"
339 | object-keys "^1.1.1"
340 | object.assign "^4.1.2"
341 | string.prototype.trimend "^1.0.4"
342 | string.prototype.trimstart "^1.0.4"
343 | unbox-primitive "^1.0.0"
344 |
345 | es-to-primitive@^1.2.1:
346 | version "1.2.1"
347 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
348 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
349 | dependencies:
350 | is-callable "^1.1.4"
351 | is-date-object "^1.0.1"
352 | is-symbol "^1.0.2"
353 |
354 | esbuild@^0.9.3:
355 | version "0.9.7"
356 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.7.tgz#ea0d639cbe4b88ec25fbed4d6ff00c8d788ef70b"
357 | integrity sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==
358 |
359 | escape-string-regexp@^1.0.5:
360 | version "1.0.5"
361 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
362 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
363 |
364 | eslint-config-prettier@^6.0.0:
365 | version "6.15.0"
366 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
367 | integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
368 | dependencies:
369 | get-stdin "^6.0.0"
370 |
371 | eslint-import-resolver-node@^0.3.4:
372 | version "0.3.4"
373 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
374 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
375 | dependencies:
376 | debug "^2.6.9"
377 | resolve "^1.13.1"
378 |
379 | eslint-loader@^4.0.2:
380 | version "4.0.2"
381 | resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec"
382 | integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==
383 | dependencies:
384 | find-cache-dir "^3.3.1"
385 | fs-extra "^8.1.0"
386 | loader-utils "^2.0.0"
387 | object-hash "^2.0.3"
388 | schema-utils "^2.6.5"
389 |
390 | eslint-module-utils@^2.6.0:
391 | version "2.6.0"
392 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
393 | integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
394 | dependencies:
395 | debug "^2.6.9"
396 | pkg-dir "^2.0.0"
397 |
398 | eslint-plugin-import@^2.22.1:
399 | version "2.22.1"
400 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
401 | integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
402 | dependencies:
403 | array-includes "^3.1.1"
404 | array.prototype.flat "^1.2.3"
405 | contains-path "^0.1.0"
406 | debug "^2.6.9"
407 | doctrine "1.5.0"
408 | eslint-import-resolver-node "^0.3.4"
409 | eslint-module-utils "^2.6.0"
410 | has "^1.0.3"
411 | minimatch "^3.0.4"
412 | object.values "^1.1.1"
413 | read-pkg-up "^2.0.0"
414 | resolve "^1.17.0"
415 | tsconfig-paths "^3.9.0"
416 |
417 | eslint-plugin-prettier@^3.3.1:
418 | version "3.3.1"
419 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7"
420 | integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==
421 | dependencies:
422 | prettier-linter-helpers "^1.0.0"
423 |
424 | eslint-plugin-vue@^7.9.0:
425 | version "7.9.0"
426 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560"
427 | integrity sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==
428 | dependencies:
429 | eslint-utils "^2.1.0"
430 | natural-compare "^1.4.0"
431 | semver "^7.3.2"
432 | vue-eslint-parser "^7.6.0"
433 |
434 | eslint-scope@^5.0.0, eslint-scope@^5.1.1:
435 | version "5.1.1"
436 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
437 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
438 | dependencies:
439 | esrecurse "^4.3.0"
440 | estraverse "^4.1.1"
441 |
442 | eslint-utils@^2.1.0:
443 | version "2.1.0"
444 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
445 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
446 | dependencies:
447 | eslint-visitor-keys "^1.1.0"
448 |
449 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
450 | version "1.3.0"
451 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
452 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
453 |
454 | eslint-visitor-keys@^2.0.0:
455 | version "2.0.0"
456 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
457 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
458 |
459 | eslint@^7.24.0:
460 | version "7.24.0"
461 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.24.0.tgz#2e44fa62d93892bfdb100521f17345ba54b8513a"
462 | integrity sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==
463 | dependencies:
464 | "@babel/code-frame" "7.12.11"
465 | "@eslint/eslintrc" "^0.4.0"
466 | ajv "^6.10.0"
467 | chalk "^4.0.0"
468 | cross-spawn "^7.0.2"
469 | debug "^4.0.1"
470 | doctrine "^3.0.0"
471 | enquirer "^2.3.5"
472 | eslint-scope "^5.1.1"
473 | eslint-utils "^2.1.0"
474 | eslint-visitor-keys "^2.0.0"
475 | espree "^7.3.1"
476 | esquery "^1.4.0"
477 | esutils "^2.0.2"
478 | file-entry-cache "^6.0.1"
479 | functional-red-black-tree "^1.0.1"
480 | glob-parent "^5.0.0"
481 | globals "^13.6.0"
482 | ignore "^4.0.6"
483 | import-fresh "^3.0.0"
484 | imurmurhash "^0.1.4"
485 | is-glob "^4.0.0"
486 | js-yaml "^3.13.1"
487 | json-stable-stringify-without-jsonify "^1.0.1"
488 | levn "^0.4.1"
489 | lodash "^4.17.21"
490 | minimatch "^3.0.4"
491 | natural-compare "^1.4.0"
492 | optionator "^0.9.1"
493 | progress "^2.0.0"
494 | regexpp "^3.1.0"
495 | semver "^7.2.1"
496 | strip-ansi "^6.0.0"
497 | strip-json-comments "^3.1.0"
498 | table "^6.0.4"
499 | text-table "^0.2.0"
500 | v8-compile-cache "^2.0.3"
501 |
502 | espree@^6.2.1:
503 | version "6.2.1"
504 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
505 | integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
506 | dependencies:
507 | acorn "^7.1.1"
508 | acorn-jsx "^5.2.0"
509 | eslint-visitor-keys "^1.1.0"
510 |
511 | espree@^7.3.0, espree@^7.3.1:
512 | version "7.3.1"
513 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
514 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
515 | dependencies:
516 | acorn "^7.4.0"
517 | acorn-jsx "^5.3.1"
518 | eslint-visitor-keys "^1.3.0"
519 |
520 | esprima@^4.0.0:
521 | version "4.0.1"
522 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
523 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
524 |
525 | esquery@^1.4.0:
526 | version "1.4.0"
527 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
528 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
529 | dependencies:
530 | estraverse "^5.1.0"
531 |
532 | esrecurse@^4.3.0:
533 | version "4.3.0"
534 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
535 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
536 | dependencies:
537 | estraverse "^5.2.0"
538 |
539 | estraverse@^4.1.1:
540 | version "4.3.0"
541 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
542 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
543 |
544 | estraverse@^5.1.0, estraverse@^5.2.0:
545 | version "5.2.0"
546 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
547 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
548 |
549 | esutils@^2.0.2:
550 | version "2.0.3"
551 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
552 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
553 |
554 | execa@^5.1.1:
555 | version "5.1.1"
556 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
557 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
558 | dependencies:
559 | cross-spawn "^7.0.3"
560 | get-stream "^6.0.0"
561 | human-signals "^2.1.0"
562 | is-stream "^2.0.0"
563 | merge-stream "^2.0.0"
564 | npm-run-path "^4.0.1"
565 | onetime "^5.1.2"
566 | signal-exit "^3.0.3"
567 | strip-final-newline "^2.0.0"
568 |
569 | fast-deep-equal@^3.1.1:
570 | version "3.1.3"
571 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
572 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
573 |
574 | fast-diff@^1.1.2:
575 | version "1.2.0"
576 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
577 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
578 |
579 | fast-json-stable-stringify@^2.0.0:
580 | version "2.1.0"
581 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
582 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
583 |
584 | fast-levenshtein@^2.0.6:
585 | version "2.0.6"
586 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
587 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
588 |
589 | file-entry-cache@^6.0.1:
590 | version "6.0.1"
591 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
592 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
593 | dependencies:
594 | flat-cache "^3.0.4"
595 |
596 | find-cache-dir@^3.3.1:
597 | version "3.3.1"
598 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
599 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
600 | dependencies:
601 | commondir "^1.0.1"
602 | make-dir "^3.0.2"
603 | pkg-dir "^4.1.0"
604 |
605 | find-up@^2.0.0, find-up@^2.1.0:
606 | version "2.1.0"
607 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
608 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
609 | dependencies:
610 | locate-path "^2.0.0"
611 |
612 | find-up@^4.0.0:
613 | version "4.1.0"
614 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
615 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
616 | dependencies:
617 | locate-path "^5.0.0"
618 | path-exists "^4.0.0"
619 |
620 | flat-cache@^3.0.4:
621 | version "3.0.4"
622 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
623 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
624 | dependencies:
625 | flatted "^3.1.0"
626 | rimraf "^3.0.2"
627 |
628 | flatted@^3.1.0:
629 | version "3.1.1"
630 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
631 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
632 |
633 | fs-extra@^8.1.0:
634 | version "8.1.0"
635 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
636 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
637 | dependencies:
638 | graceful-fs "^4.2.0"
639 | jsonfile "^4.0.0"
640 | universalify "^0.1.0"
641 |
642 | fs.realpath@^1.0.0:
643 | version "1.0.0"
644 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
645 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
646 |
647 | fsevents@~2.3.1:
648 | version "2.3.2"
649 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
650 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
651 |
652 | function-bind@^1.1.1:
653 | version "1.1.1"
654 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
655 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
656 |
657 | functional-red-black-tree@^1.0.1:
658 | version "1.0.1"
659 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
660 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
661 |
662 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
663 | version "1.1.1"
664 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
665 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
666 | dependencies:
667 | function-bind "^1.1.1"
668 | has "^1.0.3"
669 | has-symbols "^1.0.1"
670 |
671 | get-stdin@^6.0.0:
672 | version "6.0.0"
673 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
674 | integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
675 |
676 | get-stream@^6.0.0:
677 | version "6.0.1"
678 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
679 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
680 |
681 | glob-parent@^5.0.0:
682 | version "5.1.2"
683 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
684 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
685 | dependencies:
686 | is-glob "^4.0.1"
687 |
688 | glob@^7.1.3:
689 | version "7.1.6"
690 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
691 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
692 | dependencies:
693 | fs.realpath "^1.0.0"
694 | inflight "^1.0.4"
695 | inherits "2"
696 | minimatch "^3.0.4"
697 | once "^1.3.0"
698 | path-is-absolute "^1.0.0"
699 |
700 | globals@^12.1.0:
701 | version "12.4.0"
702 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
703 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
704 | dependencies:
705 | type-fest "^0.8.1"
706 |
707 | globals@^13.6.0:
708 | version "13.8.0"
709 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
710 | integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
711 | dependencies:
712 | type-fest "^0.20.2"
713 |
714 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
715 | version "4.2.6"
716 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
717 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
718 |
719 | has-bigints@^1.0.1:
720 | version "1.0.1"
721 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
722 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
723 |
724 | has-flag@^3.0.0:
725 | version "3.0.0"
726 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
727 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
728 |
729 | has-flag@^4.0.0:
730 | version "4.0.0"
731 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
732 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
733 |
734 | has-symbols@^1.0.1, has-symbols@^1.0.2:
735 | version "1.0.2"
736 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
737 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
738 |
739 | has@^1.0.3:
740 | version "1.0.3"
741 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
742 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
743 | dependencies:
744 | function-bind "^1.1.1"
745 |
746 | hosted-git-info@^2.1.4:
747 | version "2.8.9"
748 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
749 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
750 |
751 | human-signals@^2.1.0:
752 | version "2.1.0"
753 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
754 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
755 |
756 | ignore@^4.0.6:
757 | version "4.0.6"
758 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
759 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
760 |
761 | import-fresh@^3.0.0, import-fresh@^3.2.1:
762 | version "3.3.0"
763 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
764 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
765 | dependencies:
766 | parent-module "^1.0.0"
767 | resolve-from "^4.0.0"
768 |
769 | imurmurhash@^0.1.4:
770 | version "0.1.4"
771 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
772 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
773 |
774 | inflight@^1.0.4:
775 | version "1.0.6"
776 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
777 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
778 | dependencies:
779 | once "^1.3.0"
780 | wrappy "1"
781 |
782 | inherits@2:
783 | version "2.0.4"
784 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
785 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
786 |
787 | is-arrayish@^0.2.1:
788 | version "0.2.1"
789 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
790 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
791 |
792 | is-bigint@^1.0.1:
793 | version "1.0.1"
794 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
795 | integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==
796 |
797 | is-boolean-object@^1.1.0:
798 | version "1.1.0"
799 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
800 | integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
801 | dependencies:
802 | call-bind "^1.0.0"
803 |
804 | is-callable@^1.1.4, is-callable@^1.2.3:
805 | version "1.2.3"
806 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
807 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
808 |
809 | is-core-module@^2.2.0:
810 | version "2.2.0"
811 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
812 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
813 | dependencies:
814 | has "^1.0.3"
815 |
816 | is-date-object@^1.0.1:
817 | version "1.0.2"
818 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
819 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
820 |
821 | is-extglob@^2.1.1:
822 | version "2.1.1"
823 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
824 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
825 |
826 | is-fullwidth-code-point@^3.0.0:
827 | version "3.0.0"
828 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
829 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
830 |
831 | is-glob@^4.0.0, is-glob@^4.0.1:
832 | version "4.0.1"
833 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
834 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
835 | dependencies:
836 | is-extglob "^2.1.1"
837 |
838 | is-negative-zero@^2.0.1:
839 | version "2.0.1"
840 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
841 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
842 |
843 | is-number-object@^1.0.4:
844 | version "1.0.4"
845 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
846 | integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
847 |
848 | is-regex@^1.1.2:
849 | version "1.1.2"
850 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
851 | integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
852 | dependencies:
853 | call-bind "^1.0.2"
854 | has-symbols "^1.0.1"
855 |
856 | is-stream@^2.0.0:
857 | version "2.0.0"
858 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
859 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
860 |
861 | is-string@^1.0.5:
862 | version "1.0.5"
863 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
864 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
865 |
866 | is-symbol@^1.0.2, is-symbol@^1.0.3:
867 | version "1.0.3"
868 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
869 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
870 | dependencies:
871 | has-symbols "^1.0.1"
872 |
873 | isarray@^1.0.0:
874 | version "1.0.0"
875 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
876 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
877 |
878 | isexe@^2.0.0:
879 | version "2.0.0"
880 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
881 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
882 |
883 | js-tokens@^4.0.0:
884 | version "4.0.0"
885 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
886 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
887 |
888 | js-yaml@^3.13.1:
889 | version "3.14.1"
890 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
891 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
892 | dependencies:
893 | argparse "^1.0.7"
894 | esprima "^4.0.0"
895 |
896 | json-schema-traverse@^0.4.1:
897 | version "0.4.1"
898 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
899 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
900 |
901 | json-schema-traverse@^1.0.0:
902 | version "1.0.0"
903 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
904 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
905 |
906 | json-stable-stringify-without-jsonify@^1.0.1:
907 | version "1.0.1"
908 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
909 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
910 |
911 | json5@^1.0.1:
912 | version "1.0.1"
913 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
914 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
915 | dependencies:
916 | minimist "^1.2.0"
917 |
918 | json5@^2.1.2:
919 | version "2.2.0"
920 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
921 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
922 | dependencies:
923 | minimist "^1.2.5"
924 |
925 | jsonfile@^4.0.0:
926 | version "4.0.0"
927 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
928 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
929 | optionalDependencies:
930 | graceful-fs "^4.1.6"
931 |
932 | levn@^0.4.1:
933 | version "0.4.1"
934 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
935 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
936 | dependencies:
937 | prelude-ls "^1.2.1"
938 | type-check "~0.4.0"
939 |
940 | load-json-file@^2.0.0:
941 | version "2.0.0"
942 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
943 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
944 | dependencies:
945 | graceful-fs "^4.1.2"
946 | parse-json "^2.2.0"
947 | pify "^2.0.0"
948 | strip-bom "^3.0.0"
949 |
950 | loader-utils@^2.0.0:
951 | version "2.0.0"
952 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
953 | integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
954 | dependencies:
955 | big.js "^5.2.2"
956 | emojis-list "^3.0.0"
957 | json5 "^2.1.2"
958 |
959 | locate-path@^2.0.0:
960 | version "2.0.0"
961 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
962 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
963 | dependencies:
964 | p-locate "^2.0.0"
965 | path-exists "^3.0.0"
966 |
967 | locate-path@^5.0.0:
968 | version "5.0.0"
969 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
970 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
971 | dependencies:
972 | p-locate "^4.1.0"
973 |
974 | lodash.clonedeep@^4.5.0:
975 | version "4.5.0"
976 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
977 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
978 |
979 | lodash.flatten@^4.4.0:
980 | version "4.4.0"
981 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
982 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
983 |
984 | lodash.truncate@^4.4.2:
985 | version "4.4.2"
986 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
987 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
988 |
989 | lodash@^4.17.15, lodash@^4.17.21:
990 | version "4.17.21"
991 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
992 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
993 |
994 | lru-cache@^6.0.0:
995 | version "6.0.0"
996 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
997 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
998 | dependencies:
999 | yallist "^4.0.0"
1000 |
1001 | make-dir@^3.0.2:
1002 | version "3.1.0"
1003 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
1004 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1005 | dependencies:
1006 | semver "^6.0.0"
1007 |
1008 | merge-stream@^2.0.0:
1009 | version "2.0.0"
1010 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1011 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1012 |
1013 | mimic-fn@^2.1.0:
1014 | version "2.1.0"
1015 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1016 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1017 |
1018 | minimatch@^3.0.4:
1019 | version "3.0.4"
1020 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1021 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1022 | dependencies:
1023 | brace-expansion "^1.1.7"
1024 |
1025 | minimist@^1.2.0, minimist@^1.2.5:
1026 | version "1.2.5"
1027 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1028 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1029 |
1030 | ms@2.0.0:
1031 | version "2.0.0"
1032 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1033 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1034 |
1035 | ms@2.1.2:
1036 | version "2.1.2"
1037 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1038 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1039 |
1040 | nanoid@^3.1.22:
1041 | version "3.1.22"
1042 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
1043 | integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
1044 |
1045 | natural-compare@^1.4.0:
1046 | version "1.4.0"
1047 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1048 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1049 |
1050 | normalize-package-data@^2.3.2:
1051 | version "2.5.0"
1052 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
1053 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
1054 | dependencies:
1055 | hosted-git-info "^2.1.4"
1056 | resolve "^1.10.0"
1057 | semver "2 || 3 || 4 || 5"
1058 | validate-npm-package-license "^3.0.1"
1059 |
1060 | npm-run-path@^4.0.1:
1061 | version "4.0.1"
1062 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1063 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1064 | dependencies:
1065 | path-key "^3.0.0"
1066 |
1067 | object-hash@^2.0.3:
1068 | version "2.1.1"
1069 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09"
1070 | integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==
1071 |
1072 | object-inspect@^1.9.0:
1073 | version "1.9.0"
1074 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
1075 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
1076 |
1077 | object-keys@^1.0.12, object-keys@^1.1.1:
1078 | version "1.1.1"
1079 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1080 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1081 |
1082 | object.assign@^4.1.2:
1083 | version "4.1.2"
1084 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1085 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1086 | dependencies:
1087 | call-bind "^1.0.0"
1088 | define-properties "^1.1.3"
1089 | has-symbols "^1.0.1"
1090 | object-keys "^1.1.1"
1091 |
1092 | object.values@^1.1.1:
1093 | version "1.1.3"
1094 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
1095 | integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
1096 | dependencies:
1097 | call-bind "^1.0.2"
1098 | define-properties "^1.1.3"
1099 | es-abstract "^1.18.0-next.2"
1100 | has "^1.0.3"
1101 |
1102 | once@^1.3.0:
1103 | version "1.4.0"
1104 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1105 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1106 | dependencies:
1107 | wrappy "1"
1108 |
1109 | onetime@^5.1.2:
1110 | version "5.1.2"
1111 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1112 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1113 | dependencies:
1114 | mimic-fn "^2.1.0"
1115 |
1116 | optionator@^0.9.1:
1117 | version "0.9.1"
1118 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1119 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1120 | dependencies:
1121 | deep-is "^0.1.3"
1122 | fast-levenshtein "^2.0.6"
1123 | levn "^0.4.1"
1124 | prelude-ls "^1.2.1"
1125 | type-check "^0.4.0"
1126 | word-wrap "^1.2.3"
1127 |
1128 | p-limit@^1.1.0:
1129 | version "1.3.0"
1130 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1131 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
1132 | dependencies:
1133 | p-try "^1.0.0"
1134 |
1135 | p-limit@^2.2.0:
1136 | version "2.3.0"
1137 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1138 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1139 | dependencies:
1140 | p-try "^2.0.0"
1141 |
1142 | p-locate@^2.0.0:
1143 | version "2.0.0"
1144 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1145 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
1146 | dependencies:
1147 | p-limit "^1.1.0"
1148 |
1149 | p-locate@^4.1.0:
1150 | version "4.1.0"
1151 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1152 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1153 | dependencies:
1154 | p-limit "^2.2.0"
1155 |
1156 | p-try@^1.0.0:
1157 | version "1.0.0"
1158 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1159 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
1160 |
1161 | p-try@^2.0.0:
1162 | version "2.2.0"
1163 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1164 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1165 |
1166 | parent-module@^1.0.0:
1167 | version "1.0.1"
1168 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1169 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1170 | dependencies:
1171 | callsites "^3.0.0"
1172 |
1173 | parse-json@^2.2.0:
1174 | version "2.2.0"
1175 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1176 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
1177 | dependencies:
1178 | error-ex "^1.2.0"
1179 |
1180 | path-exists@^3.0.0:
1181 | version "3.0.0"
1182 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1183 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1184 |
1185 | path-exists@^4.0.0:
1186 | version "4.0.0"
1187 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1188 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1189 |
1190 | path-is-absolute@^1.0.0:
1191 | version "1.0.1"
1192 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1193 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1194 |
1195 | path-key@^3.0.0, path-key@^3.1.0:
1196 | version "3.1.1"
1197 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1198 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1199 |
1200 | path-parse@^1.0.6:
1201 | version "1.0.6"
1202 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1203 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1204 |
1205 | path-type@^2.0.0:
1206 | version "2.0.0"
1207 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
1208 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
1209 | dependencies:
1210 | pify "^2.0.0"
1211 |
1212 | pify@^2.0.0:
1213 | version "2.3.0"
1214 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1215 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
1216 |
1217 | pkg-dir@^2.0.0:
1218 | version "2.0.0"
1219 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
1220 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
1221 | dependencies:
1222 | find-up "^2.1.0"
1223 |
1224 | pkg-dir@^4.1.0:
1225 | version "4.2.0"
1226 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1227 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1228 | dependencies:
1229 | find-up "^4.0.0"
1230 |
1231 | postcss@^8.2.1:
1232 | version "8.2.10"
1233 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b"
1234 | integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==
1235 | dependencies:
1236 | colorette "^1.2.2"
1237 | nanoid "^3.1.22"
1238 | source-map "^0.6.1"
1239 |
1240 | prelude-ls@^1.2.1:
1241 | version "1.2.1"
1242 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1243 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1244 |
1245 | prettier-linter-helpers@^1.0.0:
1246 | version "1.0.0"
1247 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
1248 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
1249 | dependencies:
1250 | fast-diff "^1.1.2"
1251 |
1252 | prettier@^2.2.1:
1253 | version "2.2.1"
1254 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
1255 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
1256 |
1257 | progress@^2.0.0:
1258 | version "2.0.3"
1259 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1260 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1261 |
1262 | punycode@^2.1.0:
1263 | version "2.1.1"
1264 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1265 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1266 |
1267 | read-pkg-up@^2.0.0:
1268 | version "2.0.0"
1269 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
1270 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
1271 | dependencies:
1272 | find-up "^2.0.0"
1273 | read-pkg "^2.0.0"
1274 |
1275 | read-pkg@^2.0.0:
1276 | version "2.0.0"
1277 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
1278 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
1279 | dependencies:
1280 | load-json-file "^2.0.0"
1281 | normalize-package-data "^2.3.2"
1282 | path-type "^2.0.0"
1283 |
1284 | regexpp@^3.1.0:
1285 | version "3.1.0"
1286 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
1287 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
1288 |
1289 | require-from-string@^2.0.2:
1290 | version "2.0.2"
1291 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1292 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1293 |
1294 | resolve-from@^4.0.0:
1295 | version "4.0.0"
1296 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1297 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1298 |
1299 | resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0:
1300 | version "1.20.0"
1301 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
1302 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
1303 | dependencies:
1304 | is-core-module "^2.2.0"
1305 | path-parse "^1.0.6"
1306 |
1307 | rimraf@^3.0.2:
1308 | version "3.0.2"
1309 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1310 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1311 | dependencies:
1312 | glob "^7.1.3"
1313 |
1314 | rollup@^2.38.5:
1315 | version "2.45.2"
1316 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48"
1317 | integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ==
1318 | optionalDependencies:
1319 | fsevents "~2.3.1"
1320 |
1321 | schema-utils@^2.6.5:
1322 | version "2.7.1"
1323 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
1324 | integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
1325 | dependencies:
1326 | "@types/json-schema" "^7.0.5"
1327 | ajv "^6.12.4"
1328 | ajv-keywords "^3.5.2"
1329 |
1330 | "semver@2 || 3 || 4 || 5":
1331 | version "5.7.1"
1332 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1333 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1334 |
1335 | semver@^6.0.0:
1336 | version "6.3.0"
1337 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1338 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1339 |
1340 | semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
1341 | version "7.3.5"
1342 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
1343 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
1344 | dependencies:
1345 | lru-cache "^6.0.0"
1346 |
1347 | shebang-command@^2.0.0:
1348 | version "2.0.0"
1349 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1350 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1351 | dependencies:
1352 | shebang-regex "^3.0.0"
1353 |
1354 | shebang-regex@^3.0.0:
1355 | version "3.0.0"
1356 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1357 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1358 |
1359 | signal-exit@^3.0.3:
1360 | version "3.0.3"
1361 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
1362 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
1363 |
1364 | slice-ansi@^4.0.0:
1365 | version "4.0.0"
1366 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
1367 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
1368 | dependencies:
1369 | ansi-styles "^4.0.0"
1370 | astral-regex "^2.0.0"
1371 | is-fullwidth-code-point "^3.0.0"
1372 |
1373 | source-map@^0.6.1:
1374 | version "0.6.1"
1375 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1376 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1377 |
1378 | spdx-correct@^3.0.0:
1379 | version "3.1.1"
1380 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
1381 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
1382 | dependencies:
1383 | spdx-expression-parse "^3.0.0"
1384 | spdx-license-ids "^3.0.0"
1385 |
1386 | spdx-exceptions@^2.1.0:
1387 | version "2.3.0"
1388 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
1389 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
1390 |
1391 | spdx-expression-parse@^3.0.0:
1392 | version "3.0.1"
1393 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
1394 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
1395 | dependencies:
1396 | spdx-exceptions "^2.1.0"
1397 | spdx-license-ids "^3.0.0"
1398 |
1399 | spdx-license-ids@^3.0.0:
1400 | version "3.0.7"
1401 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
1402 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
1403 |
1404 | sprintf-js@~1.0.2:
1405 | version "1.0.3"
1406 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1407 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1408 |
1409 | string-width@^4.2.0:
1410 | version "4.2.2"
1411 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
1412 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
1413 | dependencies:
1414 | emoji-regex "^8.0.0"
1415 | is-fullwidth-code-point "^3.0.0"
1416 | strip-ansi "^6.0.0"
1417 |
1418 | string.prototype.trimend@^1.0.4:
1419 | version "1.0.4"
1420 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
1421 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
1422 | dependencies:
1423 | call-bind "^1.0.2"
1424 | define-properties "^1.1.3"
1425 |
1426 | string.prototype.trimstart@^1.0.4:
1427 | version "1.0.4"
1428 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
1429 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
1430 | dependencies:
1431 | call-bind "^1.0.2"
1432 | define-properties "^1.1.3"
1433 |
1434 | strip-ansi@^6.0.0:
1435 | version "6.0.0"
1436 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1437 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1438 | dependencies:
1439 | ansi-regex "^5.0.0"
1440 |
1441 | strip-bom@^3.0.0:
1442 | version "3.0.0"
1443 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1444 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1445 |
1446 | strip-final-newline@^2.0.0:
1447 | version "2.0.0"
1448 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
1449 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
1450 |
1451 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
1452 | version "3.1.1"
1453 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1454 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1455 |
1456 | supports-color@^5.3.0:
1457 | version "5.5.0"
1458 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1459 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1460 | dependencies:
1461 | has-flag "^3.0.0"
1462 |
1463 | supports-color@^7.1.0:
1464 | version "7.2.0"
1465 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1466 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1467 | dependencies:
1468 | has-flag "^4.0.0"
1469 |
1470 | table@^6.0.4:
1471 | version "6.0.9"
1472 | resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb"
1473 | integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==
1474 | dependencies:
1475 | ajv "^8.0.1"
1476 | is-boolean-object "^1.1.0"
1477 | is-number-object "^1.0.4"
1478 | is-string "^1.0.5"
1479 | lodash.clonedeep "^4.5.0"
1480 | lodash.flatten "^4.4.0"
1481 | lodash.truncate "^4.4.2"
1482 | slice-ansi "^4.0.0"
1483 | string-width "^4.2.0"
1484 |
1485 | text-table@^0.2.0:
1486 | version "0.2.0"
1487 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1488 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1489 |
1490 | tsconfig-paths@^3.9.0:
1491 | version "3.9.0"
1492 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
1493 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
1494 | dependencies:
1495 | "@types/json5" "^0.0.29"
1496 | json5 "^1.0.1"
1497 | minimist "^1.2.0"
1498 | strip-bom "^3.0.0"
1499 |
1500 | type-check@^0.4.0, type-check@~0.4.0:
1501 | version "0.4.0"
1502 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1503 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1504 | dependencies:
1505 | prelude-ls "^1.2.1"
1506 |
1507 | type-fest@^0.20.2:
1508 | version "0.20.2"
1509 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1510 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1511 |
1512 | type-fest@^0.8.1:
1513 | version "0.8.1"
1514 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
1515 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
1516 |
1517 | unbox-primitive@^1.0.0:
1518 | version "1.0.1"
1519 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
1520 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
1521 | dependencies:
1522 | function-bind "^1.1.1"
1523 | has-bigints "^1.0.1"
1524 | has-symbols "^1.0.2"
1525 | which-boxed-primitive "^1.0.2"
1526 |
1527 | universalify@^0.1.0:
1528 | version "0.1.2"
1529 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1530 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1531 |
1532 | uri-js@^4.2.2:
1533 | version "4.4.1"
1534 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1535 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1536 | dependencies:
1537 | punycode "^2.1.0"
1538 |
1539 | v8-compile-cache@^2.0.3:
1540 | version "2.3.0"
1541 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
1542 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
1543 |
1544 | validate-npm-package-license@^3.0.1:
1545 | version "3.0.4"
1546 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
1547 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
1548 | dependencies:
1549 | spdx-correct "^3.0.0"
1550 | spdx-expression-parse "^3.0.0"
1551 |
1552 | vite@^2.1.5:
1553 | version "2.1.5"
1554 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.5.tgz#4857da441c62f7982c83cbd5f42a00330f20c9c1"
1555 | integrity sha512-tYU5iaYeUgQYvK/CNNz3tiJ8vYqPWfCE9IQ7K0iuzYovWw7lzty7KRYGWwV3CQPh0NKxWjOczAqiJsCL0Xb+Og==
1556 | dependencies:
1557 | esbuild "^0.9.3"
1558 | postcss "^8.2.1"
1559 | resolve "^1.19.0"
1560 | rollup "^2.38.5"
1561 | optionalDependencies:
1562 | fsevents "~2.3.1"
1563 |
1564 | vue-eslint-parser@^7.6.0:
1565 | version "7.6.0"
1566 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561"
1567 | integrity sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==
1568 | dependencies:
1569 | debug "^4.1.1"
1570 | eslint-scope "^5.0.0"
1571 | eslint-visitor-keys "^1.1.0"
1572 | espree "^6.2.1"
1573 | esquery "^1.4.0"
1574 | lodash "^4.17.15"
1575 |
1576 | which-boxed-primitive@^1.0.2:
1577 | version "1.0.2"
1578 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
1579 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
1580 | dependencies:
1581 | is-bigint "^1.0.1"
1582 | is-boolean-object "^1.1.0"
1583 | is-number-object "^1.0.4"
1584 | is-string "^1.0.5"
1585 | is-symbol "^1.0.3"
1586 |
1587 | which@^2.0.1:
1588 | version "2.0.2"
1589 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1590 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1591 | dependencies:
1592 | isexe "^2.0.0"
1593 |
1594 | word-wrap@^1.2.3:
1595 | version "1.2.3"
1596 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1597 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1598 |
1599 | wrappy@1:
1600 | version "1.0.2"
1601 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1602 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1603 |
1604 | yallist@^4.0.0:
1605 | version "4.0.0"
1606 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1607 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1608 |
--------------------------------------------------------------------------------