├── .eslintrc.js
├── .gitignore
├── .nvmrc
├── LICENSE.md
├── README.md
├── bower.json
├── contributing.md
├── imagesloaded.js
├── imagesloaded.pkgd.js
├── imagesloaded.pkgd.min.js
├── package-lock.json
├── package.json
├── sandbox
├── background
│ ├── css
│ │ └── background.css
│ └── index.html
├── picture.html
└── progress
│ ├── index.html
│ └── progress.js
├── tasks
├── dist.js
└── version.js
└── test
├── css
└── tests.css
├── img
├── blue-shell.jpg
├── bowser-jr.jpg
└── thunder-cloud.jpg
├── index.html
└── unit
├── append.js
├── background.js
├── basics.js
├── data-uri.js
├── jquery-fail.js
├── jquery-success.js
├── local-files.js
├── no-images.js
├── non-element.js
├── picture.js
├── selector-string.js
├── single-element.js
└── srcset.js
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 |
3 | module.exports = {
4 | plugins: [ 'metafizzy' ],
5 | extends: 'plugin:metafizzy/browser',
6 | env: {
7 | browser: true,
8 | commonjs: true,
9 | },
10 | parserOptions: {
11 | ecmaVersion: 2018,
12 | },
13 | globals: {
14 | imagesLoaded: 'readonly',
15 | QUnit: 'readonly',
16 | },
17 | rules: {
18 | eqeqeq: [ 'error', 'smart' ],
19 | 'id-length': [ 'error', {
20 | min: 2,
21 | max: 30,
22 | exceptions: [ 'x', 'y', 'z', 'i', 'j', 'a', 'b', 't', '$' ],
23 | } ],
24 | 'new-cap': 'off',
25 | },
26 | ignorePatterns: [ '*pkgd*.js' ],
27 | };
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | bower_components/
2 | node_modules/
3 | build/index.html
4 | build/*.woff*
5 | build/imagesloaded*.js
6 | .netlify
7 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 16
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011-2022 [David DeSandro](https://desandro.com) and [contributors](https://github.com/desandro/imagesloaded/graphs/contributors)
2 |
3 | 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:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | 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.
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # imagesLoaded
2 |
3 |
JavaScript is all like "You images done yet or what?"
4 |
5 | [imagesloaded.desandro.com](https://imagesloaded.desandro.com)
6 |
7 | Detect when images have been loaded.
8 |
9 | ## Install
10 |
11 | ### Download
12 |
13 | + [imagesloaded.pkgd.min.js](https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js) minified
14 | + [imagesloaded.pkgd.js](https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.js) un-minified
15 |
16 | ### CDN
17 |
18 | ``` html
19 |
20 |
21 |
22 | ```
23 |
24 | ### Package managers
25 |
26 | Install via npm: `npm install imagesloaded`
27 |
28 | Install via Yarn: `yarn add imagesloaded`
29 |
30 | ## jQuery
31 |
32 | You can use imagesLoaded as a jQuery Plugin.
33 |
34 | ``` js
35 | $('#container').imagesLoaded( function() {
36 | // images have loaded
37 | });
38 |
39 | // options
40 | $('#container').imagesLoaded( {
41 | // options...
42 | },
43 | function() {
44 | // images have loaded
45 | }
46 | );
47 | ```
48 |
49 | `.imagesLoaded()` returns a [jQuery Deferred object](https://api.jquery.com/category/deferred-object/). This allows you to use `.always()`, `.done()`, `.fail()` and `.progress()`.
50 |
51 | ``` js
52 | $('#container').imagesLoaded()
53 | .always( function( instance ) {
54 | console.log('all images loaded');
55 | })
56 | .done( function( instance ) {
57 | console.log('all images successfully loaded');
58 | })
59 | .fail( function() {
60 | console.log('all images loaded, at least one is broken');
61 | })
62 | .progress( function( instance, image ) {
63 | var result = image.isLoaded ? 'loaded' : 'broken';
64 | console.log( 'image is ' + result + ' for ' + image.img.src );
65 | });
66 | ```
67 |
68 | ## Vanilla JavaScript
69 |
70 | You can use imagesLoaded with vanilla JS.
71 |
72 | ``` js
73 | imagesLoaded( elem, callback )
74 | // options
75 | imagesLoaded( elem, options, callback )
76 | // you can use `new` if you like
77 | new imagesLoaded( elem, callback )
78 | ```
79 |
80 | + `elem` _Element, NodeList, Array, or Selector String_
81 | + `options` _Object_
82 | + `callback` _Function_ - function triggered after all images have been loaded
83 |
84 | Using a callback function is the same as binding it to the `always` event (see below).
85 |
86 | ``` js
87 | // element
88 | imagesLoaded( document.querySelector('#container'), function( instance ) {
89 | console.log('all images are loaded');
90 | });
91 | // selector string
92 | imagesLoaded( '#container', function() {...});
93 | // multiple elements
94 | var posts = document.querySelectorAll('.post');
95 | imagesLoaded( posts, function() {...});
96 | ```
97 |
98 | Bind events with vanilla JS with .on(), .off(), and .once() methods.
99 |
100 | ``` js
101 | var imgLoad = imagesLoaded( elem );
102 | function onAlways( instance ) {
103 | console.log('all images are loaded');
104 | }
105 | // bind with .on()
106 | imgLoad.on( 'always', onAlways );
107 | // unbind with .off()
108 | imgLoad.off( 'always', onAlways );
109 | ```
110 |
111 | ## Background
112 |
113 | Detect when background images have loaded, in addition to `
`s.
114 |
115 | Set `{ background: true }` to detect when the element's background image has loaded.
116 |
117 | ``` js
118 | // jQuery
119 | $('#container').imagesLoaded( { background: true }, function() {
120 | console.log('#container background image loaded');
121 | });
122 |
123 | // vanilla JS
124 | imagesLoaded( '#container', { background: true }, function() {
125 | console.log('#container background image loaded');
126 | });
127 | ```
128 |
129 | [See jQuery demo](https://codepen.io/desandro/pen/pjVMPB) or [vanilla JS demo](https://codepen.io/desandro/pen/avKooW) on CodePen.
130 |
131 | Set to a selector string like `{ background: '.item' }` to detect when the background images of child elements have loaded.
132 |
133 | ``` js
134 | // jQuery
135 | $('#container').imagesLoaded( { background: '.item' }, function() {
136 | console.log('all .item background images loaded');
137 | });
138 |
139 | // vanilla JS
140 | imagesLoaded( '#container', { background: '.item' }, function() {
141 | console.log('all .item background images loaded');
142 | });
143 | ```
144 |
145 | [See jQuery demo](https://codepen.io/desandro/pen/avKoZL) or [vanilla JS demo](https://codepen.io/desandro/pen/vNrBGz) on CodePen.
146 |
147 | ## Events
148 |
149 | ### always
150 |
151 | ``` js
152 | // jQuery
153 | $('#container').imagesLoaded().always( function( instance ) {
154 | console.log('ALWAYS - all images have been loaded');
155 | });
156 |
157 | // vanilla JS
158 | imgLoad.on( 'always', function( instance ) {
159 | console.log('ALWAYS - all images have been loaded');
160 | });
161 | ```
162 |
163 | Triggered after all images have been either loaded or confirmed broken.
164 |
165 | + `instance` _imagesLoaded_ - the imagesLoaded instance
166 |
167 | ### done
168 |
169 | ``` js
170 | // jQuery
171 | $('#container').imagesLoaded().done( function( instance ) {
172 | console.log('DONE - all images have been successfully loaded');
173 | });
174 |
175 | // vanilla JS
176 | imgLoad.on( 'done', function( instance ) {
177 | console.log('DONE - all images have been successfully loaded');
178 | });
179 | ```
180 |
181 | Triggered after all images have successfully loaded without any broken images.
182 |
183 | ### fail
184 |
185 | ``` js
186 | $('#container').imagesLoaded().fail( function( instance ) {
187 | console.log('FAIL - all images loaded, at least one is broken');
188 | });
189 |
190 | // vanilla JS
191 | imgLoad.on( 'fail', function( instance ) {
192 | console.log('FAIL - all images loaded, at least one is broken');
193 | });
194 | ```
195 |
196 | Triggered after all images have been loaded with at least one broken image.
197 |
198 | ### progress
199 |
200 | ``` js
201 | imgLoad.on( 'progress', function( instance, image ) {
202 | var result = image.isLoaded ? 'loaded' : 'broken';
203 | console.log( 'image is ' + result + ' for ' + image.img.src );
204 | });
205 | ```
206 |
207 | Triggered after each image has been loaded.
208 |
209 | + `instance` _imagesLoaded_ - the imagesLoaded instance
210 | + `image` _LoadingImage_ - the LoadingImage instance of the loaded image
211 |
212 |
213 |
214 | ## Properties
215 |
216 | ### LoadingImage.img
217 |
218 | _Image_ - The `img` element
219 |
220 | ### LoadingImage.isLoaded
221 |
222 | _Boolean_ - `true` when the image has successfully loaded
223 |
224 | ### imagesLoaded.images
225 |
226 | Array of _LoadingImage_ instances for each image detected
227 |
228 | ``` js
229 | var imgLoad = imagesLoaded('#container');
230 | imgLoad.on( 'always', function() {
231 | console.log( imgLoad.images.length + ' images loaded' );
232 | // detect which image is broken
233 | for ( var i = 0, len = imgLoad.images.length; i < len; i++ ) {
234 | var image = imgLoad.images[i];
235 | var result = image.isLoaded ? 'loaded' : 'broken';
236 | console.log( 'image is ' + result + ' for ' + image.img.src );
237 | }
238 | });
239 | ```
240 |
241 | ## Webpack
242 |
243 | Install imagesLoaded with npm.
244 |
245 | ``` bash
246 | npm install imagesloaded
247 | ```
248 |
249 | You can then `require('imagesloaded')`.
250 |
251 | ``` js
252 | // main.js
253 | var imagesLoaded = require('imagesloaded');
254 |
255 | imagesLoaded( '#container', function() {
256 | // images have loaded
257 | });
258 | ```
259 |
260 | Use `.makeJQueryPlugin` to make `.imagesLoaded()` jQuery plugin.
261 |
262 | ``` js
263 | // main.js
264 | var imagesLoaded = require('imagesloaded');
265 | var $ = require('jquery');
266 |
267 | // provide jQuery argument
268 | imagesLoaded.makeJQueryPlugin( $ );
269 | // now use .imagesLoaded() jQuery plugin
270 | $('#container').imagesLoaded( function() {...});
271 | ```
272 |
273 | Run webpack.
274 |
275 | ``` bash
276 | webpack main.js bundle.js
277 | ```
278 |
279 | ## Browserify
280 |
281 | imagesLoaded works with [Browserify](https://browserify.org/).
282 |
283 | ``` bash
284 | npm install imagesloaded --save
285 | ```
286 |
287 | ``` js
288 | var imagesLoaded = require('imagesloaded');
289 |
290 | imagesLoaded( elem, function() {...} );
291 | ```
292 |
293 | Use `.makeJQueryPlugin` to make to use `.imagesLoaded()` jQuery plugin.
294 |
295 | ``` js
296 | var $ = require('jquery');
297 | var imagesLoaded = require('imagesloaded');
298 |
299 | // provide jQuery argument
300 | imagesLoaded.makeJQueryPlugin( $ );
301 | // now use .imagesLoaded() jQuery plugin
302 | $('#container').imagesLoaded( function() {...});
303 | ```
304 |
305 |
306 | ## Browser support
307 |
308 | + Chrome 49+
309 | + Firefox 41+
310 | + Edge 14+
311 | + iOS Safari 8+
312 |
313 | Use [imagesLoaded v4](https://github.com/desandro/imagesloaded/tree/v4.1.4) for Internet Explorer and other older browser support.
314 |
315 | ## Development
316 |
317 | Development uses Node.js v16 with npm v8
318 |
319 | ``` bash
320 | nvm use
321 | ```
322 |
323 | ## MIT License
324 |
325 | imagesLoaded is released under the [MIT License](https://desandro.mit-license.org/). Have at it.
326 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "imagesloaded",
3 | "description": "JavaScript is all like _You images done yet or what?_",
4 | "main": "imagesloaded.js",
5 | "dependencies": {
6 | "ev-emitter": "^2.1.2"
7 | },
8 | "devDependencies": {
9 | },
10 | "ignore": [
11 | "**/.*",
12 | "test",
13 | "package.json",
14 | "composer.json",
15 | "node_modules",
16 | "bower_components",
17 | "tests",
18 | "sandbox/",
19 | "gulpfile.js",
20 | "contributing.md"
21 | ],
22 | "homepage": "https://imagesloaded.desandro.com",
23 | "authors": [
24 | "David DeSandro"
25 | ],
26 | "moduleType": [
27 | "amd",
28 | "globals",
29 | "node"
30 | ],
31 | "keywords": [
32 | "images"
33 | ],
34 | "license": "MIT"
35 | }
36 |
--------------------------------------------------------------------------------
/contributing.md:
--------------------------------------------------------------------------------
1 | ## Submitting issues
2 |
3 | ### Reduced test case required
4 |
5 | All bug reports and problem issues require a [**reduced test case**](https://css-tricks.com/reduced-test-cases/).
6 |
7 | + A reduced test case clearly demonstrates the bug or issue.
8 | + It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug.
9 | + A link to your production site is **not** a reduced test case.
10 |
11 | Create a test case by forking a [CodePen demos](https://codepen.io/collection/xKRgYx).
12 |
13 | + [progress with jQuery](https://codepen.io/desandro/pen/podVjYW)
14 | + [progress with vanilla JS](https://codepen.io/desandro/pen/XWzqXrP)
15 | + [`{ background: true }` with jQuery](https://codepen.io/desandro/pen/QWOrNNY)
16 | + [`{ background: true }` with vanilla JS](https://codepen.io/desandro/pen/oNodxYW)
17 | + [`{ background: '.selector' }` with jQuery](https://codepen.io/desandro/pen/YzELWdo)
18 | + [`{ background: '.selector' }` with vanilla JS](https://codepen.io/desandro/pen/KKyRMEv)
19 |
20 | Providing a reduced test case is the best way to get your issue addressed. They help you point out the problem. They help me verify and debug the problem. They help others understand the problem. Without a reduced test case, your issue may be closed.
21 |
--------------------------------------------------------------------------------
/imagesloaded.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * imagesLoaded v5.0.0
3 | * JavaScript is all like "You images are done yet or what?"
4 | * MIT License
5 | */
6 |
7 | ( function( window, factory ) {
8 | // universal module definition
9 | if ( typeof module == 'object' && module.exports ) {
10 | // CommonJS
11 | module.exports = factory( window, require('ev-emitter') );
12 | } else {
13 | // browser global
14 | window.imagesLoaded = factory( window, window.EvEmitter );
15 | }
16 |
17 | } )( typeof window !== 'undefined' ? window : this,
18 | function factory( window, EvEmitter ) {
19 |
20 | let $ = window.jQuery;
21 | let console = window.console;
22 |
23 | // -------------------------- helpers -------------------------- //
24 |
25 | // turn element or nodeList into an array
26 | function makeArray( obj ) {
27 | // use object if already an array
28 | if ( Array.isArray( obj ) ) return obj;
29 |
30 | let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
31 | // convert nodeList to array
32 | if ( isArrayLike ) return [ ...obj ];
33 |
34 | // array of single index
35 | return [ obj ];
36 | }
37 |
38 | // -------------------------- imagesLoaded -------------------------- //
39 |
40 | /**
41 | * @param {[Array, Element, NodeList, String]} elem
42 | * @param {[Object, Function]} options - if function, use as callback
43 | * @param {Function} onAlways - callback function
44 | * @returns {ImagesLoaded}
45 | */
46 | function ImagesLoaded( elem, options, onAlways ) {
47 | // coerce ImagesLoaded() without new, to be new ImagesLoaded()
48 | if ( !( this instanceof ImagesLoaded ) ) {
49 | return new ImagesLoaded( elem, options, onAlways );
50 | }
51 | // use elem as selector string
52 | let queryElem = elem;
53 | if ( typeof elem == 'string' ) {
54 | queryElem = document.querySelectorAll( elem );
55 | }
56 | // bail if bad element
57 | if ( !queryElem ) {
58 | console.error(`Bad element for imagesLoaded ${queryElem || elem}`);
59 | return;
60 | }
61 |
62 | this.elements = makeArray( queryElem );
63 | this.options = {};
64 | // shift arguments if no options set
65 | if ( typeof options == 'function' ) {
66 | onAlways = options;
67 | } else {
68 | Object.assign( this.options, options );
69 | }
70 |
71 | if ( onAlways ) this.on( 'always', onAlways );
72 |
73 | this.getImages();
74 | // add jQuery Deferred object
75 | if ( $ ) this.jqDeferred = new $.Deferred();
76 |
77 | // HACK check async to allow time to bind listeners
78 | setTimeout( this.check.bind( this ) );
79 | }
80 |
81 | ImagesLoaded.prototype = Object.create( EvEmitter.prototype );
82 |
83 | ImagesLoaded.prototype.getImages = function() {
84 | this.images = [];
85 |
86 | // filter & find items if we have an item selector
87 | this.elements.forEach( this.addElementImages, this );
88 | };
89 |
90 | const elementNodeTypes = [ 1, 9, 11 ];
91 |
92 | /**
93 | * @param {Node} elem
94 | */
95 | ImagesLoaded.prototype.addElementImages = function( elem ) {
96 | // filter siblings
97 | if ( elem.nodeName === 'IMG' ) {
98 | this.addImage( elem );
99 | }
100 | // get background image on element
101 | if ( this.options.background === true ) {
102 | this.addElementBackgroundImages( elem );
103 | }
104 |
105 | // find children
106 | // no non-element nodes, #143
107 | let { nodeType } = elem;
108 | if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;
109 |
110 | let childImgs = elem.querySelectorAll('img');
111 | // concat childElems to filterFound array
112 | for ( let img of childImgs ) {
113 | this.addImage( img );
114 | }
115 |
116 | // get child background images
117 | if ( typeof this.options.background == 'string' ) {
118 | let children = elem.querySelectorAll( this.options.background );
119 | for ( let child of children ) {
120 | this.addElementBackgroundImages( child );
121 | }
122 | }
123 | };
124 |
125 | const reURL = /url\((['"])?(.*?)\1\)/gi;
126 |
127 | ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {
128 | let style = getComputedStyle( elem );
129 | // Firefox returns null if in a hidden iframe https://bugzil.la/548397
130 | if ( !style ) return;
131 |
132 | // get url inside url("...")
133 | let matches = reURL.exec( style.backgroundImage );
134 | while ( matches !== null ) {
135 | let url = matches && matches[2];
136 | if ( url ) {
137 | this.addBackground( url, elem );
138 | }
139 | matches = reURL.exec( style.backgroundImage );
140 | }
141 | };
142 |
143 | /**
144 | * @param {Image} img
145 | */
146 | ImagesLoaded.prototype.addImage = function( img ) {
147 | let loadingImage = new LoadingImage( img );
148 | this.images.push( loadingImage );
149 | };
150 |
151 | ImagesLoaded.prototype.addBackground = function( url, elem ) {
152 | let background = new Background( url, elem );
153 | this.images.push( background );
154 | };
155 |
156 | ImagesLoaded.prototype.check = function() {
157 | this.progressedCount = 0;
158 | this.hasAnyBroken = false;
159 | // complete if no images
160 | if ( !this.images.length ) {
161 | this.complete();
162 | return;
163 | }
164 |
165 | /* eslint-disable-next-line func-style */
166 | let onProgress = ( image, elem, message ) => {
167 | // HACK - Chrome triggers event before object properties have changed. #83
168 | setTimeout( () => {
169 | this.progress( image, elem, message );
170 | } );
171 | };
172 |
173 | this.images.forEach( function( loadingImage ) {
174 | loadingImage.once( 'progress', onProgress );
175 | loadingImage.check();
176 | } );
177 | };
178 |
179 | ImagesLoaded.prototype.progress = function( image, elem, message ) {
180 | this.progressedCount++;
181 | this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
182 | // progress event
183 | this.emitEvent( 'progress', [ this, image, elem ] );
184 | if ( this.jqDeferred && this.jqDeferred.notify ) {
185 | this.jqDeferred.notify( this, image );
186 | }
187 | // check if completed
188 | if ( this.progressedCount === this.images.length ) {
189 | this.complete();
190 | }
191 |
192 | if ( this.options.debug && console ) {
193 | console.log( `progress: ${message}`, image, elem );
194 | }
195 | };
196 |
197 | ImagesLoaded.prototype.complete = function() {
198 | let eventName = this.hasAnyBroken ? 'fail' : 'done';
199 | this.isComplete = true;
200 | this.emitEvent( eventName, [ this ] );
201 | this.emitEvent( 'always', [ this ] );
202 | if ( this.jqDeferred ) {
203 | let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
204 | this.jqDeferred[ jqMethod ]( this );
205 | }
206 | };
207 |
208 | // -------------------------- -------------------------- //
209 |
210 | function LoadingImage( img ) {
211 | this.img = img;
212 | }
213 |
214 | LoadingImage.prototype = Object.create( EvEmitter.prototype );
215 |
216 | LoadingImage.prototype.check = function() {
217 | // If complete is true and browser supports natural sizes,
218 | // try to check for image status manually.
219 | let isComplete = this.getIsImageComplete();
220 | if ( isComplete ) {
221 | // report based on naturalWidth
222 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
223 | return;
224 | }
225 |
226 | // If none of the checks above matched, simulate loading on detached element.
227 | this.proxyImage = new Image();
228 | // add crossOrigin attribute. #204
229 | if ( this.img.crossOrigin ) {
230 | this.proxyImage.crossOrigin = this.img.crossOrigin;
231 | }
232 | this.proxyImage.addEventListener( 'load', this );
233 | this.proxyImage.addEventListener( 'error', this );
234 | // bind to image as well for Firefox. #191
235 | this.img.addEventListener( 'load', this );
236 | this.img.addEventListener( 'error', this );
237 | this.proxyImage.src = this.img.currentSrc || this.img.src;
238 | };
239 |
240 | LoadingImage.prototype.getIsImageComplete = function() {
241 | // check for non-zero, non-undefined naturalWidth
242 | // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671
243 | return this.img.complete && this.img.naturalWidth;
244 | };
245 |
246 | LoadingImage.prototype.confirm = function( isLoaded, message ) {
247 | this.isLoaded = isLoaded;
248 | let { parentNode } = this.img;
249 | // emit progress with parent or self
250 | let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;
251 | this.emitEvent( 'progress', [ this, elem, message ] );
252 | };
253 |
254 | // ----- events ----- //
255 |
256 | // trigger specified handler for event type
257 | LoadingImage.prototype.handleEvent = function( event ) {
258 | let method = 'on' + event.type;
259 | if ( this[ method ] ) {
260 | this[ method ]( event );
261 | }
262 | };
263 |
264 | LoadingImage.prototype.onload = function() {
265 | this.confirm( true, 'onload' );
266 | this.unbindEvents();
267 | };
268 |
269 | LoadingImage.prototype.onerror = function() {
270 | this.confirm( false, 'onerror' );
271 | this.unbindEvents();
272 | };
273 |
274 | LoadingImage.prototype.unbindEvents = function() {
275 | this.proxyImage.removeEventListener( 'load', this );
276 | this.proxyImage.removeEventListener( 'error', this );
277 | this.img.removeEventListener( 'load', this );
278 | this.img.removeEventListener( 'error', this );
279 | };
280 |
281 | // -------------------------- Background -------------------------- //
282 |
283 | function Background( url, element ) {
284 | this.url = url;
285 | this.element = element;
286 | this.img = new Image();
287 | }
288 |
289 | // inherit LoadingImage prototype
290 | Background.prototype = Object.create( LoadingImage.prototype );
291 |
292 | Background.prototype.check = function() {
293 | this.img.addEventListener( 'load', this );
294 | this.img.addEventListener( 'error', this );
295 | this.img.src = this.url;
296 | // check if image is already complete
297 | let isComplete = this.getIsImageComplete();
298 | if ( isComplete ) {
299 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
300 | this.unbindEvents();
301 | }
302 | };
303 |
304 | Background.prototype.unbindEvents = function() {
305 | this.img.removeEventListener( 'load', this );
306 | this.img.removeEventListener( 'error', this );
307 | };
308 |
309 | Background.prototype.confirm = function( isLoaded, message ) {
310 | this.isLoaded = isLoaded;
311 | this.emitEvent( 'progress', [ this, this.element, message ] );
312 | };
313 |
314 | // -------------------------- jQuery -------------------------- //
315 |
316 | ImagesLoaded.makeJQueryPlugin = function( jQuery ) {
317 | jQuery = jQuery || window.jQuery;
318 | if ( !jQuery ) return;
319 |
320 | // set local variable
321 | $ = jQuery;
322 | // $().imagesLoaded()
323 | $.fn.imagesLoaded = function( options, onAlways ) {
324 | let instance = new ImagesLoaded( this, options, onAlways );
325 | return instance.jqDeferred.promise( $( this ) );
326 | };
327 | };
328 | // try making plugin
329 | ImagesLoaded.makeJQueryPlugin();
330 |
331 | // -------------------------- -------------------------- //
332 |
333 | return ImagesLoaded;
334 |
335 | } );
336 |
--------------------------------------------------------------------------------
/imagesloaded.pkgd.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * imagesLoaded PACKAGED v5.0.0
3 | * JavaScript is all like "You images are done yet or what?"
4 | * MIT License
5 | */
6 |
7 | /**
8 | * EvEmitter v2.1.1
9 | * Lil' event emitter
10 | * MIT License
11 | */
12 |
13 | ( function( global, factory ) {
14 | // universal module definition
15 | if ( typeof module == 'object' && module.exports ) {
16 | // CommonJS - Browserify, Webpack
17 | module.exports = factory();
18 | } else {
19 | // Browser globals
20 | global.EvEmitter = factory();
21 | }
22 |
23 | }( typeof window != 'undefined' ? window : this, function() {
24 |
25 | function EvEmitter() {}
26 |
27 | let proto = EvEmitter.prototype;
28 |
29 | proto.on = function( eventName, listener ) {
30 | if ( !eventName || !listener ) return this;
31 |
32 | // set events hash
33 | let events = this._events = this._events || {};
34 | // set listeners array
35 | let listeners = events[ eventName ] = events[ eventName ] || [];
36 | // only add once
37 | if ( !listeners.includes( listener ) ) {
38 | listeners.push( listener );
39 | }
40 |
41 | return this;
42 | };
43 |
44 | proto.once = function( eventName, listener ) {
45 | if ( !eventName || !listener ) return this;
46 |
47 | // add event
48 | this.on( eventName, listener );
49 | // set once flag
50 | // set onceEvents hash
51 | let onceEvents = this._onceEvents = this._onceEvents || {};
52 | // set onceListeners object
53 | let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
54 | // set flag
55 | onceListeners[ listener ] = true;
56 |
57 | return this;
58 | };
59 |
60 | proto.off = function( eventName, listener ) {
61 | let listeners = this._events && this._events[ eventName ];
62 | if ( !listeners || !listeners.length ) return this;
63 |
64 | let index = listeners.indexOf( listener );
65 | if ( index != -1 ) {
66 | listeners.splice( index, 1 );
67 | }
68 |
69 | return this;
70 | };
71 |
72 | proto.emitEvent = function( eventName, args ) {
73 | let listeners = this._events && this._events[ eventName ];
74 | if ( !listeners || !listeners.length ) return this;
75 |
76 | // copy over to avoid interference if .off() in listener
77 | listeners = listeners.slice( 0 );
78 | args = args || [];
79 | // once stuff
80 | let onceListeners = this._onceEvents && this._onceEvents[ eventName ];
81 |
82 | for ( let listener of listeners ) {
83 | let isOnce = onceListeners && onceListeners[ listener ];
84 | if ( isOnce ) {
85 | // remove listener
86 | // remove before trigger to prevent recursion
87 | this.off( eventName, listener );
88 | // unset once flag
89 | delete onceListeners[ listener ];
90 | }
91 | // trigger listener
92 | listener.apply( this, args );
93 | }
94 |
95 | return this;
96 | };
97 |
98 | proto.allOff = function() {
99 | delete this._events;
100 | delete this._onceEvents;
101 | return this;
102 | };
103 |
104 | return EvEmitter;
105 |
106 | } ) );
107 | /*!
108 | * imagesLoaded v5.0.0
109 | * JavaScript is all like "You images are done yet or what?"
110 | * MIT License
111 | */
112 |
113 | ( function( window, factory ) {
114 | // universal module definition
115 | if ( typeof module == 'object' && module.exports ) {
116 | // CommonJS
117 | module.exports = factory( window, require('ev-emitter') );
118 | } else {
119 | // browser global
120 | window.imagesLoaded = factory( window, window.EvEmitter );
121 | }
122 |
123 | } )( typeof window !== 'undefined' ? window : this,
124 | function factory( window, EvEmitter ) {
125 |
126 | let $ = window.jQuery;
127 | let console = window.console;
128 |
129 | // -------------------------- helpers -------------------------- //
130 |
131 | // turn element or nodeList into an array
132 | function makeArray( obj ) {
133 | // use object if already an array
134 | if ( Array.isArray( obj ) ) return obj;
135 |
136 | let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
137 | // convert nodeList to array
138 | if ( isArrayLike ) return [ ...obj ];
139 |
140 | // array of single index
141 | return [ obj ];
142 | }
143 |
144 | // -------------------------- imagesLoaded -------------------------- //
145 |
146 | /**
147 | * @param {[Array, Element, NodeList, String]} elem
148 | * @param {[Object, Function]} options - if function, use as callback
149 | * @param {Function} onAlways - callback function
150 | * @returns {ImagesLoaded}
151 | */
152 | function ImagesLoaded( elem, options, onAlways ) {
153 | // coerce ImagesLoaded() without new, to be new ImagesLoaded()
154 | if ( !( this instanceof ImagesLoaded ) ) {
155 | return new ImagesLoaded( elem, options, onAlways );
156 | }
157 | // use elem as selector string
158 | let queryElem = elem;
159 | if ( typeof elem == 'string' ) {
160 | queryElem = document.querySelectorAll( elem );
161 | }
162 | // bail if bad element
163 | if ( !queryElem ) {
164 | console.error(`Bad element for imagesLoaded ${queryElem || elem}`);
165 | return;
166 | }
167 |
168 | this.elements = makeArray( queryElem );
169 | this.options = {};
170 | // shift arguments if no options set
171 | if ( typeof options == 'function' ) {
172 | onAlways = options;
173 | } else {
174 | Object.assign( this.options, options );
175 | }
176 |
177 | if ( onAlways ) this.on( 'always', onAlways );
178 |
179 | this.getImages();
180 | // add jQuery Deferred object
181 | if ( $ ) this.jqDeferred = new $.Deferred();
182 |
183 | // HACK check async to allow time to bind listeners
184 | setTimeout( this.check.bind( this ) );
185 | }
186 |
187 | ImagesLoaded.prototype = Object.create( EvEmitter.prototype );
188 |
189 | ImagesLoaded.prototype.getImages = function() {
190 | this.images = [];
191 |
192 | // filter & find items if we have an item selector
193 | this.elements.forEach( this.addElementImages, this );
194 | };
195 |
196 | const elementNodeTypes = [ 1, 9, 11 ];
197 |
198 | /**
199 | * @param {Node} elem
200 | */
201 | ImagesLoaded.prototype.addElementImages = function( elem ) {
202 | // filter siblings
203 | if ( elem.nodeName === 'IMG' ) {
204 | this.addImage( elem );
205 | }
206 | // get background image on element
207 | if ( this.options.background === true ) {
208 | this.addElementBackgroundImages( elem );
209 | }
210 |
211 | // find children
212 | // no non-element nodes, #143
213 | let { nodeType } = elem;
214 | if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;
215 |
216 | let childImgs = elem.querySelectorAll('img');
217 | // concat childElems to filterFound array
218 | for ( let img of childImgs ) {
219 | this.addImage( img );
220 | }
221 |
222 | // get child background images
223 | if ( typeof this.options.background == 'string' ) {
224 | let children = elem.querySelectorAll( this.options.background );
225 | for ( let child of children ) {
226 | this.addElementBackgroundImages( child );
227 | }
228 | }
229 | };
230 |
231 | const reURL = /url\((['"])?(.*?)\1\)/gi;
232 |
233 | ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {
234 | let style = getComputedStyle( elem );
235 | // Firefox returns null if in a hidden iframe https://bugzil.la/548397
236 | if ( !style ) return;
237 |
238 | // get url inside url("...")
239 | let matches = reURL.exec( style.backgroundImage );
240 | while ( matches !== null ) {
241 | let url = matches && matches[2];
242 | if ( url ) {
243 | this.addBackground( url, elem );
244 | }
245 | matches = reURL.exec( style.backgroundImage );
246 | }
247 | };
248 |
249 | /**
250 | * @param {Image} img
251 | */
252 | ImagesLoaded.prototype.addImage = function( img ) {
253 | let loadingImage = new LoadingImage( img );
254 | this.images.push( loadingImage );
255 | };
256 |
257 | ImagesLoaded.prototype.addBackground = function( url, elem ) {
258 | let background = new Background( url, elem );
259 | this.images.push( background );
260 | };
261 |
262 | ImagesLoaded.prototype.check = function() {
263 | this.progressedCount = 0;
264 | this.hasAnyBroken = false;
265 | // complete if no images
266 | if ( !this.images.length ) {
267 | this.complete();
268 | return;
269 | }
270 |
271 | /* eslint-disable-next-line func-style */
272 | let onProgress = ( image, elem, message ) => {
273 | // HACK - Chrome triggers event before object properties have changed. #83
274 | setTimeout( () => {
275 | this.progress( image, elem, message );
276 | } );
277 | };
278 |
279 | this.images.forEach( function( loadingImage ) {
280 | loadingImage.once( 'progress', onProgress );
281 | loadingImage.check();
282 | } );
283 | };
284 |
285 | ImagesLoaded.prototype.progress = function( image, elem, message ) {
286 | this.progressedCount++;
287 | this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
288 | // progress event
289 | this.emitEvent( 'progress', [ this, image, elem ] );
290 | if ( this.jqDeferred && this.jqDeferred.notify ) {
291 | this.jqDeferred.notify( this, image );
292 | }
293 | // check if completed
294 | if ( this.progressedCount === this.images.length ) {
295 | this.complete();
296 | }
297 |
298 | if ( this.options.debug && console ) {
299 | console.log( `progress: ${message}`, image, elem );
300 | }
301 | };
302 |
303 | ImagesLoaded.prototype.complete = function() {
304 | let eventName = this.hasAnyBroken ? 'fail' : 'done';
305 | this.isComplete = true;
306 | this.emitEvent( eventName, [ this ] );
307 | this.emitEvent( 'always', [ this ] );
308 | if ( this.jqDeferred ) {
309 | let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
310 | this.jqDeferred[ jqMethod ]( this );
311 | }
312 | };
313 |
314 | // -------------------------- -------------------------- //
315 |
316 | function LoadingImage( img ) {
317 | this.img = img;
318 | }
319 |
320 | LoadingImage.prototype = Object.create( EvEmitter.prototype );
321 |
322 | LoadingImage.prototype.check = function() {
323 | // If complete is true and browser supports natural sizes,
324 | // try to check for image status manually.
325 | let isComplete = this.getIsImageComplete();
326 | if ( isComplete ) {
327 | // report based on naturalWidth
328 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
329 | return;
330 | }
331 |
332 | // If none of the checks above matched, simulate loading on detached element.
333 | this.proxyImage = new Image();
334 | // add crossOrigin attribute. #204
335 | if ( this.img.crossOrigin ) {
336 | this.proxyImage.crossOrigin = this.img.crossOrigin;
337 | }
338 | this.proxyImage.addEventListener( 'load', this );
339 | this.proxyImage.addEventListener( 'error', this );
340 | // bind to image as well for Firefox. #191
341 | this.img.addEventListener( 'load', this );
342 | this.img.addEventListener( 'error', this );
343 | this.proxyImage.src = this.img.currentSrc || this.img.src;
344 | };
345 |
346 | LoadingImage.prototype.getIsImageComplete = function() {
347 | // check for non-zero, non-undefined naturalWidth
348 | // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671
349 | return this.img.complete && this.img.naturalWidth;
350 | };
351 |
352 | LoadingImage.prototype.confirm = function( isLoaded, message ) {
353 | this.isLoaded = isLoaded;
354 | let { parentNode } = this.img;
355 | // emit progress with parent or self
356 | let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;
357 | this.emitEvent( 'progress', [ this, elem, message ] );
358 | };
359 |
360 | // ----- events ----- //
361 |
362 | // trigger specified handler for event type
363 | LoadingImage.prototype.handleEvent = function( event ) {
364 | let method = 'on' + event.type;
365 | if ( this[ method ] ) {
366 | this[ method ]( event );
367 | }
368 | };
369 |
370 | LoadingImage.prototype.onload = function() {
371 | this.confirm( true, 'onload' );
372 | this.unbindEvents();
373 | };
374 |
375 | LoadingImage.prototype.onerror = function() {
376 | this.confirm( false, 'onerror' );
377 | this.unbindEvents();
378 | };
379 |
380 | LoadingImage.prototype.unbindEvents = function() {
381 | this.proxyImage.removeEventListener( 'load', this );
382 | this.proxyImage.removeEventListener( 'error', this );
383 | this.img.removeEventListener( 'load', this );
384 | this.img.removeEventListener( 'error', this );
385 | };
386 |
387 | // -------------------------- Background -------------------------- //
388 |
389 | function Background( url, element ) {
390 | this.url = url;
391 | this.element = element;
392 | this.img = new Image();
393 | }
394 |
395 | // inherit LoadingImage prototype
396 | Background.prototype = Object.create( LoadingImage.prototype );
397 |
398 | Background.prototype.check = function() {
399 | this.img.addEventListener( 'load', this );
400 | this.img.addEventListener( 'error', this );
401 | this.img.src = this.url;
402 | // check if image is already complete
403 | let isComplete = this.getIsImageComplete();
404 | if ( isComplete ) {
405 | this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
406 | this.unbindEvents();
407 | }
408 | };
409 |
410 | Background.prototype.unbindEvents = function() {
411 | this.img.removeEventListener( 'load', this );
412 | this.img.removeEventListener( 'error', this );
413 | };
414 |
415 | Background.prototype.confirm = function( isLoaded, message ) {
416 | this.isLoaded = isLoaded;
417 | this.emitEvent( 'progress', [ this, this.element, message ] );
418 | };
419 |
420 | // -------------------------- jQuery -------------------------- //
421 |
422 | ImagesLoaded.makeJQueryPlugin = function( jQuery ) {
423 | jQuery = jQuery || window.jQuery;
424 | if ( !jQuery ) return;
425 |
426 | // set local variable
427 | $ = jQuery;
428 | // $().imagesLoaded()
429 | $.fn.imagesLoaded = function( options, onAlways ) {
430 | let instance = new ImagesLoaded( this, options, onAlways );
431 | return instance.jqDeferred.promise( $( this ) );
432 | };
433 | };
434 | // try making plugin
435 | ImagesLoaded.makeJQueryPlugin();
436 |
437 | // -------------------------- -------------------------- //
438 |
439 | return ImagesLoaded;
440 |
441 | } );
442 |
--------------------------------------------------------------------------------
/imagesloaded.pkgd.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * imagesLoaded PACKAGED v5.0.0
3 | * JavaScript is all like "You images are done yet or what?"
4 | * MIT License
5 | */
6 | !function(t,e){"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,(function(){function t(){}let e=t.prototype;return e.on=function(t,e){if(!t||!e)return this;let i=this._events=this._events||{},s=i[t]=i[t]||[];return s.includes(e)||s.push(e),this},e.once=function(t,e){if(!t||!e)return this;this.on(t,e);let i=this._onceEvents=this._onceEvents||{};return(i[t]=i[t]||{})[e]=!0,this},e.off=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;let s=i.indexOf(e);return-1!=s&&i.splice(s,1),this},e.emitEvent=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;i=i.slice(0),e=e||[];let s=this._onceEvents&&this._onceEvents[t];for(let n of i){s&&s[n]&&(this.off(t,n),delete s[n]),n.apply(this,e)}return this},e.allOff=function(){return delete this._events,delete this._onceEvents,this},t})),
7 | /*!
8 | * imagesLoaded v5.0.0
9 | * JavaScript is all like "You images are done yet or what?"
10 | * MIT License
11 | */
12 | function(t,e){"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,(function(t,e){let i=t.jQuery,s=t.console;function n(t,e,o){if(!(this instanceof n))return new n(t,e,o);let r=t;var h;("string"==typeof t&&(r=document.querySelectorAll(t)),r)?(this.elements=(h=r,Array.isArray(h)?h:"object"==typeof h&&"number"==typeof h.length?[...h]:[h]),this.options={},"function"==typeof e?o=e:Object.assign(this.options,e),o&&this.on("always",o),this.getImages(),i&&(this.jqDeferred=new i.Deferred),setTimeout(this.check.bind(this))):s.error(`Bad element for imagesLoaded ${r||t}`)}n.prototype=Object.create(e.prototype),n.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)};const o=[1,9,11];n.prototype.addElementImages=function(t){"IMG"===t.nodeName&&this.addImage(t),!0===this.options.background&&this.addElementBackgroundImages(t);let{nodeType:e}=t;if(!e||!o.includes(e))return;let i=t.querySelectorAll("img");for(let t of i)this.addImage(t);if("string"==typeof this.options.background){let e=t.querySelectorAll(this.options.background);for(let t of e)this.addElementBackgroundImages(t)}};const r=/url\((['"])?(.*?)\1\)/gi;function h(t){this.img=t}function d(t,e){this.url=t,this.element=e,this.img=new Image}return n.prototype.addElementBackgroundImages=function(t){let e=getComputedStyle(t);if(!e)return;let i=r.exec(e.backgroundImage);for(;null!==i;){let s=i&&i[2];s&&this.addBackground(s,t),i=r.exec(e.backgroundImage)}},n.prototype.addImage=function(t){let e=new h(t);this.images.push(e)},n.prototype.addBackground=function(t,e){let i=new d(t,e);this.images.push(i)},n.prototype.check=function(){if(this.progressedCount=0,this.hasAnyBroken=!1,!this.images.length)return void this.complete();let t=(t,e,i)=>{setTimeout((()=>{this.progress(t,e,i)}))};this.images.forEach((function(e){e.once("progress",t),e.check()}))},n.prototype.progress=function(t,e,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!t.isLoaded,this.emitEvent("progress",[this,t,e]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,t),this.progressedCount===this.images.length&&this.complete(),this.options.debug&&s&&s.log(`progress: ${i}`,t,e)},n.prototype.complete=function(){let t=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(t,[this]),this.emitEvent("always",[this]),this.jqDeferred){let t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},h.prototype=Object.create(e.prototype),h.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.img.crossOrigin&&(this.proxyImage.crossOrigin=this.img.crossOrigin),this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.currentSrc||this.img.src)},h.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},h.prototype.confirm=function(t,e){this.isLoaded=t;let{parentNode:i}=this.img,s="PICTURE"===i.nodeName?i:this.img;this.emitEvent("progress",[this,s,e])},h.prototype.handleEvent=function(t){let e="on"+t.type;this[e]&&this[e](t)},h.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},h.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},h.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype=Object.create(h.prototype),d.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},d.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.element,e])},n.makeJQueryPlugin=function(e){(e=e||t.jQuery)&&(i=e,i.fn.imagesLoaded=function(t,e){return new n(this,t,e).jqDeferred.promise(i(this))})},n.makeJQueryPlugin(),n}));
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "imagesloaded",
3 | "version": "5.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "imagesloaded",
9 | "version": "5.0.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "ev-emitter": "^2.1.2"
13 | },
14 | "devDependencies": {
15 | "eslint": "^7.32.0",
16 | "eslint-plugin-metafizzy": "^1.2.1",
17 | "jquery": "^3.6.0",
18 | "qunit": "^2.17.2",
19 | "terser": "^5.10.0"
20 | }
21 | },
22 | "node_modules/@babel/code-frame": {
23 | "version": "7.12.11",
24 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
25 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
26 | "dev": true,
27 | "dependencies": {
28 | "@babel/highlight": "^7.10.4"
29 | }
30 | },
31 | "node_modules/@babel/helper-validator-identifier": {
32 | "version": "7.16.7",
33 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
34 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
35 | "dev": true,
36 | "engines": {
37 | "node": ">=6.9.0"
38 | }
39 | },
40 | "node_modules/@babel/highlight": {
41 | "version": "7.16.10",
42 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
43 | "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
44 | "dev": true,
45 | "dependencies": {
46 | "@babel/helper-validator-identifier": "^7.16.7",
47 | "chalk": "^2.0.0",
48 | "js-tokens": "^4.0.0"
49 | },
50 | "engines": {
51 | "node": ">=6.9.0"
52 | }
53 | },
54 | "node_modules/@babel/highlight/node_modules/ansi-styles": {
55 | "version": "3.2.1",
56 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
57 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
58 | "dev": true,
59 | "dependencies": {
60 | "color-convert": "^1.9.0"
61 | },
62 | "engines": {
63 | "node": ">=4"
64 | }
65 | },
66 | "node_modules/@babel/highlight/node_modules/chalk": {
67 | "version": "2.4.2",
68 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
69 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
70 | "dev": true,
71 | "dependencies": {
72 | "ansi-styles": "^3.2.1",
73 | "escape-string-regexp": "^1.0.5",
74 | "supports-color": "^5.3.0"
75 | },
76 | "engines": {
77 | "node": ">=4"
78 | }
79 | },
80 | "node_modules/@babel/highlight/node_modules/supports-color": {
81 | "version": "5.5.0",
82 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
83 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
84 | "dev": true,
85 | "dependencies": {
86 | "has-flag": "^3.0.0"
87 | },
88 | "engines": {
89 | "node": ">=4"
90 | }
91 | },
92 | "node_modules/@eslint/eslintrc": {
93 | "version": "0.4.3",
94 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
95 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
96 | "dev": true,
97 | "dependencies": {
98 | "ajv": "^6.12.4",
99 | "debug": "^4.1.1",
100 | "espree": "^7.3.0",
101 | "globals": "^13.9.0",
102 | "ignore": "^4.0.6",
103 | "import-fresh": "^3.2.1",
104 | "js-yaml": "^3.13.1",
105 | "minimatch": "^3.0.4",
106 | "strip-json-comments": "^3.1.1"
107 | },
108 | "engines": {
109 | "node": "^10.12.0 || >=12.0.0"
110 | }
111 | },
112 | "node_modules/@humanwhocodes/config-array": {
113 | "version": "0.5.0",
114 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
115 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
116 | "dev": true,
117 | "dependencies": {
118 | "@humanwhocodes/object-schema": "^1.2.0",
119 | "debug": "^4.1.1",
120 | "minimatch": "^3.0.4"
121 | },
122 | "engines": {
123 | "node": ">=10.10.0"
124 | }
125 | },
126 | "node_modules/@humanwhocodes/object-schema": {
127 | "version": "1.2.1",
128 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
129 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
130 | "dev": true
131 | },
132 | "node_modules/acorn": {
133 | "version": "8.7.0",
134 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
135 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
136 | "dev": true,
137 | "peer": true,
138 | "bin": {
139 | "acorn": "bin/acorn"
140 | },
141 | "engines": {
142 | "node": ">=0.4.0"
143 | }
144 | },
145 | "node_modules/acorn-jsx": {
146 | "version": "5.3.2",
147 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
148 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
149 | "dev": true,
150 | "peerDependencies": {
151 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
152 | }
153 | },
154 | "node_modules/ajv": {
155 | "version": "6.12.6",
156 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
157 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
158 | "dev": true,
159 | "dependencies": {
160 | "fast-deep-equal": "^3.1.1",
161 | "fast-json-stable-stringify": "^2.0.0",
162 | "json-schema-traverse": "^0.4.1",
163 | "uri-js": "^4.2.2"
164 | },
165 | "funding": {
166 | "type": "github",
167 | "url": "https://github.com/sponsors/epoberezkin"
168 | }
169 | },
170 | "node_modules/ansi-colors": {
171 | "version": "4.1.1",
172 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
173 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
174 | "dev": true,
175 | "engines": {
176 | "node": ">=6"
177 | }
178 | },
179 | "node_modules/argparse": {
180 | "version": "1.0.10",
181 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
182 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
183 | "dev": true,
184 | "dependencies": {
185 | "sprintf-js": "~1.0.2"
186 | }
187 | },
188 | "node_modules/astral-regex": {
189 | "version": "2.0.0",
190 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
191 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
192 | "dev": true,
193 | "engines": {
194 | "node": ">=8"
195 | }
196 | },
197 | "node_modules/balanced-match": {
198 | "version": "1.0.2",
199 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
200 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
201 | "dev": true
202 | },
203 | "node_modules/brace-expansion": {
204 | "version": "1.1.11",
205 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
206 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
207 | "dev": true,
208 | "dependencies": {
209 | "balanced-match": "^1.0.0",
210 | "concat-map": "0.0.1"
211 | }
212 | },
213 | "node_modules/buffer-from": {
214 | "version": "1.1.2",
215 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
216 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
217 | "dev": true
218 | },
219 | "node_modules/callsites": {
220 | "version": "3.1.0",
221 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
222 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
223 | "dev": true,
224 | "engines": {
225 | "node": ">=6"
226 | }
227 | },
228 | "node_modules/color-convert": {
229 | "version": "1.9.3",
230 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
231 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
232 | "dev": true,
233 | "dependencies": {
234 | "color-name": "1.1.3"
235 | }
236 | },
237 | "node_modules/color-name": {
238 | "version": "1.1.3",
239 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
240 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
241 | "dev": true
242 | },
243 | "node_modules/commander": {
244 | "version": "7.2.0",
245 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
246 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
247 | "dev": true,
248 | "engines": {
249 | "node": ">= 10"
250 | }
251 | },
252 | "node_modules/concat-map": {
253 | "version": "0.0.1",
254 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
255 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
256 | "dev": true
257 | },
258 | "node_modules/cross-spawn": {
259 | "version": "7.0.3",
260 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
261 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
262 | "dev": true,
263 | "dependencies": {
264 | "path-key": "^3.1.0",
265 | "shebang-command": "^2.0.0",
266 | "which": "^2.0.1"
267 | },
268 | "engines": {
269 | "node": ">= 8"
270 | }
271 | },
272 | "node_modules/debug": {
273 | "version": "4.3.3",
274 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
275 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
276 | "dev": true,
277 | "dependencies": {
278 | "ms": "2.1.2"
279 | },
280 | "engines": {
281 | "node": ">=6.0"
282 | },
283 | "peerDependenciesMeta": {
284 | "supports-color": {
285 | "optional": true
286 | }
287 | }
288 | },
289 | "node_modules/deep-is": {
290 | "version": "0.1.4",
291 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
292 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
293 | "dev": true
294 | },
295 | "node_modules/doctrine": {
296 | "version": "3.0.0",
297 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
298 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
299 | "dev": true,
300 | "dependencies": {
301 | "esutils": "^2.0.2"
302 | },
303 | "engines": {
304 | "node": ">=6.0.0"
305 | }
306 | },
307 | "node_modules/emoji-regex": {
308 | "version": "8.0.0",
309 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
310 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
311 | "dev": true
312 | },
313 | "node_modules/enquirer": {
314 | "version": "2.3.6",
315 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
316 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
317 | "dev": true,
318 | "dependencies": {
319 | "ansi-colors": "^4.1.1"
320 | },
321 | "engines": {
322 | "node": ">=8.6"
323 | }
324 | },
325 | "node_modules/escape-string-regexp": {
326 | "version": "1.0.5",
327 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
328 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
329 | "dev": true,
330 | "engines": {
331 | "node": ">=0.8.0"
332 | }
333 | },
334 | "node_modules/eslint": {
335 | "version": "7.32.0",
336 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
337 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
338 | "dev": true,
339 | "dependencies": {
340 | "@babel/code-frame": "7.12.11",
341 | "@eslint/eslintrc": "^0.4.3",
342 | "@humanwhocodes/config-array": "^0.5.0",
343 | "ajv": "^6.10.0",
344 | "chalk": "^4.0.0",
345 | "cross-spawn": "^7.0.2",
346 | "debug": "^4.0.1",
347 | "doctrine": "^3.0.0",
348 | "enquirer": "^2.3.5",
349 | "escape-string-regexp": "^4.0.0",
350 | "eslint-scope": "^5.1.1",
351 | "eslint-utils": "^2.1.0",
352 | "eslint-visitor-keys": "^2.0.0",
353 | "espree": "^7.3.1",
354 | "esquery": "^1.4.0",
355 | "esutils": "^2.0.2",
356 | "fast-deep-equal": "^3.1.3",
357 | "file-entry-cache": "^6.0.1",
358 | "functional-red-black-tree": "^1.0.1",
359 | "glob-parent": "^5.1.2",
360 | "globals": "^13.6.0",
361 | "ignore": "^4.0.6",
362 | "import-fresh": "^3.0.0",
363 | "imurmurhash": "^0.1.4",
364 | "is-glob": "^4.0.0",
365 | "js-yaml": "^3.13.1",
366 | "json-stable-stringify-without-jsonify": "^1.0.1",
367 | "levn": "^0.4.1",
368 | "lodash.merge": "^4.6.2",
369 | "minimatch": "^3.0.4",
370 | "natural-compare": "^1.4.0",
371 | "optionator": "^0.9.1",
372 | "progress": "^2.0.0",
373 | "regexpp": "^3.1.0",
374 | "semver": "^7.2.1",
375 | "strip-ansi": "^6.0.0",
376 | "strip-json-comments": "^3.1.0",
377 | "table": "^6.0.9",
378 | "text-table": "^0.2.0",
379 | "v8-compile-cache": "^2.0.3"
380 | },
381 | "bin": {
382 | "eslint": "bin/eslint.js"
383 | },
384 | "engines": {
385 | "node": "^10.12.0 || >=12.0.0"
386 | },
387 | "funding": {
388 | "url": "https://opencollective.com/eslint"
389 | }
390 | },
391 | "node_modules/eslint-plugin-metafizzy": {
392 | "version": "1.2.1",
393 | "resolved": "https://registry.npmjs.org/eslint-plugin-metafizzy/-/eslint-plugin-metafizzy-1.2.1.tgz",
394 | "integrity": "sha512-xl+JvruIUIqiBKAe3PcFoBPEESHjYFM08Nss57qs7P4iC392XLCUpruaGXWzy/sEwRWwH14jPp6aN1flNca6AA==",
395 | "dev": true,
396 | "peerDependencies": {
397 | "eslint": ">=6.8.0 <8.0.0"
398 | }
399 | },
400 | "node_modules/eslint-scope": {
401 | "version": "5.1.1",
402 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
403 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
404 | "dev": true,
405 | "dependencies": {
406 | "esrecurse": "^4.3.0",
407 | "estraverse": "^4.1.1"
408 | },
409 | "engines": {
410 | "node": ">=8.0.0"
411 | }
412 | },
413 | "node_modules/eslint-utils": {
414 | "version": "2.1.0",
415 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
416 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
417 | "dev": true,
418 | "dependencies": {
419 | "eslint-visitor-keys": "^1.1.0"
420 | },
421 | "engines": {
422 | "node": ">=6"
423 | },
424 | "funding": {
425 | "url": "https://github.com/sponsors/mysticatea"
426 | }
427 | },
428 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
429 | "version": "1.3.0",
430 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
431 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
432 | "dev": true,
433 | "engines": {
434 | "node": ">=4"
435 | }
436 | },
437 | "node_modules/eslint-visitor-keys": {
438 | "version": "2.1.0",
439 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
440 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
441 | "dev": true,
442 | "engines": {
443 | "node": ">=10"
444 | }
445 | },
446 | "node_modules/eslint/node_modules/ansi-regex": {
447 | "version": "5.0.1",
448 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
449 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
450 | "dev": true,
451 | "engines": {
452 | "node": ">=8"
453 | }
454 | },
455 | "node_modules/eslint/node_modules/ansi-styles": {
456 | "version": "4.3.0",
457 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
458 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
459 | "dev": true,
460 | "dependencies": {
461 | "color-convert": "^2.0.1"
462 | },
463 | "engines": {
464 | "node": ">=8"
465 | },
466 | "funding": {
467 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
468 | }
469 | },
470 | "node_modules/eslint/node_modules/chalk": {
471 | "version": "4.1.2",
472 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
473 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
474 | "dev": true,
475 | "dependencies": {
476 | "ansi-styles": "^4.1.0",
477 | "supports-color": "^7.1.0"
478 | },
479 | "engines": {
480 | "node": ">=10"
481 | },
482 | "funding": {
483 | "url": "https://github.com/chalk/chalk?sponsor=1"
484 | }
485 | },
486 | "node_modules/eslint/node_modules/color-convert": {
487 | "version": "2.0.1",
488 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
489 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
490 | "dev": true,
491 | "dependencies": {
492 | "color-name": "~1.1.4"
493 | },
494 | "engines": {
495 | "node": ">=7.0.0"
496 | }
497 | },
498 | "node_modules/eslint/node_modules/color-name": {
499 | "version": "1.1.4",
500 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
501 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
502 | "dev": true
503 | },
504 | "node_modules/eslint/node_modules/escape-string-regexp": {
505 | "version": "4.0.0",
506 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
507 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
508 | "dev": true,
509 | "engines": {
510 | "node": ">=10"
511 | },
512 | "funding": {
513 | "url": "https://github.com/sponsors/sindresorhus"
514 | }
515 | },
516 | "node_modules/eslint/node_modules/has-flag": {
517 | "version": "4.0.0",
518 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
519 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
520 | "dev": true,
521 | "engines": {
522 | "node": ">=8"
523 | }
524 | },
525 | "node_modules/eslint/node_modules/strip-ansi": {
526 | "version": "6.0.1",
527 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
528 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
529 | "dev": true,
530 | "dependencies": {
531 | "ansi-regex": "^5.0.1"
532 | },
533 | "engines": {
534 | "node": ">=8"
535 | }
536 | },
537 | "node_modules/eslint/node_modules/supports-color": {
538 | "version": "7.2.0",
539 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
540 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
541 | "dev": true,
542 | "dependencies": {
543 | "has-flag": "^4.0.0"
544 | },
545 | "engines": {
546 | "node": ">=8"
547 | }
548 | },
549 | "node_modules/espree": {
550 | "version": "7.3.1",
551 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
552 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
553 | "dev": true,
554 | "dependencies": {
555 | "acorn": "^7.4.0",
556 | "acorn-jsx": "^5.3.1",
557 | "eslint-visitor-keys": "^1.3.0"
558 | },
559 | "engines": {
560 | "node": "^10.12.0 || >=12.0.0"
561 | }
562 | },
563 | "node_modules/espree/node_modules/acorn": {
564 | "version": "7.4.1",
565 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
566 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
567 | "dev": true,
568 | "bin": {
569 | "acorn": "bin/acorn"
570 | },
571 | "engines": {
572 | "node": ">=0.4.0"
573 | }
574 | },
575 | "node_modules/espree/node_modules/eslint-visitor-keys": {
576 | "version": "1.3.0",
577 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
578 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
579 | "dev": true,
580 | "engines": {
581 | "node": ">=4"
582 | }
583 | },
584 | "node_modules/esprima": {
585 | "version": "4.0.1",
586 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
587 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
588 | "dev": true,
589 | "bin": {
590 | "esparse": "bin/esparse.js",
591 | "esvalidate": "bin/esvalidate.js"
592 | },
593 | "engines": {
594 | "node": ">=4"
595 | }
596 | },
597 | "node_modules/esquery": {
598 | "version": "1.4.0",
599 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
600 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
601 | "dev": true,
602 | "dependencies": {
603 | "estraverse": "^5.1.0"
604 | },
605 | "engines": {
606 | "node": ">=0.10"
607 | }
608 | },
609 | "node_modules/esquery/node_modules/estraverse": {
610 | "version": "5.3.0",
611 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
612 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
613 | "dev": true,
614 | "engines": {
615 | "node": ">=4.0"
616 | }
617 | },
618 | "node_modules/esrecurse": {
619 | "version": "4.3.0",
620 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
621 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
622 | "dev": true,
623 | "dependencies": {
624 | "estraverse": "^5.2.0"
625 | },
626 | "engines": {
627 | "node": ">=4.0"
628 | }
629 | },
630 | "node_modules/esrecurse/node_modules/estraverse": {
631 | "version": "5.3.0",
632 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
633 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
634 | "dev": true,
635 | "engines": {
636 | "node": ">=4.0"
637 | }
638 | },
639 | "node_modules/estraverse": {
640 | "version": "4.3.0",
641 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
642 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
643 | "dev": true,
644 | "engines": {
645 | "node": ">=4.0"
646 | }
647 | },
648 | "node_modules/esutils": {
649 | "version": "2.0.3",
650 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
651 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
652 | "dev": true,
653 | "engines": {
654 | "node": ">=0.10.0"
655 | }
656 | },
657 | "node_modules/ev-emitter": {
658 | "version": "2.1.2",
659 | "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz",
660 | "integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q=="
661 | },
662 | "node_modules/fast-deep-equal": {
663 | "version": "3.1.3",
664 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
665 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
666 | "dev": true
667 | },
668 | "node_modules/fast-json-stable-stringify": {
669 | "version": "2.1.0",
670 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
671 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
672 | "dev": true
673 | },
674 | "node_modules/fast-levenshtein": {
675 | "version": "2.0.6",
676 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
677 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
678 | "dev": true
679 | },
680 | "node_modules/file-entry-cache": {
681 | "version": "6.0.1",
682 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
683 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
684 | "dev": true,
685 | "dependencies": {
686 | "flat-cache": "^3.0.4"
687 | },
688 | "engines": {
689 | "node": "^10.12.0 || >=12.0.0"
690 | }
691 | },
692 | "node_modules/flat-cache": {
693 | "version": "3.0.4",
694 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
695 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
696 | "dev": true,
697 | "dependencies": {
698 | "flatted": "^3.1.0",
699 | "rimraf": "^3.0.2"
700 | },
701 | "engines": {
702 | "node": "^10.12.0 || >=12.0.0"
703 | }
704 | },
705 | "node_modules/flatted": {
706 | "version": "3.2.5",
707 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
708 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
709 | "dev": true
710 | },
711 | "node_modules/fs.realpath": {
712 | "version": "1.0.0",
713 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
714 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
715 | "dev": true
716 | },
717 | "node_modules/functional-red-black-tree": {
718 | "version": "1.0.1",
719 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
720 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
721 | "dev": true
722 | },
723 | "node_modules/glob": {
724 | "version": "7.2.0",
725 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
726 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
727 | "dev": true,
728 | "dependencies": {
729 | "fs.realpath": "^1.0.0",
730 | "inflight": "^1.0.4",
731 | "inherits": "2",
732 | "minimatch": "^3.0.4",
733 | "once": "^1.3.0",
734 | "path-is-absolute": "^1.0.0"
735 | },
736 | "engines": {
737 | "node": "*"
738 | },
739 | "funding": {
740 | "url": "https://github.com/sponsors/isaacs"
741 | }
742 | },
743 | "node_modules/glob-parent": {
744 | "version": "5.1.2",
745 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
746 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
747 | "dev": true,
748 | "dependencies": {
749 | "is-glob": "^4.0.1"
750 | },
751 | "engines": {
752 | "node": ">= 6"
753 | }
754 | },
755 | "node_modules/globals": {
756 | "version": "13.12.0",
757 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
758 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
759 | "dev": true,
760 | "dependencies": {
761 | "type-fest": "^0.20.2"
762 | },
763 | "engines": {
764 | "node": ">=8"
765 | },
766 | "funding": {
767 | "url": "https://github.com/sponsors/sindresorhus"
768 | }
769 | },
770 | "node_modules/globalyzer": {
771 | "version": "0.1.0",
772 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
773 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
774 | "dev": true
775 | },
776 | "node_modules/globrex": {
777 | "version": "0.1.2",
778 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
779 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
780 | "dev": true
781 | },
782 | "node_modules/has-flag": {
783 | "version": "3.0.0",
784 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
785 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
786 | "dev": true,
787 | "engines": {
788 | "node": ">=4"
789 | }
790 | },
791 | "node_modules/ignore": {
792 | "version": "4.0.6",
793 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
794 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
795 | "dev": true,
796 | "engines": {
797 | "node": ">= 4"
798 | }
799 | },
800 | "node_modules/import-fresh": {
801 | "version": "3.3.0",
802 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
803 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
804 | "dev": true,
805 | "dependencies": {
806 | "parent-module": "^1.0.0",
807 | "resolve-from": "^4.0.0"
808 | },
809 | "engines": {
810 | "node": ">=6"
811 | },
812 | "funding": {
813 | "url": "https://github.com/sponsors/sindresorhus"
814 | }
815 | },
816 | "node_modules/imurmurhash": {
817 | "version": "0.1.4",
818 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
819 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
820 | "dev": true,
821 | "engines": {
822 | "node": ">=0.8.19"
823 | }
824 | },
825 | "node_modules/inflight": {
826 | "version": "1.0.6",
827 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
828 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
829 | "dev": true,
830 | "dependencies": {
831 | "once": "^1.3.0",
832 | "wrappy": "1"
833 | }
834 | },
835 | "node_modules/inherits": {
836 | "version": "2.0.4",
837 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
838 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
839 | "dev": true
840 | },
841 | "node_modules/is-extglob": {
842 | "version": "2.1.1",
843 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
844 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
845 | "dev": true,
846 | "engines": {
847 | "node": ">=0.10.0"
848 | }
849 | },
850 | "node_modules/is-fullwidth-code-point": {
851 | "version": "3.0.0",
852 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
853 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
854 | "dev": true,
855 | "engines": {
856 | "node": ">=8"
857 | }
858 | },
859 | "node_modules/is-glob": {
860 | "version": "4.0.3",
861 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
862 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
863 | "dev": true,
864 | "dependencies": {
865 | "is-extglob": "^2.1.1"
866 | },
867 | "engines": {
868 | "node": ">=0.10.0"
869 | }
870 | },
871 | "node_modules/isexe": {
872 | "version": "2.0.0",
873 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
874 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
875 | "dev": true
876 | },
877 | "node_modules/jquery": {
878 | "version": "3.6.0",
879 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
880 | "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
881 | "dev": true
882 | },
883 | "node_modules/js-tokens": {
884 | "version": "4.0.0",
885 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
886 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
887 | "dev": true
888 | },
889 | "node_modules/js-yaml": {
890 | "version": "3.14.1",
891 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
892 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
893 | "dev": true,
894 | "dependencies": {
895 | "argparse": "^1.0.7",
896 | "esprima": "^4.0.0"
897 | },
898 | "bin": {
899 | "js-yaml": "bin/js-yaml.js"
900 | }
901 | },
902 | "node_modules/json-schema-traverse": {
903 | "version": "0.4.1",
904 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
905 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
906 | "dev": true
907 | },
908 | "node_modules/json-stable-stringify-without-jsonify": {
909 | "version": "1.0.1",
910 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
911 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
912 | "dev": true
913 | },
914 | "node_modules/levn": {
915 | "version": "0.4.1",
916 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
917 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
918 | "dev": true,
919 | "dependencies": {
920 | "prelude-ls": "^1.2.1",
921 | "type-check": "~0.4.0"
922 | },
923 | "engines": {
924 | "node": ">= 0.8.0"
925 | }
926 | },
927 | "node_modules/lodash.merge": {
928 | "version": "4.6.2",
929 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
930 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
931 | "dev": true
932 | },
933 | "node_modules/lodash.truncate": {
934 | "version": "4.4.2",
935 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
936 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
937 | "dev": true
938 | },
939 | "node_modules/lru-cache": {
940 | "version": "6.0.0",
941 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
942 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
943 | "dev": true,
944 | "dependencies": {
945 | "yallist": "^4.0.0"
946 | },
947 | "engines": {
948 | "node": ">=10"
949 | }
950 | },
951 | "node_modules/minimatch": {
952 | "version": "3.0.4",
953 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
954 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
955 | "dev": true,
956 | "dependencies": {
957 | "brace-expansion": "^1.1.7"
958 | },
959 | "engines": {
960 | "node": "*"
961 | }
962 | },
963 | "node_modules/ms": {
964 | "version": "2.1.2",
965 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
966 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
967 | "dev": true
968 | },
969 | "node_modules/natural-compare": {
970 | "version": "1.4.0",
971 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
972 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
973 | "dev": true
974 | },
975 | "node_modules/node-watch": {
976 | "version": "0.7.2",
977 | "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.2.tgz",
978 | "integrity": "sha512-g53VjSARRv1JdST0LZRIg8RiuLr1TaBbVPsVvxh0/0Ymvi0xYUjDuoqQQAWtHJQUXhiShowPT/aXKNeHBcyQsw==",
979 | "dev": true,
980 | "engines": {
981 | "node": ">=6"
982 | }
983 | },
984 | "node_modules/once": {
985 | "version": "1.4.0",
986 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
987 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
988 | "dev": true,
989 | "dependencies": {
990 | "wrappy": "1"
991 | }
992 | },
993 | "node_modules/optionator": {
994 | "version": "0.9.1",
995 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
996 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
997 | "dev": true,
998 | "dependencies": {
999 | "deep-is": "^0.1.3",
1000 | "fast-levenshtein": "^2.0.6",
1001 | "levn": "^0.4.1",
1002 | "prelude-ls": "^1.2.1",
1003 | "type-check": "^0.4.0",
1004 | "word-wrap": "^1.2.3"
1005 | },
1006 | "engines": {
1007 | "node": ">= 0.8.0"
1008 | }
1009 | },
1010 | "node_modules/parent-module": {
1011 | "version": "1.0.1",
1012 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1013 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1014 | "dev": true,
1015 | "dependencies": {
1016 | "callsites": "^3.0.0"
1017 | },
1018 | "engines": {
1019 | "node": ">=6"
1020 | }
1021 | },
1022 | "node_modules/path-is-absolute": {
1023 | "version": "1.0.1",
1024 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1025 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1026 | "dev": true,
1027 | "engines": {
1028 | "node": ">=0.10.0"
1029 | }
1030 | },
1031 | "node_modules/path-key": {
1032 | "version": "3.1.1",
1033 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1034 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1035 | "dev": true,
1036 | "engines": {
1037 | "node": ">=8"
1038 | }
1039 | },
1040 | "node_modules/prelude-ls": {
1041 | "version": "1.2.1",
1042 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1043 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1044 | "dev": true,
1045 | "engines": {
1046 | "node": ">= 0.8.0"
1047 | }
1048 | },
1049 | "node_modules/progress": {
1050 | "version": "2.0.3",
1051 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1052 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1053 | "dev": true,
1054 | "engines": {
1055 | "node": ">=0.4.0"
1056 | }
1057 | },
1058 | "node_modules/punycode": {
1059 | "version": "2.1.1",
1060 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1061 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1062 | "dev": true,
1063 | "engines": {
1064 | "node": ">=6"
1065 | }
1066 | },
1067 | "node_modules/qunit": {
1068 | "version": "2.17.2",
1069 | "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.17.2.tgz",
1070 | "integrity": "sha512-17isVvuOmALzsPjiV7wFg/6O5vJYXBrQZPwocfQSSh0I/rXvfX7bKMFJ4GMVW3U4P8r2mBeUy8EAngti4QD2Vw==",
1071 | "dev": true,
1072 | "dependencies": {
1073 | "commander": "7.2.0",
1074 | "node-watch": "0.7.2",
1075 | "tiny-glob": "0.2.9"
1076 | },
1077 | "bin": {
1078 | "qunit": "bin/qunit.js"
1079 | },
1080 | "engines": {
1081 | "node": ">=10"
1082 | }
1083 | },
1084 | "node_modules/regexpp": {
1085 | "version": "3.2.0",
1086 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
1087 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
1088 | "dev": true,
1089 | "engines": {
1090 | "node": ">=8"
1091 | },
1092 | "funding": {
1093 | "url": "https://github.com/sponsors/mysticatea"
1094 | }
1095 | },
1096 | "node_modules/require-from-string": {
1097 | "version": "2.0.2",
1098 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
1099 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
1100 | "dev": true,
1101 | "engines": {
1102 | "node": ">=0.10.0"
1103 | }
1104 | },
1105 | "node_modules/resolve-from": {
1106 | "version": "4.0.0",
1107 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1108 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1109 | "dev": true,
1110 | "engines": {
1111 | "node": ">=4"
1112 | }
1113 | },
1114 | "node_modules/rimraf": {
1115 | "version": "3.0.2",
1116 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1117 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1118 | "dev": true,
1119 | "dependencies": {
1120 | "glob": "^7.1.3"
1121 | },
1122 | "bin": {
1123 | "rimraf": "bin.js"
1124 | },
1125 | "funding": {
1126 | "url": "https://github.com/sponsors/isaacs"
1127 | }
1128 | },
1129 | "node_modules/semver": {
1130 | "version": "7.3.5",
1131 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
1132 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
1133 | "dev": true,
1134 | "dependencies": {
1135 | "lru-cache": "^6.0.0"
1136 | },
1137 | "bin": {
1138 | "semver": "bin/semver.js"
1139 | },
1140 | "engines": {
1141 | "node": ">=10"
1142 | }
1143 | },
1144 | "node_modules/shebang-command": {
1145 | "version": "2.0.0",
1146 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1147 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1148 | "dev": true,
1149 | "dependencies": {
1150 | "shebang-regex": "^3.0.0"
1151 | },
1152 | "engines": {
1153 | "node": ">=8"
1154 | }
1155 | },
1156 | "node_modules/shebang-regex": {
1157 | "version": "3.0.0",
1158 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1159 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1160 | "dev": true,
1161 | "engines": {
1162 | "node": ">=8"
1163 | }
1164 | },
1165 | "node_modules/slice-ansi": {
1166 | "version": "4.0.0",
1167 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
1168 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
1169 | "dev": true,
1170 | "dependencies": {
1171 | "ansi-styles": "^4.0.0",
1172 | "astral-regex": "^2.0.0",
1173 | "is-fullwidth-code-point": "^3.0.0"
1174 | },
1175 | "engines": {
1176 | "node": ">=10"
1177 | },
1178 | "funding": {
1179 | "url": "https://github.com/chalk/slice-ansi?sponsor=1"
1180 | }
1181 | },
1182 | "node_modules/slice-ansi/node_modules/ansi-styles": {
1183 | "version": "4.3.0",
1184 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1185 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1186 | "dev": true,
1187 | "dependencies": {
1188 | "color-convert": "^2.0.1"
1189 | },
1190 | "engines": {
1191 | "node": ">=8"
1192 | },
1193 | "funding": {
1194 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1195 | }
1196 | },
1197 | "node_modules/slice-ansi/node_modules/color-convert": {
1198 | "version": "2.0.1",
1199 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1200 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1201 | "dev": true,
1202 | "dependencies": {
1203 | "color-name": "~1.1.4"
1204 | },
1205 | "engines": {
1206 | "node": ">=7.0.0"
1207 | }
1208 | },
1209 | "node_modules/slice-ansi/node_modules/color-name": {
1210 | "version": "1.1.4",
1211 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1212 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1213 | "dev": true
1214 | },
1215 | "node_modules/source-map": {
1216 | "version": "0.7.3",
1217 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
1218 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
1219 | "dev": true,
1220 | "engines": {
1221 | "node": ">= 8"
1222 | }
1223 | },
1224 | "node_modules/source-map-support": {
1225 | "version": "0.5.21",
1226 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
1227 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
1228 | "dev": true,
1229 | "dependencies": {
1230 | "buffer-from": "^1.0.0",
1231 | "source-map": "^0.6.0"
1232 | }
1233 | },
1234 | "node_modules/source-map-support/node_modules/source-map": {
1235 | "version": "0.6.1",
1236 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1237 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1238 | "dev": true,
1239 | "engines": {
1240 | "node": ">=0.10.0"
1241 | }
1242 | },
1243 | "node_modules/sprintf-js": {
1244 | "version": "1.0.3",
1245 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1246 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1247 | "dev": true
1248 | },
1249 | "node_modules/string-width": {
1250 | "version": "4.2.3",
1251 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1252 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1253 | "dev": true,
1254 | "dependencies": {
1255 | "emoji-regex": "^8.0.0",
1256 | "is-fullwidth-code-point": "^3.0.0",
1257 | "strip-ansi": "^6.0.1"
1258 | },
1259 | "engines": {
1260 | "node": ">=8"
1261 | }
1262 | },
1263 | "node_modules/string-width/node_modules/ansi-regex": {
1264 | "version": "5.0.1",
1265 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1266 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1267 | "dev": true,
1268 | "engines": {
1269 | "node": ">=8"
1270 | }
1271 | },
1272 | "node_modules/string-width/node_modules/strip-ansi": {
1273 | "version": "6.0.1",
1274 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1275 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1276 | "dev": true,
1277 | "dependencies": {
1278 | "ansi-regex": "^5.0.1"
1279 | },
1280 | "engines": {
1281 | "node": ">=8"
1282 | }
1283 | },
1284 | "node_modules/strip-json-comments": {
1285 | "version": "3.1.1",
1286 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1287 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1288 | "dev": true,
1289 | "engines": {
1290 | "node": ">=8"
1291 | },
1292 | "funding": {
1293 | "url": "https://github.com/sponsors/sindresorhus"
1294 | }
1295 | },
1296 | "node_modules/table": {
1297 | "version": "6.8.0",
1298 | "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
1299 | "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
1300 | "dev": true,
1301 | "dependencies": {
1302 | "ajv": "^8.0.1",
1303 | "lodash.truncate": "^4.4.2",
1304 | "slice-ansi": "^4.0.0",
1305 | "string-width": "^4.2.3",
1306 | "strip-ansi": "^6.0.1"
1307 | },
1308 | "engines": {
1309 | "node": ">=10.0.0"
1310 | }
1311 | },
1312 | "node_modules/table/node_modules/ajv": {
1313 | "version": "8.9.0",
1314 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
1315 | "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
1316 | "dev": true,
1317 | "dependencies": {
1318 | "fast-deep-equal": "^3.1.1",
1319 | "json-schema-traverse": "^1.0.0",
1320 | "require-from-string": "^2.0.2",
1321 | "uri-js": "^4.2.2"
1322 | },
1323 | "funding": {
1324 | "type": "github",
1325 | "url": "https://github.com/sponsors/epoberezkin"
1326 | }
1327 | },
1328 | "node_modules/table/node_modules/ansi-regex": {
1329 | "version": "5.0.1",
1330 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1331 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1332 | "dev": true,
1333 | "engines": {
1334 | "node": ">=8"
1335 | }
1336 | },
1337 | "node_modules/table/node_modules/json-schema-traverse": {
1338 | "version": "1.0.0",
1339 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
1340 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
1341 | "dev": true
1342 | },
1343 | "node_modules/table/node_modules/strip-ansi": {
1344 | "version": "6.0.1",
1345 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1346 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1347 | "dev": true,
1348 | "dependencies": {
1349 | "ansi-regex": "^5.0.1"
1350 | },
1351 | "engines": {
1352 | "node": ">=8"
1353 | }
1354 | },
1355 | "node_modules/terser": {
1356 | "version": "5.10.0",
1357 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
1358 | "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
1359 | "dev": true,
1360 | "dependencies": {
1361 | "commander": "^2.20.0",
1362 | "source-map": "~0.7.2",
1363 | "source-map-support": "~0.5.20"
1364 | },
1365 | "bin": {
1366 | "terser": "bin/terser"
1367 | },
1368 | "engines": {
1369 | "node": ">=10"
1370 | },
1371 | "peerDependencies": {
1372 | "acorn": "^8.5.0"
1373 | },
1374 | "peerDependenciesMeta": {
1375 | "acorn": {
1376 | "optional": true
1377 | }
1378 | }
1379 | },
1380 | "node_modules/terser/node_modules/commander": {
1381 | "version": "2.20.3",
1382 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1383 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
1384 | "dev": true
1385 | },
1386 | "node_modules/text-table": {
1387 | "version": "0.2.0",
1388 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1389 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
1390 | "dev": true
1391 | },
1392 | "node_modules/tiny-glob": {
1393 | "version": "0.2.9",
1394 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
1395 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
1396 | "dev": true,
1397 | "dependencies": {
1398 | "globalyzer": "0.1.0",
1399 | "globrex": "^0.1.2"
1400 | }
1401 | },
1402 | "node_modules/type-check": {
1403 | "version": "0.4.0",
1404 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
1405 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
1406 | "dev": true,
1407 | "dependencies": {
1408 | "prelude-ls": "^1.2.1"
1409 | },
1410 | "engines": {
1411 | "node": ">= 0.8.0"
1412 | }
1413 | },
1414 | "node_modules/type-fest": {
1415 | "version": "0.20.2",
1416 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
1417 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
1418 | "dev": true,
1419 | "engines": {
1420 | "node": ">=10"
1421 | },
1422 | "funding": {
1423 | "url": "https://github.com/sponsors/sindresorhus"
1424 | }
1425 | },
1426 | "node_modules/uri-js": {
1427 | "version": "4.4.1",
1428 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1429 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1430 | "dev": true,
1431 | "dependencies": {
1432 | "punycode": "^2.1.0"
1433 | }
1434 | },
1435 | "node_modules/v8-compile-cache": {
1436 | "version": "2.3.0",
1437 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
1438 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
1439 | "dev": true
1440 | },
1441 | "node_modules/which": {
1442 | "version": "2.0.2",
1443 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1444 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1445 | "dev": true,
1446 | "dependencies": {
1447 | "isexe": "^2.0.0"
1448 | },
1449 | "bin": {
1450 | "node-which": "bin/node-which"
1451 | },
1452 | "engines": {
1453 | "node": ">= 8"
1454 | }
1455 | },
1456 | "node_modules/word-wrap": {
1457 | "version": "1.2.3",
1458 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1459 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1460 | "dev": true,
1461 | "engines": {
1462 | "node": ">=0.10.0"
1463 | }
1464 | },
1465 | "node_modules/wrappy": {
1466 | "version": "1.0.2",
1467 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1468 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1469 | "dev": true
1470 | },
1471 | "node_modules/yallist": {
1472 | "version": "4.0.0",
1473 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1474 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1475 | "dev": true
1476 | }
1477 | },
1478 | "dependencies": {
1479 | "@babel/code-frame": {
1480 | "version": "7.12.11",
1481 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
1482 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
1483 | "dev": true,
1484 | "requires": {
1485 | "@babel/highlight": "^7.10.4"
1486 | }
1487 | },
1488 | "@babel/helper-validator-identifier": {
1489 | "version": "7.16.7",
1490 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
1491 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
1492 | "dev": true
1493 | },
1494 | "@babel/highlight": {
1495 | "version": "7.16.10",
1496 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
1497 | "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
1498 | "dev": true,
1499 | "requires": {
1500 | "@babel/helper-validator-identifier": "^7.16.7",
1501 | "chalk": "^2.0.0",
1502 | "js-tokens": "^4.0.0"
1503 | },
1504 | "dependencies": {
1505 | "ansi-styles": {
1506 | "version": "3.2.1",
1507 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1508 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1509 | "dev": true,
1510 | "requires": {
1511 | "color-convert": "^1.9.0"
1512 | }
1513 | },
1514 | "chalk": {
1515 | "version": "2.4.2",
1516 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1517 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1518 | "dev": true,
1519 | "requires": {
1520 | "ansi-styles": "^3.2.1",
1521 | "escape-string-regexp": "^1.0.5",
1522 | "supports-color": "^5.3.0"
1523 | }
1524 | },
1525 | "supports-color": {
1526 | "version": "5.5.0",
1527 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1528 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1529 | "dev": true,
1530 | "requires": {
1531 | "has-flag": "^3.0.0"
1532 | }
1533 | }
1534 | }
1535 | },
1536 | "@eslint/eslintrc": {
1537 | "version": "0.4.3",
1538 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
1539 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
1540 | "dev": true,
1541 | "requires": {
1542 | "ajv": "^6.12.4",
1543 | "debug": "^4.1.1",
1544 | "espree": "^7.3.0",
1545 | "globals": "^13.9.0",
1546 | "ignore": "^4.0.6",
1547 | "import-fresh": "^3.2.1",
1548 | "js-yaml": "^3.13.1",
1549 | "minimatch": "^3.0.4",
1550 | "strip-json-comments": "^3.1.1"
1551 | }
1552 | },
1553 | "@humanwhocodes/config-array": {
1554 | "version": "0.5.0",
1555 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
1556 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
1557 | "dev": true,
1558 | "requires": {
1559 | "@humanwhocodes/object-schema": "^1.2.0",
1560 | "debug": "^4.1.1",
1561 | "minimatch": "^3.0.4"
1562 | }
1563 | },
1564 | "@humanwhocodes/object-schema": {
1565 | "version": "1.2.1",
1566 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
1567 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
1568 | "dev": true
1569 | },
1570 | "acorn": {
1571 | "version": "8.7.0",
1572 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
1573 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
1574 | "dev": true,
1575 | "peer": true
1576 | },
1577 | "acorn-jsx": {
1578 | "version": "5.3.2",
1579 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1580 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1581 | "dev": true,
1582 | "requires": {}
1583 | },
1584 | "ajv": {
1585 | "version": "6.12.6",
1586 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1587 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1588 | "dev": true,
1589 | "requires": {
1590 | "fast-deep-equal": "^3.1.1",
1591 | "fast-json-stable-stringify": "^2.0.0",
1592 | "json-schema-traverse": "^0.4.1",
1593 | "uri-js": "^4.2.2"
1594 | }
1595 | },
1596 | "ansi-colors": {
1597 | "version": "4.1.1",
1598 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
1599 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
1600 | "dev": true
1601 | },
1602 | "argparse": {
1603 | "version": "1.0.10",
1604 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
1605 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
1606 | "dev": true,
1607 | "requires": {
1608 | "sprintf-js": "~1.0.2"
1609 | }
1610 | },
1611 | "astral-regex": {
1612 | "version": "2.0.0",
1613 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
1614 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
1615 | "dev": true
1616 | },
1617 | "balanced-match": {
1618 | "version": "1.0.2",
1619 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1620 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1621 | "dev": true
1622 | },
1623 | "brace-expansion": {
1624 | "version": "1.1.11",
1625 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1626 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1627 | "dev": true,
1628 | "requires": {
1629 | "balanced-match": "^1.0.0",
1630 | "concat-map": "0.0.1"
1631 | }
1632 | },
1633 | "buffer-from": {
1634 | "version": "1.1.2",
1635 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
1636 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
1637 | "dev": true
1638 | },
1639 | "callsites": {
1640 | "version": "3.1.0",
1641 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1642 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1643 | "dev": true
1644 | },
1645 | "color-convert": {
1646 | "version": "1.9.3",
1647 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1648 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1649 | "dev": true,
1650 | "requires": {
1651 | "color-name": "1.1.3"
1652 | }
1653 | },
1654 | "color-name": {
1655 | "version": "1.1.3",
1656 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1657 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1658 | "dev": true
1659 | },
1660 | "commander": {
1661 | "version": "7.2.0",
1662 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
1663 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
1664 | "dev": true
1665 | },
1666 | "concat-map": {
1667 | "version": "0.0.1",
1668 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1669 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1670 | "dev": true
1671 | },
1672 | "cross-spawn": {
1673 | "version": "7.0.3",
1674 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1675 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1676 | "dev": true,
1677 | "requires": {
1678 | "path-key": "^3.1.0",
1679 | "shebang-command": "^2.0.0",
1680 | "which": "^2.0.1"
1681 | }
1682 | },
1683 | "debug": {
1684 | "version": "4.3.3",
1685 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
1686 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
1687 | "dev": true,
1688 | "requires": {
1689 | "ms": "2.1.2"
1690 | }
1691 | },
1692 | "deep-is": {
1693 | "version": "0.1.4",
1694 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1695 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1696 | "dev": true
1697 | },
1698 | "doctrine": {
1699 | "version": "3.0.0",
1700 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
1701 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
1702 | "dev": true,
1703 | "requires": {
1704 | "esutils": "^2.0.2"
1705 | }
1706 | },
1707 | "emoji-regex": {
1708 | "version": "8.0.0",
1709 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1710 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1711 | "dev": true
1712 | },
1713 | "enquirer": {
1714 | "version": "2.3.6",
1715 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
1716 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
1717 | "dev": true,
1718 | "requires": {
1719 | "ansi-colors": "^4.1.1"
1720 | }
1721 | },
1722 | "escape-string-regexp": {
1723 | "version": "1.0.5",
1724 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1725 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1726 | "dev": true
1727 | },
1728 | "eslint": {
1729 | "version": "7.32.0",
1730 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
1731 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
1732 | "dev": true,
1733 | "requires": {
1734 | "@babel/code-frame": "7.12.11",
1735 | "@eslint/eslintrc": "^0.4.3",
1736 | "@humanwhocodes/config-array": "^0.5.0",
1737 | "ajv": "^6.10.0",
1738 | "chalk": "^4.0.0",
1739 | "cross-spawn": "^7.0.2",
1740 | "debug": "^4.0.1",
1741 | "doctrine": "^3.0.0",
1742 | "enquirer": "^2.3.5",
1743 | "escape-string-regexp": "^4.0.0",
1744 | "eslint-scope": "^5.1.1",
1745 | "eslint-utils": "^2.1.0",
1746 | "eslint-visitor-keys": "^2.0.0",
1747 | "espree": "^7.3.1",
1748 | "esquery": "^1.4.0",
1749 | "esutils": "^2.0.2",
1750 | "fast-deep-equal": "^3.1.3",
1751 | "file-entry-cache": "^6.0.1",
1752 | "functional-red-black-tree": "^1.0.1",
1753 | "glob-parent": "^5.1.2",
1754 | "globals": "^13.6.0",
1755 | "ignore": "^4.0.6",
1756 | "import-fresh": "^3.0.0",
1757 | "imurmurhash": "^0.1.4",
1758 | "is-glob": "^4.0.0",
1759 | "js-yaml": "^3.13.1",
1760 | "json-stable-stringify-without-jsonify": "^1.0.1",
1761 | "levn": "^0.4.1",
1762 | "lodash.merge": "^4.6.2",
1763 | "minimatch": "^3.0.4",
1764 | "natural-compare": "^1.4.0",
1765 | "optionator": "^0.9.1",
1766 | "progress": "^2.0.0",
1767 | "regexpp": "^3.1.0",
1768 | "semver": "^7.2.1",
1769 | "strip-ansi": "^6.0.0",
1770 | "strip-json-comments": "^3.1.0",
1771 | "table": "^6.0.9",
1772 | "text-table": "^0.2.0",
1773 | "v8-compile-cache": "^2.0.3"
1774 | },
1775 | "dependencies": {
1776 | "ansi-regex": {
1777 | "version": "5.0.1",
1778 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1779 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1780 | "dev": true
1781 | },
1782 | "ansi-styles": {
1783 | "version": "4.3.0",
1784 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1785 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1786 | "dev": true,
1787 | "requires": {
1788 | "color-convert": "^2.0.1"
1789 | }
1790 | },
1791 | "chalk": {
1792 | "version": "4.1.2",
1793 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1794 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1795 | "dev": true,
1796 | "requires": {
1797 | "ansi-styles": "^4.1.0",
1798 | "supports-color": "^7.1.0"
1799 | }
1800 | },
1801 | "color-convert": {
1802 | "version": "2.0.1",
1803 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1804 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1805 | "dev": true,
1806 | "requires": {
1807 | "color-name": "~1.1.4"
1808 | }
1809 | },
1810 | "color-name": {
1811 | "version": "1.1.4",
1812 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1813 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1814 | "dev": true
1815 | },
1816 | "escape-string-regexp": {
1817 | "version": "4.0.0",
1818 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1819 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1820 | "dev": true
1821 | },
1822 | "has-flag": {
1823 | "version": "4.0.0",
1824 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1825 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1826 | "dev": true
1827 | },
1828 | "strip-ansi": {
1829 | "version": "6.0.1",
1830 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1831 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1832 | "dev": true,
1833 | "requires": {
1834 | "ansi-regex": "^5.0.1"
1835 | }
1836 | },
1837 | "supports-color": {
1838 | "version": "7.2.0",
1839 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1840 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1841 | "dev": true,
1842 | "requires": {
1843 | "has-flag": "^4.0.0"
1844 | }
1845 | }
1846 | }
1847 | },
1848 | "eslint-plugin-metafizzy": {
1849 | "version": "1.2.1",
1850 | "resolved": "https://registry.npmjs.org/eslint-plugin-metafizzy/-/eslint-plugin-metafizzy-1.2.1.tgz",
1851 | "integrity": "sha512-xl+JvruIUIqiBKAe3PcFoBPEESHjYFM08Nss57qs7P4iC392XLCUpruaGXWzy/sEwRWwH14jPp6aN1flNca6AA==",
1852 | "dev": true,
1853 | "requires": {}
1854 | },
1855 | "eslint-scope": {
1856 | "version": "5.1.1",
1857 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1858 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1859 | "dev": true,
1860 | "requires": {
1861 | "esrecurse": "^4.3.0",
1862 | "estraverse": "^4.1.1"
1863 | }
1864 | },
1865 | "eslint-utils": {
1866 | "version": "2.1.0",
1867 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
1868 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
1869 | "dev": true,
1870 | "requires": {
1871 | "eslint-visitor-keys": "^1.1.0"
1872 | },
1873 | "dependencies": {
1874 | "eslint-visitor-keys": {
1875 | "version": "1.3.0",
1876 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
1877 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
1878 | "dev": true
1879 | }
1880 | }
1881 | },
1882 | "eslint-visitor-keys": {
1883 | "version": "2.1.0",
1884 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
1885 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
1886 | "dev": true
1887 | },
1888 | "espree": {
1889 | "version": "7.3.1",
1890 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
1891 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
1892 | "dev": true,
1893 | "requires": {
1894 | "acorn": "^7.4.0",
1895 | "acorn-jsx": "^5.3.1",
1896 | "eslint-visitor-keys": "^1.3.0"
1897 | },
1898 | "dependencies": {
1899 | "acorn": {
1900 | "version": "7.4.1",
1901 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1902 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1903 | "dev": true
1904 | },
1905 | "eslint-visitor-keys": {
1906 | "version": "1.3.0",
1907 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
1908 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
1909 | "dev": true
1910 | }
1911 | }
1912 | },
1913 | "esprima": {
1914 | "version": "4.0.1",
1915 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1916 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1917 | "dev": true
1918 | },
1919 | "esquery": {
1920 | "version": "1.4.0",
1921 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
1922 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
1923 | "dev": true,
1924 | "requires": {
1925 | "estraverse": "^5.1.0"
1926 | },
1927 | "dependencies": {
1928 | "estraverse": {
1929 | "version": "5.3.0",
1930 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1931 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1932 | "dev": true
1933 | }
1934 | }
1935 | },
1936 | "esrecurse": {
1937 | "version": "4.3.0",
1938 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1939 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1940 | "dev": true,
1941 | "requires": {
1942 | "estraverse": "^5.2.0"
1943 | },
1944 | "dependencies": {
1945 | "estraverse": {
1946 | "version": "5.3.0",
1947 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1948 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1949 | "dev": true
1950 | }
1951 | }
1952 | },
1953 | "estraverse": {
1954 | "version": "4.3.0",
1955 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1956 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1957 | "dev": true
1958 | },
1959 | "esutils": {
1960 | "version": "2.0.3",
1961 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1962 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1963 | "dev": true
1964 | },
1965 | "ev-emitter": {
1966 | "version": "2.1.2",
1967 | "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz",
1968 | "integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q=="
1969 | },
1970 | "fast-deep-equal": {
1971 | "version": "3.1.3",
1972 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1973 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1974 | "dev": true
1975 | },
1976 | "fast-json-stable-stringify": {
1977 | "version": "2.1.0",
1978 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1979 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1980 | "dev": true
1981 | },
1982 | "fast-levenshtein": {
1983 | "version": "2.0.6",
1984 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1985 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
1986 | "dev": true
1987 | },
1988 | "file-entry-cache": {
1989 | "version": "6.0.1",
1990 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1991 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1992 | "dev": true,
1993 | "requires": {
1994 | "flat-cache": "^3.0.4"
1995 | }
1996 | },
1997 | "flat-cache": {
1998 | "version": "3.0.4",
1999 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
2000 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
2001 | "dev": true,
2002 | "requires": {
2003 | "flatted": "^3.1.0",
2004 | "rimraf": "^3.0.2"
2005 | }
2006 | },
2007 | "flatted": {
2008 | "version": "3.2.5",
2009 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
2010 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
2011 | "dev": true
2012 | },
2013 | "fs.realpath": {
2014 | "version": "1.0.0",
2015 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2016 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
2017 | "dev": true
2018 | },
2019 | "functional-red-black-tree": {
2020 | "version": "1.0.1",
2021 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
2022 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
2023 | "dev": true
2024 | },
2025 | "glob": {
2026 | "version": "7.2.0",
2027 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
2028 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
2029 | "dev": true,
2030 | "requires": {
2031 | "fs.realpath": "^1.0.0",
2032 | "inflight": "^1.0.4",
2033 | "inherits": "2",
2034 | "minimatch": "^3.0.4",
2035 | "once": "^1.3.0",
2036 | "path-is-absolute": "^1.0.0"
2037 | }
2038 | },
2039 | "glob-parent": {
2040 | "version": "5.1.2",
2041 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2042 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2043 | "dev": true,
2044 | "requires": {
2045 | "is-glob": "^4.0.1"
2046 | }
2047 | },
2048 | "globals": {
2049 | "version": "13.12.0",
2050 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
2051 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
2052 | "dev": true,
2053 | "requires": {
2054 | "type-fest": "^0.20.2"
2055 | }
2056 | },
2057 | "globalyzer": {
2058 | "version": "0.1.0",
2059 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
2060 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
2061 | "dev": true
2062 | },
2063 | "globrex": {
2064 | "version": "0.1.2",
2065 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
2066 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
2067 | "dev": true
2068 | },
2069 | "has-flag": {
2070 | "version": "3.0.0",
2071 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2072 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
2073 | "dev": true
2074 | },
2075 | "ignore": {
2076 | "version": "4.0.6",
2077 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
2078 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
2079 | "dev": true
2080 | },
2081 | "import-fresh": {
2082 | "version": "3.3.0",
2083 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2084 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2085 | "dev": true,
2086 | "requires": {
2087 | "parent-module": "^1.0.0",
2088 | "resolve-from": "^4.0.0"
2089 | }
2090 | },
2091 | "imurmurhash": {
2092 | "version": "0.1.4",
2093 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2094 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
2095 | "dev": true
2096 | },
2097 | "inflight": {
2098 | "version": "1.0.6",
2099 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2100 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2101 | "dev": true,
2102 | "requires": {
2103 | "once": "^1.3.0",
2104 | "wrappy": "1"
2105 | }
2106 | },
2107 | "inherits": {
2108 | "version": "2.0.4",
2109 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2110 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2111 | "dev": true
2112 | },
2113 | "is-extglob": {
2114 | "version": "2.1.1",
2115 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2116 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2117 | "dev": true
2118 | },
2119 | "is-fullwidth-code-point": {
2120 | "version": "3.0.0",
2121 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2122 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2123 | "dev": true
2124 | },
2125 | "is-glob": {
2126 | "version": "4.0.3",
2127 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2128 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2129 | "dev": true,
2130 | "requires": {
2131 | "is-extglob": "^2.1.1"
2132 | }
2133 | },
2134 | "isexe": {
2135 | "version": "2.0.0",
2136 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2137 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
2138 | "dev": true
2139 | },
2140 | "jquery": {
2141 | "version": "3.6.0",
2142 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
2143 | "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
2144 | "dev": true
2145 | },
2146 | "js-tokens": {
2147 | "version": "4.0.0",
2148 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2149 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
2150 | "dev": true
2151 | },
2152 | "js-yaml": {
2153 | "version": "3.14.1",
2154 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
2155 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
2156 | "dev": true,
2157 | "requires": {
2158 | "argparse": "^1.0.7",
2159 | "esprima": "^4.0.0"
2160 | }
2161 | },
2162 | "json-schema-traverse": {
2163 | "version": "0.4.1",
2164 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2165 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2166 | "dev": true
2167 | },
2168 | "json-stable-stringify-without-jsonify": {
2169 | "version": "1.0.1",
2170 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2171 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
2172 | "dev": true
2173 | },
2174 | "levn": {
2175 | "version": "0.4.1",
2176 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2177 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2178 | "dev": true,
2179 | "requires": {
2180 | "prelude-ls": "^1.2.1",
2181 | "type-check": "~0.4.0"
2182 | }
2183 | },
2184 | "lodash.merge": {
2185 | "version": "4.6.2",
2186 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2187 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2188 | "dev": true
2189 | },
2190 | "lodash.truncate": {
2191 | "version": "4.4.2",
2192 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
2193 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
2194 | "dev": true
2195 | },
2196 | "lru-cache": {
2197 | "version": "6.0.0",
2198 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2199 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2200 | "dev": true,
2201 | "requires": {
2202 | "yallist": "^4.0.0"
2203 | }
2204 | },
2205 | "minimatch": {
2206 | "version": "3.0.4",
2207 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2208 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2209 | "dev": true,
2210 | "requires": {
2211 | "brace-expansion": "^1.1.7"
2212 | }
2213 | },
2214 | "ms": {
2215 | "version": "2.1.2",
2216 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2217 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2218 | "dev": true
2219 | },
2220 | "natural-compare": {
2221 | "version": "1.4.0",
2222 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2223 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
2224 | "dev": true
2225 | },
2226 | "node-watch": {
2227 | "version": "0.7.2",
2228 | "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.2.tgz",
2229 | "integrity": "sha512-g53VjSARRv1JdST0LZRIg8RiuLr1TaBbVPsVvxh0/0Ymvi0xYUjDuoqQQAWtHJQUXhiShowPT/aXKNeHBcyQsw==",
2230 | "dev": true
2231 | },
2232 | "once": {
2233 | "version": "1.4.0",
2234 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2235 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2236 | "dev": true,
2237 | "requires": {
2238 | "wrappy": "1"
2239 | }
2240 | },
2241 | "optionator": {
2242 | "version": "0.9.1",
2243 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2244 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2245 | "dev": true,
2246 | "requires": {
2247 | "deep-is": "^0.1.3",
2248 | "fast-levenshtein": "^2.0.6",
2249 | "levn": "^0.4.1",
2250 | "prelude-ls": "^1.2.1",
2251 | "type-check": "^0.4.0",
2252 | "word-wrap": "^1.2.3"
2253 | }
2254 | },
2255 | "parent-module": {
2256 | "version": "1.0.1",
2257 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2258 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2259 | "dev": true,
2260 | "requires": {
2261 | "callsites": "^3.0.0"
2262 | }
2263 | },
2264 | "path-is-absolute": {
2265 | "version": "1.0.1",
2266 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2267 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2268 | "dev": true
2269 | },
2270 | "path-key": {
2271 | "version": "3.1.1",
2272 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2273 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2274 | "dev": true
2275 | },
2276 | "prelude-ls": {
2277 | "version": "1.2.1",
2278 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2279 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2280 | "dev": true
2281 | },
2282 | "progress": {
2283 | "version": "2.0.3",
2284 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2285 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2286 | "dev": true
2287 | },
2288 | "punycode": {
2289 | "version": "2.1.1",
2290 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2291 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2292 | "dev": true
2293 | },
2294 | "qunit": {
2295 | "version": "2.17.2",
2296 | "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.17.2.tgz",
2297 | "integrity": "sha512-17isVvuOmALzsPjiV7wFg/6O5vJYXBrQZPwocfQSSh0I/rXvfX7bKMFJ4GMVW3U4P8r2mBeUy8EAngti4QD2Vw==",
2298 | "dev": true,
2299 | "requires": {
2300 | "commander": "7.2.0",
2301 | "node-watch": "0.7.2",
2302 | "tiny-glob": "0.2.9"
2303 | }
2304 | },
2305 | "regexpp": {
2306 | "version": "3.2.0",
2307 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
2308 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
2309 | "dev": true
2310 | },
2311 | "require-from-string": {
2312 | "version": "2.0.2",
2313 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
2314 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
2315 | "dev": true
2316 | },
2317 | "resolve-from": {
2318 | "version": "4.0.0",
2319 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2320 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2321 | "dev": true
2322 | },
2323 | "rimraf": {
2324 | "version": "3.0.2",
2325 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2326 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2327 | "dev": true,
2328 | "requires": {
2329 | "glob": "^7.1.3"
2330 | }
2331 | },
2332 | "semver": {
2333 | "version": "7.3.5",
2334 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
2335 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
2336 | "dev": true,
2337 | "requires": {
2338 | "lru-cache": "^6.0.0"
2339 | }
2340 | },
2341 | "shebang-command": {
2342 | "version": "2.0.0",
2343 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2344 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2345 | "dev": true,
2346 | "requires": {
2347 | "shebang-regex": "^3.0.0"
2348 | }
2349 | },
2350 | "shebang-regex": {
2351 | "version": "3.0.0",
2352 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2353 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2354 | "dev": true
2355 | },
2356 | "slice-ansi": {
2357 | "version": "4.0.0",
2358 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
2359 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
2360 | "dev": true,
2361 | "requires": {
2362 | "ansi-styles": "^4.0.0",
2363 | "astral-regex": "^2.0.0",
2364 | "is-fullwidth-code-point": "^3.0.0"
2365 | },
2366 | "dependencies": {
2367 | "ansi-styles": {
2368 | "version": "4.3.0",
2369 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2370 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2371 | "dev": true,
2372 | "requires": {
2373 | "color-convert": "^2.0.1"
2374 | }
2375 | },
2376 | "color-convert": {
2377 | "version": "2.0.1",
2378 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2379 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2380 | "dev": true,
2381 | "requires": {
2382 | "color-name": "~1.1.4"
2383 | }
2384 | },
2385 | "color-name": {
2386 | "version": "1.1.4",
2387 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2388 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2389 | "dev": true
2390 | }
2391 | }
2392 | },
2393 | "source-map": {
2394 | "version": "0.7.3",
2395 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
2396 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
2397 | "dev": true
2398 | },
2399 | "source-map-support": {
2400 | "version": "0.5.21",
2401 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
2402 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
2403 | "dev": true,
2404 | "requires": {
2405 | "buffer-from": "^1.0.0",
2406 | "source-map": "^0.6.0"
2407 | },
2408 | "dependencies": {
2409 | "source-map": {
2410 | "version": "0.6.1",
2411 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2412 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2413 | "dev": true
2414 | }
2415 | }
2416 | },
2417 | "sprintf-js": {
2418 | "version": "1.0.3",
2419 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2420 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2421 | "dev": true
2422 | },
2423 | "string-width": {
2424 | "version": "4.2.3",
2425 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2426 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2427 | "dev": true,
2428 | "requires": {
2429 | "emoji-regex": "^8.0.0",
2430 | "is-fullwidth-code-point": "^3.0.0",
2431 | "strip-ansi": "^6.0.1"
2432 | },
2433 | "dependencies": {
2434 | "ansi-regex": {
2435 | "version": "5.0.1",
2436 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2437 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2438 | "dev": true
2439 | },
2440 | "strip-ansi": {
2441 | "version": "6.0.1",
2442 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2443 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2444 | "dev": true,
2445 | "requires": {
2446 | "ansi-regex": "^5.0.1"
2447 | }
2448 | }
2449 | }
2450 | },
2451 | "strip-json-comments": {
2452 | "version": "3.1.1",
2453 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2454 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2455 | "dev": true
2456 | },
2457 | "table": {
2458 | "version": "6.8.0",
2459 | "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
2460 | "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
2461 | "dev": true,
2462 | "requires": {
2463 | "ajv": "^8.0.1",
2464 | "lodash.truncate": "^4.4.2",
2465 | "slice-ansi": "^4.0.0",
2466 | "string-width": "^4.2.3",
2467 | "strip-ansi": "^6.0.1"
2468 | },
2469 | "dependencies": {
2470 | "ajv": {
2471 | "version": "8.9.0",
2472 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
2473 | "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
2474 | "dev": true,
2475 | "requires": {
2476 | "fast-deep-equal": "^3.1.1",
2477 | "json-schema-traverse": "^1.0.0",
2478 | "require-from-string": "^2.0.2",
2479 | "uri-js": "^4.2.2"
2480 | }
2481 | },
2482 | "ansi-regex": {
2483 | "version": "5.0.1",
2484 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2485 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2486 | "dev": true
2487 | },
2488 | "json-schema-traverse": {
2489 | "version": "1.0.0",
2490 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
2491 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
2492 | "dev": true
2493 | },
2494 | "strip-ansi": {
2495 | "version": "6.0.1",
2496 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2497 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2498 | "dev": true,
2499 | "requires": {
2500 | "ansi-regex": "^5.0.1"
2501 | }
2502 | }
2503 | }
2504 | },
2505 | "terser": {
2506 | "version": "5.10.0",
2507 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
2508 | "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
2509 | "dev": true,
2510 | "requires": {
2511 | "commander": "^2.20.0",
2512 | "source-map": "~0.7.2",
2513 | "source-map-support": "~0.5.20"
2514 | },
2515 | "dependencies": {
2516 | "commander": {
2517 | "version": "2.20.3",
2518 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
2519 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
2520 | "dev": true
2521 | }
2522 | }
2523 | },
2524 | "text-table": {
2525 | "version": "0.2.0",
2526 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2527 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2528 | "dev": true
2529 | },
2530 | "tiny-glob": {
2531 | "version": "0.2.9",
2532 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
2533 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
2534 | "dev": true,
2535 | "requires": {
2536 | "globalyzer": "0.1.0",
2537 | "globrex": "^0.1.2"
2538 | }
2539 | },
2540 | "type-check": {
2541 | "version": "0.4.0",
2542 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2543 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2544 | "dev": true,
2545 | "requires": {
2546 | "prelude-ls": "^1.2.1"
2547 | }
2548 | },
2549 | "type-fest": {
2550 | "version": "0.20.2",
2551 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
2552 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
2553 | "dev": true
2554 | },
2555 | "uri-js": {
2556 | "version": "4.4.1",
2557 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2558 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2559 | "dev": true,
2560 | "requires": {
2561 | "punycode": "^2.1.0"
2562 | }
2563 | },
2564 | "v8-compile-cache": {
2565 | "version": "2.3.0",
2566 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
2567 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
2568 | "dev": true
2569 | },
2570 | "which": {
2571 | "version": "2.0.2",
2572 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2573 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2574 | "dev": true,
2575 | "requires": {
2576 | "isexe": "^2.0.0"
2577 | }
2578 | },
2579 | "word-wrap": {
2580 | "version": "1.2.3",
2581 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2582 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2583 | "dev": true
2584 | },
2585 | "wrappy": {
2586 | "version": "1.0.2",
2587 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2588 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2589 | "dev": true
2590 | },
2591 | "yallist": {
2592 | "version": "4.0.0",
2593 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2594 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2595 | "dev": true
2596 | }
2597 | }
2598 | }
2599 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "imagesloaded",
3 | "version": "5.0.0",
4 | "description": "JavaScript is all like _You images done yet or what?_",
5 | "main": "imagesloaded.js",
6 | "files": [
7 | "imagesloaded*.js"
8 | ],
9 | "dependencies": {
10 | "ev-emitter": "^2.1.2"
11 | },
12 | "devDependencies": {
13 | "eslint": "^7.32.0",
14 | "eslint-plugin-metafizzy": "^1.2.1",
15 | "jquery": "^3.6.0",
16 | "qunit": "^2.17.2",
17 | "terser": "^5.10.0"
18 | },
19 | "scripts": {
20 | "test": "npm run lint",
21 | "lint": "npx eslint .",
22 | "dist": "node tasks/dist.js",
23 | "version": "node tasks/version.js && npm run dist && git add -A ."
24 | },
25 | "repository": {
26 | "type": "git",
27 | "url": "git://github.com/desandro/imagesloaded.git"
28 | },
29 | "keywords": [
30 | "images",
31 | "loaded",
32 | "ui",
33 | "dom",
34 | "jquery-plugin"
35 | ],
36 | "license": "MIT",
37 | "bugs": {
38 | "url": "https://github.com/desandro/imagesloaded/issues"
39 | },
40 | "homepage": "https://github.com/desandro/imagesloaded",
41 | "directories": {
42 | "test": "test"
43 | },
44 | "author": "David DeSandro"
45 | }
46 |
--------------------------------------------------------------------------------
/sandbox/background/css/background.css:
--------------------------------------------------------------------------------
1 | .box {
2 | width: 300px;
3 | height: 300px;
4 | margin: 0 20px 20px 0;
5 | border: 1px solid;
6 | display: inline-block;
7 | }
8 |
9 | .orange-tree {
10 | background: url('https://i.imgur.com/bwy74ok.jpg');
11 | background-size: cover;
12 | }
13 |
14 | .thunder-cloud {
15 | background: url('../../../test/img/thunder-cloud.jpg');
16 | background-size: contain;
17 | }
18 |
19 | .multi1 {
20 | background:
21 | url("https://i.imgur.com/ZAVN3.png"),
22 | url('https://i.imgur.com/6UdOxeB.png') bottom right,
23 | url(https://i.imgur.com/LkmcILl.jpg);
24 | background-size: cover;
25 | }
26 |
27 | .blue {
28 | background: #09F;
29 | }
--------------------------------------------------------------------------------
/sandbox/background/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | background
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | background
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/sandbox/picture.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | picture
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/sandbox/progress/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | progress
8 |
9 |
69 |
70 |
71 |
72 |
73 | progress
74 |
75 |
76 |
77 |
78 |
79 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/sandbox/progress/progress.js:
--------------------------------------------------------------------------------
1 | let progressElem, statusElem,
2 | supportsProgress,
3 | loadedImageCount, imageCount;
4 |
5 | let container = document.querySelector('#image-container');
6 | statusElem = document.querySelector('#status');
7 | progressElem = document.querySelector('progress');
8 |
9 | supportsProgress = progressElem &&
10 | // IE does not support progress
11 | progressElem.toString().indexOf('Unknown') === -1;
12 |
13 | document.querySelector('#add').onclick = function() {
14 | // add new images
15 | let fragment = getItemsFragment();
16 | container.insertBefore( fragment, container.firstChild );
17 | // use ImagesLoaded
18 | let imgLoad = imagesLoaded( container );
19 | imgLoad.on( 'progress', onProgress );
20 | imgLoad.on( 'always', onAlways );
21 | // reset progress counter
22 | imageCount = imgLoad.images.length;
23 | resetProgress();
24 | updateProgress( 0 );
25 | };
26 |
27 | // reset container
28 | document.querySelector('#reset').onclick = function() {
29 | empty( container );
30 | };
31 |
32 | // ----- set text helper ----- //
33 |
34 | let docElem = document.documentElement;
35 | let textSetter = docElem.textContent !== undefined ? 'textContent' : 'innerText';
36 |
37 | function setText( elem, value ) {
38 | elem[ textSetter ] = value;
39 | }
40 |
41 | function empty( elem ) {
42 | while ( elem.firstChild ) {
43 | elem.removeChild( elem.firstChild );
44 | }
45 | }
46 |
47 | // ----- ----- //
48 |
49 | // return doc fragment with
50 | function getItemsFragment() {
51 | let fragment = document.createDocumentFragment();
52 | for ( let i = 0; i < 7; i++ ) {
53 | let item = getImageItem();
54 | fragment.appendChild( item );
55 | }
56 | return fragment;
57 | }
58 |
59 | // return an with a
in it
60 | function getImageItem() {
61 | let item = document.createElement('li');
62 | item.className = 'is-loading';
63 | let img = document.createElement('img');
64 | let size = Math.random() * 3 + 1;
65 | let width = Math.random() * 110 + 100;
66 | width = Math.round( width * size );
67 | let height = Math.round( 140 * size );
68 | let rando = Math.ceil( Math.random() * 1000 );
69 | // 10% chance of broken image src
70 | // random parameter to prevent cached images
71 | img.src = rando < 100 ? `//foo/broken-${rando}.jpg` :
72 | // use picsum for great random images
73 | `https://picsum.photos/${width}/${height}/?random`;
74 | item.appendChild( img );
75 | return item;
76 | }
77 |
78 | // ----- ----- //
79 |
80 | function resetProgress() {
81 | statusElem.style.opacity = 1;
82 | loadedImageCount = 0;
83 | if ( supportsProgress ) {
84 | progressElem.setAttribute( 'max', imageCount );
85 | }
86 | }
87 |
88 | function updateProgress( value ) {
89 | if ( supportsProgress ) {
90 | progressElem.setAttribute( 'value', value );
91 | } else {
92 | // if you don't support progress elem
93 | setText( statusElem, value + ' / ' + imageCount );
94 | }
95 | }
96 |
97 | // triggered after each item is loaded
98 | function onProgress( imgLoad, image ) {
99 | // change class if the image is loaded or broken
100 | image.img.parentNode.className = image.isLoaded ? '' : 'is-broken';
101 | // update progress element
102 | loadedImageCount++;
103 | updateProgress( loadedImageCount );
104 | }
105 |
106 | // hide status when done
107 | function onAlways() {
108 | statusElem.style.opacity = 0;
109 | }
110 |
--------------------------------------------------------------------------------
/tasks/dist.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const { execSync } = require('child_process');
3 | const { minify } = require('terser');
4 |
5 | const indexPath = 'imagesloaded.js';
6 | const distPath = 'imagesloaded.pkgd.js';
7 | const distMinPath = 'imagesloaded.pkgd.min.js';
8 |
9 | let indexContent = fs.readFileSync( `./${indexPath}`, 'utf8' );
10 |
11 | let paths = [
12 | 'node_modules/ev-emitter/ev-emitter.js',
13 | 'imagesloaded.js',
14 | ];
15 |
16 | // concatenate files
17 | execSync(`cat ${paths.join(' ')} > ${distPath}`);
18 |
19 | // add banner
20 | let banner = indexContent.split(' */')[0] + ' */\n\n';
21 | banner = banner.replace( 'imagesLoaded', 'imagesLoaded PACKAGED' );
22 | let distJsContent = fs.readFileSync( distPath, 'utf8' );
23 | distJsContent = banner + distJsContent;
24 | fs.writeFileSync( distPath, distJsContent );
25 |
26 | // minify
27 | ( async function() {
28 | let { code } = await minify( distJsContent, { mangle: true } );
29 | fs.writeFileSync( distMinPath, code );
30 | } )();
31 |
--------------------------------------------------------------------------------
/tasks/version.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const version = require('../package.json').version;
3 |
4 | const file = 'imagesloaded.js';
5 |
6 | let src = fs.readFileSync( file, 'utf8' );
7 | src = src.replace( /imagesLoaded v\d+\.\d+\.\d+/, `imagesLoaded v${version}` );
8 | fs.writeFileSync( file, src, 'utf8' );
9 |
--------------------------------------------------------------------------------
/test/css/tests.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: sans-serif;
3 | }
4 |
5 | img {
6 | display: inline-block;
7 | max-width: 240px;
8 | }
9 |
10 | #qunit {
11 | max-width: 600px;
12 | right: 0;
13 | left: auto;
14 | }
15 |
16 | /* ---- backgrounds ---- */
17 |
18 | .bg-box {
19 | width: 240px;
20 | height: 240px;
21 | margin: 0 20px 20px 0;
22 | border: 1px solid;
23 | display: inline-block;
24 | }
25 |
26 | .bg-box.tulip {
27 | background: url('https://i.imgur.com/9xYjgCk.jpg');
28 | background-size: cover;
29 | }
30 |
31 | .bg-box.thunder-cloud {
32 | background: url('../img/thunder-cloud.jpg');
33 | background-size: contain;
34 | }
35 |
36 | .bg-box.multi {
37 | background:
38 | url("https://i.imgur.com/ZAVN3.png"),
39 | url('https://i.imgur.com/6UdOxeB.png') bottom right,
40 | url(https://picsum.photos/601/401/?random);
41 | background-size: cover;
42 | }
43 |
44 | .bg-box.blue {
45 | background: #09F;
46 | }
47 |
48 | .bg-box.gulls {
49 | background-image: url('https://i.imgur.com/qKhkOKC.jpg');
50 | background-size: cover;
51 | }
52 |
--------------------------------------------------------------------------------
/test/img/blue-shell.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desandro/imagesloaded/92de29b5a9a416bebeb6bb58a1882af8c5f76931/test/img/blue-shell.jpg
--------------------------------------------------------------------------------
/test/img/bowser-jr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desandro/imagesloaded/92de29b5a9a416bebeb6bb58a1882af8c5f76931/test/img/bowser-jr.jpg
--------------------------------------------------------------------------------
/test/img/thunder-cloud.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desandro/imagesloaded/92de29b5a9a416bebeb6bb58a1882af8c5f76931/test/img/thunder-cloud.jpg
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | imagesLoaded tests
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | imagesLoaded tests
35 |
36 |
37 |
38 | Basics
39 |
40 |
41 |

42 |

43 |

44 |

45 |

46 |
47 |
48 |
49 |
50 | Locals
51 |
52 |
58 |
59 | Data URI
60 |
61 |
62 |

63 |

64 |
65 |
66 | append
67 |
68 |
69 |
70 | no images
71 |
72 |
73 |
74 | jQuery success
75 |
76 |
81 |
82 | jQuery fail
83 |
84 |
85 |

86 |

87 |

88 |

89 |

90 |
91 |
92 | background
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |

101 |

102 |
103 |
104 |
105 | picture
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | srcset
126 |
127 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/test/unit/append.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'append', function( assert ) {
2 | let imgUrls = [
3 | 'https://i.imgur.com/bwy74ok.jpg',
4 | 'https://i.imgur.com/bAZWoqx.jpg',
5 | 'https://i.imgur.com/PgmEBSB.jpg',
6 | 'https://i.imgur.com/aboaFoB.jpg',
7 | 'https://i.imgur.com/LkmcILl.jpg',
8 | 'https://i.imgur.com/q9zO6tw.jpg',
9 | ];
10 |
11 | // create images
12 | let fragment = document.createDocumentFragment();
13 | for ( let i = 0, len = imgUrls.length; i < len; i++ ) {
14 | let img = document.createElement('img');
15 | img.src = imgUrls[i];
16 | fragment.appendChild( img );
17 | }
18 |
19 | let elem = document.querySelector('#append');
20 | elem.appendChild( fragment );
21 | let done = assert.async();
22 |
23 | imagesLoaded( elem, { debug: false } ).on( 'always', function() {
24 | assert.ok('appended images loaded');
25 | done();
26 | } );
27 |
28 | } );
29 |
--------------------------------------------------------------------------------
/test/unit/background.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'background', function( assert ) {
2 | // from Modernizr
3 | let supportsMultiBGs = ( function() {
4 | let style = document.createElement('a').style;
5 | style.cssText = 'background:url(https://),url(https://),red url(https://)';
6 | return ( /(url\s*\(.*?){3}/ ).test( style.background );
7 | } )();
8 |
9 | let multiBGCount = supportsMultiBGs ? 3 : 0;
10 | let done = assert.async( 14 + multiBGCount );
11 |
12 | let imgLoad0 = imagesLoaded( '#background .tulip', { background: true }, function() {
13 | assert.ok( true, 'callback triggered on .orange-tree' );
14 | done();
15 | } );
16 | assert.equal( imgLoad0.images.length, 1, '1 image on .images' );
17 |
18 | imgLoad0.on( 'progress', function( instance, image, element ) {
19 | assert.ok( element.nodeName === 'DIV', 'progress; element is div' );
20 | assert.ok( image.isLoaded, 'progress; image.isLoaded' );
21 | done();
22 | } );
23 |
24 | let imgLoad1 = imagesLoaded( '#background .thunder-cloud', { background: true },
25 | function() {
26 | assert.ok( true, 'callback triggered on .thunder-cloud' );
27 | done();
28 | } );
29 | assert.equal( imgLoad1.images.length, 1, '1 image on .images' );
30 |
31 | // multiple backgrounds
32 | let imgLoad2 = imagesLoaded( '#background .multi', { background: true }, function() {
33 | assert.ok( true, 'callback triggered on .multi' );
34 | done();
35 | } );
36 | assert.equal( imgLoad2.images.length, multiBGCount,
37 | 'correct multiple BG count on .images' );
38 |
39 | // multiple elements
40 | let imgLoad3 = imagesLoaded( '#background .bg-box', { background: true }, function() {
41 | assert.ok( true, 'callback triggered on .bg-box' );
42 | let count = 5 + multiBGCount;
43 | assert.equal( imgLoad3.images.length, count, count + ' images on .bg-box' );
44 | done();
45 | } );
46 |
47 | imgLoad3.on( 'progress', function( instance, image /* , element */) {
48 | assert.ok( true, 'progress on .bg-box; ' + image.img.src );
49 | assert.equal( image.isLoaded, true, 'image.isLoaded == true' );
50 | done();
51 | } );
52 |
53 | // background and
children
54 | let imgLoad4 = imagesLoaded( '#background .gulls', { background: true } );
55 | assert.equal( imgLoad4.images.length, 3, '3 images: 1 background and 2
' );
56 |
57 | imgLoad4.on( 'progress', function( instance, image ) {
58 | assert.equal( image.isLoaded, true, 'image is loaded' );
59 | done();
60 | } );
61 |
62 | // child background selector
63 | let imgLoad5 = imagesLoaded( '#background', { background: '.bg-box' }, function() {
64 | let count = 5 + multiBGCount;
65 | assert.equal( imgLoad5.images.length, count,
66 | count + ' images on .bg-box, with {background: .bg-box}' );
67 | done();
68 | } );
69 |
70 | } );
71 |
--------------------------------------------------------------------------------
/test/unit/basics.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'basics', function( assert ) {
2 | let elem = document.querySelector('#basics');
3 | let images = elem.querySelectorAll('img');
4 | let done = assert.async( 3 + images.length );
5 |
6 | let imgLoader = new imagesLoaded( elem, function( obj ) {
7 | assert.ok( true, 'callback function triggered' );
8 | assert.equal( imgLoader, obj, 'callback argument and instance match' );
9 | done();
10 | } );
11 | imgLoader.on( 'done', function() {
12 | assert.ok( true, 'done event triggered' );
13 | done();
14 | } );
15 | imgLoader.on( 'always', function() {
16 | assert.ok( true, 'always event triggered' );
17 | done();
18 | } );
19 |
20 | imgLoader.on( 'progress', function( loader, image ) {
21 | assert.ok( image.isLoaded, 'image is loaded' );
22 | done();
23 | } );
24 |
25 | } );
26 |
--------------------------------------------------------------------------------
/test/unit/data-uri.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'data-uri', function( assert ) {
2 | let done = assert.async();
3 | imagesLoaded( '#data-uri', { debug: false } ).on( 'done', function( obj ) {
4 | assert.ok( true, 'data-uri images loaded' );
5 | assert.equal( obj.images.length, 2, 'instance has 2 images' );
6 | done();
7 | } );
8 | } );
9 |
--------------------------------------------------------------------------------
/test/unit/jquery-fail.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'jquery fail', function( assert ) {
2 | let $ = window.jQuery;
3 | let $images = $('#jquery-fail img');
4 | let done = assert.async( 3 + $images.length );
5 |
6 | $('#jquery-fail').imagesLoaded( function( instance ) {
7 | assert.ok( true, 'callback triggered' );
8 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
9 | done();
10 | } )
11 | .fail( function( instance ) {
12 | assert.ok( true, 'fail triggered' );
13 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
14 | done();
15 | } )
16 | .always( function( instance ) {
17 | assert.ok( true, 'always triggered' );
18 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
19 | done();
20 | } )
21 | .progress( function( /* instance, image */) {
22 | assert.ok( true, 'progress trigged' );
23 | done();
24 | } );
25 |
26 | } );
27 |
--------------------------------------------------------------------------------
/test/unit/jquery-success.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'jquery success', function( assert ) {
2 | let $ = window.jQuery;
3 | let done = assert.async( 6 );
4 |
5 | $('#jquery-success').imagesLoaded( function( instance ) {
6 | assert.ok( true, 'callback triggered' );
7 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
8 | done();
9 | } )
10 | .done( function( instance ) {
11 | assert.ok( true, 'done triggered' );
12 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
13 | done();
14 | } )
15 | .always( function( instance ) {
16 | assert.ok( true, 'always triggered' );
17 | assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' );
18 | done();
19 | } )
20 | .progress( function( instance, image ) {
21 | assert.ok( image.isLoaded, 'progress trigged, image is loaded' );
22 | done();
23 | } );
24 |
25 | } );
26 |
--------------------------------------------------------------------------------
/test/unit/local-files.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'local files', function( assert ) {
2 | let elem = document.querySelector('#locals');
3 | let done = assert.async( 6 );
4 |
5 | let imgLoader = new imagesLoaded( elem, function( obj ) {
6 | assert.ok( true, 'callback function triggered' );
7 | assert.equal( imgLoader, obj, 'callback argument and instance match' );
8 | done();
9 | } );
10 | imgLoader.on( 'fail', function() {
11 | assert.ok( true, 'fail event triggered' );
12 | done();
13 | } );
14 | imgLoader.on( 'always', function() {
15 | assert.ok( true, 'always event triggered' );
16 | done();
17 | } );
18 |
19 | imgLoader.on( 'progress', function( loader, image ) {
20 | assert.ok( true, 'image progressed' );
21 | if ( image.img.src.indexOf('img/not-there.jpg') !== -1 ) {
22 | assert.ok( !image.isLoaded, 'thunder cloud is not loaded' );
23 | } else {
24 | assert.ok( image.isLoaded, 'image is loaded' );
25 | }
26 | done();
27 | } );
28 |
29 | } );
30 |
--------------------------------------------------------------------------------
/test/unit/no-images.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'no images', function( assert ) {
2 | let elem = document.querySelector('#no-images');
3 | let done = assert.async();
4 | imagesLoaded( elem, function() {
5 | assert.ok( true, 'triggered with no images' );
6 | done();
7 | } );
8 |
9 | } );
10 |
--------------------------------------------------------------------------------
/test/unit/non-element.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'dismiss non-element nodes', function( assert ) {
2 | let $ = window.jQuery;
3 | let done = assert.async( 2 );
4 |
5 | $( '
' +
6 | '
' )
7 | .imagesLoaded( function() {
8 | assert.ok( true, 'elements from jQuery string ok' );
9 | done();
10 | } );
11 |
12 | // test fragment
13 | let frag = document.createDocumentFragment();
14 | let img = new Image();
15 | img.src = 'https://picsum.photos/403/303/?random';
16 | frag.appendChild( img );
17 | let imgLoad = imagesLoaded( frag, function() {
18 | assert.ok( true, 'document fragment ok' );
19 | assert.equal( imgLoad.images.length, 1, '1 image found' );
20 | done();
21 | } );
22 |
23 | } );
24 |
--------------------------------------------------------------------------------
/test/unit/picture.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'picture', function( assert ) {
2 |
3 | let done = assert.async( 4 );
4 |
5 | let imgLoad0 = imagesLoaded( '#picture-list', function() {
6 | assert.ok( true, 'callback triggered on #picture-list' );
7 | done();
8 | } );
9 | assert.equal( imgLoad0.images.length, 3, '3 images on #picture-list' );
10 |
11 | imgLoad0.on( 'progress', function( instance, image, element ) {
12 | assert.ok( element.nodeName === 'PICTURE', 'progress; element is picture' );
13 | assert.ok( image.isLoaded, 'progress; image.isLoaded' );
14 | done();
15 | } );
16 |
17 | } );
18 |
--------------------------------------------------------------------------------
/test/unit/selector-string.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'selector string', function( assert ) {
2 | let images = document.querySelectorAll('#basics img');
3 | let done = assert.async();
4 | let imgLoad = imagesLoaded( '#basics', { debug: true } )
5 | .on( 'done', function( obj ) {
6 | assert.ok( true, 'selector string worked' );
7 | assert.ok( obj.images, 'argument has images' );
8 | assert.equal( obj.images.length, images.length, 'images.length matches' );
9 | done();
10 | } );
11 | assert.ok( imgLoad.options.debug, 'debug option set' );
12 | } );
13 |
--------------------------------------------------------------------------------
/test/unit/single-element.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'single element', function( assert ) {
2 | let elem = document.querySelector('#mario-with-shell');
3 | let done = assert.async();
4 | imagesLoaded( elem ).on( 'done', function( obj ) {
5 | assert.ok( true, 'single element worked' );
6 | assert.ok( obj.images, 'argument has images' );
7 | assert.equal( obj.images.length, 1, 'images.length = 1' );
8 | done();
9 | } );
10 | } );
11 |
--------------------------------------------------------------------------------
/test/unit/srcset.js:
--------------------------------------------------------------------------------
1 | QUnit.test( 'srcset', function( assert ) {
2 |
3 | let done = assert.async( 4 );
4 |
5 | let imgLoad0 = imagesLoaded( '#srcset', function() {
6 | assert.ok( true, 'callback triggered on #srcset' );
7 | done();
8 | } );
9 | assert.equal( imgLoad0.images.length, 3, '3 images on #srcset' );
10 |
11 | imgLoad0.on( 'progress', function( instance, image, element ) {
12 | assert.ok( element.nodeName === 'IMG', 'progress; element is img' );
13 | assert.ok( image.isLoaded, 'progress; image.isLoaded' );
14 | done();
15 | } );
16 |
17 | } );
18 |
--------------------------------------------------------------------------------