diff --git a/.gitignore b/.gitignore index 2725c53..5dcd022 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ +/.idea node_modules/ /coverage -/.idea /build /travis-ci /gh-pages -.work/ +/.work !/bin +.eslintcache diff --git a/__tests__/functions.js b/__tests__/functions.js index 3feb558..7339170 100644 --- a/__tests__/functions.js +++ b/__tests__/functions.js @@ -1,228 +1,228 @@ -/* eslint-disable no-magic-numbers */ -import { reset, create, isStatic, getCss, refresh } from '../src/functions'; -import { INVIEW_EVENT, RESET_KEYS, ZERO_SEC } from '../src/constants'; - -const cssValue = Object.assign( ...RESET_KEYS.map( ( key, index ) => ( { [ key ]: index } ) ) ); - -describe( 'reset', () => { - it( 'should not reset', () => { - const attr = jest.fn( () => false ); - const target = { - attr: attr, - }; - reset( target ); - - expect( attr ).toBeCalled(); - } ); - - it( 'should reset', () => { - const attr = jest.fn( ( key, value ) => { - expect( value === undefined || value === false ).toBeTruthy(); - return true; - } ); - const off = jest.fn(); - const target = { - attr: attr, - off: off, - 0: { - resetValues: false, - }, - }; - reset( target ); - - expect( attr ).toBeCalledTimes( 2 ); - expect( off ).toBeCalled(); - } ); - - it( 'should reset', () => { - const css = jest.fn( ( key, value ) => { - expect( cssValue ).toHaveProperty( key ); - expect( value ).toBe( cssValue[ key ] ); - } ); - const target = { - attr: () => true, - off: () => true, - css: css, - 0: { - resetValues: cssValue, - }, - }; - reset( target ); - - RESET_KEYS.forEach( key => { - expect( target[ 0 ] ).not.toHaveProperty( key ); - } ); - expect( css ).toBeCalled(); - } ); -} ); - -describe( 'create', () => { - const test = ( options, check ) => { - const off = jest.fn(); - const trigger = jest.fn(); - const on = jest.fn( ( event, callback ) => { - expect( event ).toBe( INVIEW_EVENT ); - callback( {}, true ); - callback( {}, false ); - } ); - const data = jest.fn( () => ( { - on: on, - } ) ); - const stopCss = jest.fn(); - const stop = jest.fn( () => ( { - css: stopCss, - } ) ); - const css = () => ( { - attr: () => { - }, - } ); - - create( { - 0: {}, - css: css, - data: data, - stop: stop, - off: off, - trigger: trigger, - }, options ); - - expect( data ).toBeCalled(); - expect( on ).toBeCalled(); - expect( stop ).toBeCalled(); - expect( stopCss ).toBeCalled(); - - check( off, trigger ); - }; - - it( 'should create', () => { - test( { - stripe: false, - repeat: false, - cssFilter: () => ( {} ), - }, ( off, trigger ) => { - expect( off ).toBeCalled(); - expect( trigger ).not.toBeCalled(); - } ); - } ); - - it( 'should create', () => { - test( { - stripe: false, - repeat: true, - cssFilter: () => ( {} ), - }, ( off, trigger ) => { - expect( off ).not.toBeCalled(); - expect( trigger ).toBeCalled(); - } ); - } ); -} ); - -describe( 'isStatic', () => { - it( 'should true', () => { - expect( isStatic( { stripe: true } ) ).toBeTruthy(); - expect( isStatic( { stripe: false, delay: ZERO_SEC, duration: ZERO_SEC } ) ).toBeTruthy(); - } ); - - it( 'should false', () => { - expect( isStatic( {} ) ).toBeFalsy(); - expect( isStatic( { stripe: false, delay: ZERO_SEC, duration: '.6s' } ) ).toBeFalsy(); - } ); -} ); - -describe( 'getCss', () => { - it( 'should get marker css', () => { - const css = getCss( { - stripe: false, - 'padding_bottom': 'a', - 'font_weight': 'b', - thickness: 'c', - color: 'd', - cssFilter: css => css, - } ); - expect( css ).toHaveProperty( 'display' ); - expect( css ).toHaveProperty( 'background-position' ); - expect( css ).toHaveProperty( 'padding-bottom' ); - expect( css ).toHaveProperty( 'font-weight' ); - expect( css ).toHaveProperty( 'background-size' ); - expect( css ).toHaveProperty( 'background-repeat' ); - expect( css ).toHaveProperty( 'background-image' ); - expect( css[ 'display' ] ).toBe( 'inline' ); - expect( css[ 'background-position' ] ).toBe( 'left 0 center' ); - expect( css[ 'padding-bottom' ] ).toBe( 'a' ); - expect( css[ 'font-weight' ] ).toBe( 'b' ); - expect( css[ 'background-size' ] ).toBe( '200% c' ); - expect( css[ 'background-repeat' ] ).toBe( 'repeat-x' ); - expect( css[ 'background-image' ] ).toBe( 'linear-gradient(to right, rgba(255,255,255,0) 50%, d 50%)' ); - } ); - - it( 'should get marker css', () => { - const css = getCss( { - stripe: false, - delay: ZERO_SEC, - duration: ZERO_SEC, - 'padding_bottom': 'a', - cssFilter: css => css, - } ); - expect( css ).toHaveProperty( 'background-position' ); - expect( css[ 'background-position' ] ).toBe( 'left -100% center' ); - } ); - - it( 'should get stripe css', () => { - const cssFilter = jest.fn( css => { - Object.keys( css ).forEach( key => css[ key ] += '-test' ); - return css; - } ); - const css = getCss( { - stripe: true, - 'padding_bottom': 'a', - thickness: 'b', - color: 'c', - 'stripe_thickness': 3, - cssFilter: cssFilter, - } ); - - expect( css ).toHaveProperty( 'display' ); - expect( css ).toHaveProperty( 'background-position' ); - expect( css ).toHaveProperty( 'padding-bottom' ); - expect( css ).toHaveProperty( 'background-size' ); - expect( css ).toHaveProperty( 'background-repeat' ); - expect( css ).toHaveProperty( 'background-image' ); - expect( css[ 'display' ] ).toBe( 'inline-test' ); - expect( css[ 'background-position' ] ).toBe( 'left 0 center-test' ); - expect( css[ 'padding-bottom' ] ).toBe( 'a-test' ); - expect( css[ 'background-size' ] ).toBe( '100% b-test' ); - expect( css[ 'background-repeat' ] ).toBe( 'no-repeat-test' ); - expect( css[ 'background-image' ] ).toBe( 'repeating-linear-gradient(-45deg, c, c 3px, transparent 3px, transparent 6px)-test' ); - expect( cssFilter ).toBeCalled(); - } ); -} ); - -describe( 'refresh', () => { - it( 'should refresh', () => { - const off = jest.fn(); - const attr = jest.fn(); - const css = jest.fn( key => { - if ( typeof key === 'object' ) { - return { attr: attr }; - } - return cssValue[ key ]; - } ); - const target = { - off: off, - css: css, - attr: () => false, - 0: {}, - }; - refresh( target, { - stripe: true, - cssFilter: css => css, - } ); - - expect( off ).toBeCalled(); - expect( attr ).toBeCalled(); - expect( target[ 0 ] ).toHaveProperty( 'resetValues' ); - RESET_KEYS.forEach( ( key, index ) => { - expect( target[ 0 ].resetValues[ key ] ).toBe( index ); - } ); - } ); -} ); +/* eslint-disable no-magic-numbers */ +import { reset, create, isStatic, getCss, refresh } from '../src/functions'; +import { INVIEW_EVENT, RESET_KEYS, ZERO_SEC } from '../src/constants'; + +const cssValue = Object.assign(...RESET_KEYS.map((key, index) => ({ [ key ]: index }))); + +describe('reset', () => { + it('should not reset', () => { + const attr = jest.fn(() => false); + const target = { + attr: attr, + }; + reset(target); + + expect(attr).toBeCalled(); + }); + + it('should reset', () => { + const attr = jest.fn((key, value) => { + expect(value === undefined || value === false).toBeTruthy(); + return true; + }); + const off = jest.fn(); + const target = { + attr: attr, + off: off, + 0: { + resetValues: false, + }, + }; + reset(target); + + expect(attr).toBeCalledTimes(2); + expect(off).toBeCalled(); + }); + + it('should reset', () => { + const css = jest.fn((key, value) => { + expect(cssValue).toHaveProperty(key); + expect(value).toBe(cssValue[ key ]); + }); + const target = { + attr: () => true, + off: () => true, + css: css, + 0: { + resetValues: cssValue, + }, + }; + reset(target); + + RESET_KEYS.forEach(key => { + expect(target[ 0 ]).not.toHaveProperty(key); + }); + expect(css).toBeCalled(); + }); +}); + +describe('create', () => { + const test = (options, check) => { + const off = jest.fn(); + const trigger = jest.fn(); + const on = jest.fn((event, callback) => { + expect(event).toBe(INVIEW_EVENT); + callback({}, true); + callback({}, false); + }); + const data = jest.fn(() => ({ + on: on, + })); + const stopCss = jest.fn(); + const stop = jest.fn(() => ({ + css: stopCss, + })); + const css = () => ({ + attr: () => { + }, + }); + + create({ + 0: {}, + css: css, + data: data, + stop: stop, + off: off, + trigger: trigger, + }, options); + + expect(data).toBeCalled(); + expect(on).toBeCalled(); + expect(stop).toBeCalled(); + expect(stopCss).toBeCalled(); + + check(off, trigger); + }; + + it('should create', () => { + test({ + stripe: false, + repeat: false, + cssFilter: () => ({}), + }, (off, trigger) => { + expect(off).toBeCalled(); + expect(trigger).not.toBeCalled(); + }); + }); + + it('should create', () => { + test({ + stripe: false, + repeat: true, + cssFilter: () => ({}), + }, (off, trigger) => { + expect(off).not.toBeCalled(); + expect(trigger).toBeCalled(); + }); + }); +}); + +describe('isStatic', () => { + it('should true', () => { + expect(isStatic({ stripe: true })).toBeTruthy(); + expect(isStatic({ stripe: false, delay: ZERO_SEC, duration: ZERO_SEC })).toBeTruthy(); + }); + + it('should false', () => { + expect(isStatic({})).toBeFalsy(); + expect(isStatic({ stripe: false, delay: ZERO_SEC, duration: '.6s' })).toBeFalsy(); + }); +}); + +describe('getCss', () => { + it('should get marker css', () => { + const css = getCss({ + stripe: false, + 'padding_bottom': 'a', + 'font_weight': 'b', + thickness: 'c', + color: 'd', + cssFilter: css => css, + }); + expect(css).toHaveProperty('display'); + expect(css).toHaveProperty('background-position'); + expect(css).toHaveProperty('padding-bottom'); + expect(css).toHaveProperty('font-weight'); + expect(css).toHaveProperty('background-size'); + expect(css).toHaveProperty('background-repeat'); + expect(css).toHaveProperty('background-image'); + expect(css[ 'display' ]).toBe('inline'); + expect(css[ 'background-position' ]).toBe('left 0 center'); + expect(css[ 'padding-bottom' ]).toBe('a'); + expect(css[ 'font-weight' ]).toBe('b'); + expect(css[ 'background-size' ]).toBe('200% c'); + expect(css[ 'background-repeat' ]).toBe('repeat-x'); + expect(css[ 'background-image' ]).toBe('linear-gradient(to right, rgba(255,255,255,0) 50%, d 50%)'); + }); + + it('should get marker css', () => { + const css = getCss({ + stripe: false, + delay: ZERO_SEC, + duration: ZERO_SEC, + 'padding_bottom': 'a', + cssFilter: css => css, + }); + expect(css).toHaveProperty('background-position'); + expect(css[ 'background-position' ]).toBe('left -100% center'); + }); + + it('should get stripe css', () => { + const cssFilter = jest.fn(css => { + Object.keys(css).forEach(key => css[ key ] += '-test'); + return css; + }); + const css = getCss({ + stripe: true, + 'padding_bottom': 'a', + thickness: 'b', + color: 'c', + 'stripe_thickness': 3, + cssFilter: cssFilter, + }); + + expect(css).toHaveProperty('display'); + expect(css).toHaveProperty('background-position'); + expect(css).toHaveProperty('padding-bottom'); + expect(css).toHaveProperty('background-size'); + expect(css).toHaveProperty('background-repeat'); + expect(css).toHaveProperty('background-image'); + expect(css[ 'display' ]).toBe('inline-test'); + expect(css[ 'background-position' ]).toBe('left 0 center-test'); + expect(css[ 'padding-bottom' ]).toBe('a-test'); + expect(css[ 'background-size' ]).toBe('100% b-test'); + expect(css[ 'background-repeat' ]).toBe('no-repeat-test'); + expect(css[ 'background-image' ]).toBe('repeating-linear-gradient(-45deg, c, c 3px, transparent 3px, transparent 6px)-test'); + expect(cssFilter).toBeCalled(); + }); +}); + +describe('refresh', () => { + it('should refresh', () => { + const off = jest.fn(); + const attr = jest.fn(); + const css = jest.fn(key => { + if (typeof key === 'object') { + return { attr: attr }; + } + return cssValue[ key ]; + }); + const target = { + off: off, + css: css, + attr: () => false, + 0: {}, + }; + refresh(target, { + stripe: true, + cssFilter: css => css, + }); + + expect(off).toBeCalled(); + expect(attr).toBeCalled(); + expect(target[ 0 ]).toHaveProperty('resetValues'); + RESET_KEYS.forEach((key, index) => { + expect(target[ 0 ].resetValues[ key ]).toBe(index); + }); + }); +}); diff --git a/__tests__/utils.js b/__tests__/utils.js index 356d863..c94ca30 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -1,90 +1,90 @@ -/* eslint-disable no-magic-numbers */ -import { PREFIX, ZERO_SEC } from '../src/constants'; -import { SETTINGS_DEFAULTS } from '../src/defaults'; -import { parseTime, parseStripeThickness, getTargetOptions, toSnakeCase, toCamelCase } from '../src/utils'; - -describe( 'parseTime', () => { - it( 'should parse time', () => { - expect( parseTime( '0.6s' ) ).toBe( '0.6s' ); - expect( parseTime( '-.6s' ) ).toBe( '-.6s' ); - expect( parseTime( '600ms' ) ).toBe( '600ms' ); - } ); - - it( 'should return default', () => { - expect( parseTime( '' ) ).toBe( ZERO_SEC ); - expect( parseTime( 'abc' ) ).toBe( ZERO_SEC ); - expect( parseTime( '10' ) ).toBe( ZERO_SEC ); - } ); -} ); - -describe( 'parseStripeThickness', () => { - it( 'should parse stripe thickness', () => { - expect( parseStripeThickness( 10 ) ).toBe( 10 ); - expect( parseStripeThickness( '10' ) ).toBe( 10 ); - expect( parseStripeThickness( '10em' ) ).toBe( 10 ); - } ); - - it( 'should return default', () => { - expect( parseStripeThickness( '' ) ).toBe( SETTINGS_DEFAULTS.stripe_thickness ); - expect( parseStripeThickness( 'abc' ) ).toBe( SETTINGS_DEFAULTS.stripe_thickness ); - expect( parseStripeThickness( 'em10' ) ).toBe( SETTINGS_DEFAULTS.stripe_thickness ); - } ); -} ); - -describe( 'getTargetOptions', () => { - const target = data => ( { - data: jest.fn( key => { - const _key = key.replace( new RegExp( '^' + PREFIX ), '' ); - return _key in data ? data[ _key ] : undefined; - } ), - } ); - - it( 'should get target options', () => { - const options = getTargetOptions( target( { - 'padding_bottom': '100em', - 'stripe_thickness': 1000, - delay: 10, - duration: '.5ms', - } ), [ ] ); - expect( options ).toHaveProperty( 'padding_bottom' ); - expect( options ).toHaveProperty( 'stripe_thickness' ); - expect( options ).toHaveProperty( 'delay' ); - expect( options ).toHaveProperty( 'duration' ); - expect( options.padding_bottom ).toBe( '100em' ); - expect( options.stripe_thickness ).toBe( 1000 ); - expect( options.delay ).toBe( ZERO_SEC ); - expect( options.duration ).toBe( '.5ms' ); - } ); - - it( 'should get target options', () => { - const options = getTargetOptions( target( { - 'stripe_thickness': '', - delay: '0.0ms', - } ), [ { color: 'red' } ] ); - expect( options ).toHaveProperty( 'stripe_thickness' ); - expect( options ).toHaveProperty( 'delay' ); - expect( options ).toHaveProperty( 'font_weight' ); - expect( options ).toHaveProperty( 'cssFilter' ); - expect( options.stripe_thickness ).toBe( SETTINGS_DEFAULTS.stripe_thickness ); - expect( options.delay ).toBe( ZERO_SEC ); - expect( options.color ).toBe( 'red' ); - expect( options.font_weight ).toBe( SETTINGS_DEFAULTS.font_weight ); - expect( typeof options.cssFilter ).toBe( 'function' ); - expect( options.cssFilter( 'a' ) ).toBe( 'a' ); - } ); -} ); - -describe( 'toSnakeCase', () => { - it( 'should convert to snake case', () => { - expect( toSnakeCase( 'camelCase' ) ).toBe( 'camel_case' ); - expect( toSnakeCase( 'test' ) ).toBe( 'test' ); - } ); -} ); - -describe( 'toCamelCase', () => { - it( 'should convert to camel case', () => { - expect( toCamelCase( 'snake_case' ) ).toBe( 'snakeCase' ); - expect( toCamelCase( 'kebab-case' ) ).toBe( 'kebabCase' ); - expect( toCamelCase( 'test' ) ).toBe( 'test' ); - } ); -} ); +/* eslint-disable no-magic-numbers */ +import { PREFIX, ZERO_SEC } from '../src/constants'; +import { SETTINGS_DEFAULTS } from '../src/defaults'; +import { parseTime, parseStripeThickness, getTargetOptions, toSnakeCase, toCamelCase } from '../src/utils'; + +describe('parseTime', () => { + it('should parse time', () => { + expect(parseTime('0.6s')).toBe('0.6s'); + expect(parseTime('-.6s')).toBe('-.6s'); + expect(parseTime('600ms')).toBe('600ms'); + }); + + it('should return default', () => { + expect(parseTime('')).toBe(ZERO_SEC); + expect(parseTime('abc')).toBe(ZERO_SEC); + expect(parseTime('10')).toBe(ZERO_SEC); + }); +}); + +describe('parseStripeThickness', () => { + it('should parse stripe thickness', () => { + expect(parseStripeThickness(10)).toBe(10); + expect(parseStripeThickness('10')).toBe(10); + expect(parseStripeThickness('10em')).toBe(10); + }); + + it('should return default', () => { + expect(parseStripeThickness('')).toBe(SETTINGS_DEFAULTS.stripe_thickness); + expect(parseStripeThickness('abc')).toBe(SETTINGS_DEFAULTS.stripe_thickness); + expect(parseStripeThickness('em10')).toBe(SETTINGS_DEFAULTS.stripe_thickness); + }); +}); + +describe('getTargetOptions', () => { + const target = data => ({ + data: jest.fn(key => { + const _key = key.replace(new RegExp('^' + PREFIX), ''); + return _key in data ? data[ _key ] : undefined; + }), + }); + + it('should get target options', () => { + const options = getTargetOptions(target({ + 'padding_bottom': '100em', + 'stripe_thickness': 1000, + delay: 10, + duration: '.5ms', + }), []); + expect(options).toHaveProperty('padding_bottom'); + expect(options).toHaveProperty('stripe_thickness'); + expect(options).toHaveProperty('delay'); + expect(options).toHaveProperty('duration'); + expect(options.padding_bottom).toBe('100em'); + expect(options.stripe_thickness).toBe(1000); + expect(options.delay).toBe(ZERO_SEC); + expect(options.duration).toBe('.5ms'); + }); + + it('should get target options', () => { + const options = getTargetOptions(target({ + 'stripe_thickness': '', + delay: '0.0ms', + }), [{ color: 'red' }]); + expect(options).toHaveProperty('stripe_thickness'); + expect(options).toHaveProperty('delay'); + expect(options).toHaveProperty('font_weight'); + expect(options).toHaveProperty('cssFilter'); + expect(options.stripe_thickness).toBe(SETTINGS_DEFAULTS.stripe_thickness); + expect(options.delay).toBe(ZERO_SEC); + expect(options.color).toBe('red'); + expect(options.font_weight).toBe(SETTINGS_DEFAULTS.font_weight); + expect(typeof options.cssFilter).toBe('function'); + expect(options.cssFilter('a')).toBe('a'); + }); +}); + +describe('toSnakeCase', () => { + it('should convert to snake case', () => { + expect(toSnakeCase('camelCase')).toBe('camel_case'); + expect(toSnakeCase('test')).toBe('test'); + }); +}); + +describe('toCamelCase', () => { + it('should convert to camel case', () => { + expect(toCamelCase('snake_case')).toBe('snakeCase'); + expect(toCamelCase('kebab-case')).toBe('kebabCase'); + expect(toCamelCase('test')).toBe('test'); + }); +}); diff --git a/bin/gh-pages/plugin.js b/bin/gh-pages/plugin.js index 6983290..06009f0 100644 --- a/bin/gh-pages/plugin.js +++ b/bin/gh-pages/plugin.js @@ -2,8 +2,8 @@ import $ from 'jquery'; import './index'; import './plugin.scss'; -$( () => { - $( '#app' ).html( ` +$(() => { + $('#app').html(`
This page is demonstration of jQuery Marker Animation. @@ -75,15 +75,15 @@ $( () => {

Dolly'll never go away again

- +

Reset

-
` ); +`); - $( '#app .marker-animation' ).markerAnimation(); - $( '#app .reset-animation' ).on( 'click', () => { - $( '#app .marker-animation' ).markerAnimation( 'refresh' ); - } ); -} ); + $('#app .marker-animation').markerAnimation(); + $('#app .reset-animation').on('click', () => { + $('#app .marker-animation').markerAnimation('refresh'); + }); +}); diff --git a/bin/gh-pages/plugin.scss b/bin/gh-pages/plugin.scss index c5c12fc..8bac0b5 100644 --- a/bin/gh-pages/plugin.scss +++ b/bin/gh-pages/plugin.scss @@ -1,27 +1,27 @@ #app { - max-width: 600px; - margin: 0 auto; + max-width: 600px; + margin: 0 auto; } .blank-box { - border: 3px solid #949495; - padding: 1.2em 1em; - margin: 1em 2%; - border-radius: 4px; + border: 3px solid #949495; + padding: 1.2em 1em; + margin: 1em 2%; + border-radius: 4px; } .reset-animation { - color: #fff; - font-weight: bold; - border-radius: 4px; - display: inline-block; - cursor: pointer; - line-height: normal; - padding: 10px 16px; - text-decoration: none; - text-align: center; - font-size: 14px; - border: 2px solid transparent; - position: relative; - background-color: #2ca9e1; + color: #fff; + font-weight: bold; + border-radius: 4px; + display: inline-block; + cursor: pointer; + line-height: normal; + padding: 10px 16px; + text-decoration: none; + text-align: center; + font-size: 14px; + border: 2px solid transparent; + position: relative; + background-color: #2ca9e1; } diff --git a/package.json b/package.json index f716697..7fbbe85 100644 --- a/package.json +++ b/package.json @@ -1,57 +1,62 @@ { "name": "jquery.marker-animation", - "version": "1.4.13", + "version": "1.4.14", "description": "Marker animation jQuery plugin", - "main": "build/index.js", - "files": [ - "build" - ], - "scripts": { - "start": "yarn build", - "test": "yarn lint && yarn cover", - "test:update": "yarn lint && yarn cover:update", - "lint": "eslint 'src/**/*.js' '__tests__/**/*.js'", - "lint:fix": "eslint --fix 'src/**/*.js' '__tests__/**/*.js'", - "cover": "jest --coverage", - "cover:update": "jest --coverage --updateSnapshot", - "develop": "webpack --mode development --config webpack.config.js", - "build": "webpack --mode production --config webpack.config.js", - "update": "ncu -u && yarn install && yarn upgrade && yarn audit" - }, - "repository": { - "type": "git", - "url": "https://github.com/technote-space/jquery.marker-animation.git" + "author": { + "name": "Technote", + "email": "technote.space@gmail.com", + "url": "https://technote.space" }, + "license": "MIT", "keywords": [ "jquery-plugin", "marker animation", "highlighter" ], - "author": "Technote (https://technote.space)", + "homepage": "https://github.com/technote-space/jquery.marker-animation#readme", + "repository": { + "type": "git", + "url": "https://github.com/technote-space/jquery.marker-animation.git" + }, "bugs": { "url": "https://github.com/technote-space/jquery.marker-animation/issues" }, - "homepage": "https://github.com/technote-space/jquery.marker-animation#readme", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.8.3", + "main": "build/index.js", + "files": [ + "build" + ], + "devDependencies": { + "@babel/core": "^7.8.4", "@babel/plugin-proposal-object-rest-spread": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.8.3", "@babel/plugin-transform-runtime": "^7.8.3", - "@babel/preset-env": "^7.8.3", + "@babel/preset-env": "^7.8.4", "@babel/register": "^7.8.3", + "babel-jest": "^25.1.0", "babel-loader": "^8.0.6", "duplicate-package-checker-webpack-plugin": "^3.0.0", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.4.4", + "eslint": "^6.8.0", + "jest": "^25.1.0", "jquery-inview": "^1.1.2", "speed-measure-webpack-plugin": "^1.3.1", - "webpack": "^4.41.5", + "webpack": "^4.41.6", "webpack-cli": "^3.3.10" }, - "devDependencies": { - "babel-jest": "^25.1.0", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.4.3", - "eslint": "^6.8.0", - "jest": "^25.1.0" + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "webpack --mode production --config webpack.config.js", + "start": "yarn build", + "test": "yarn lint && yarn cover", + "test:update": "yarn lint && yarn cover:update", + "lint": "eslint 'src/**/*.js' '__tests__/**/*.js' --cache", + "lint:fix": "eslint --fix 'src/**/*.js' '__tests__/**/*.js'", + "cover": "jest --coverage", + "cover:update": "jest --coverage --updateSnapshot", + "develop": "webpack --mode development --config webpack.config.js", + "update": "ncu -u && yarn install && yarn upgrade && yarn audit" } } diff --git a/src/constants.js b/src/constants.js index 57d1af3..36d1408 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,13 +1,13 @@ -export const NAMESPACE = 'markerAnimation'; -export const PREFIX = 'ma_'; -export const RESET_KEYS = [ - 'background', - 'padding-bottom', - 'font-weight', - 'transition', -]; -export const MARKER_DATA = 'data-marker_animation'; -export const ZERO_SEC = '0s'; -export const DESTROY_EVENT = `destroy.${ NAMESPACE }`; -export const REFRESH_EVENT = `refresh.${ NAMESPACE }`; -export const INVIEW_EVENT = `inview.${ NAMESPACE }`; \ No newline at end of file +export const NAMESPACE = 'markerAnimation'; +export const PREFIX = 'ma_'; +export const RESET_KEYS = [ + 'background', + 'padding-bottom', + 'font-weight', + 'transition', +]; +export const MARKER_DATA = 'data-marker_animation'; +export const ZERO_SEC = '0s'; +export const DESTROY_EVENT = `destroy.${NAMESPACE}`; +export const REFRESH_EVENT = `refresh.${NAMESPACE}`; +export const INVIEW_EVENT = `inview.${NAMESPACE}`; diff --git a/src/defaults.js b/src/defaults.js index ccd0672..c9ff0c6 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -9,7 +9,5 @@ export const SETTINGS_DEFAULTS = { repeat: false, stripe: false, 'stripe_thickness': 2, - cssFilter: function( css ) { - return css; - }, + cssFilter: css => css, }; diff --git a/src/functions.js b/src/functions.js index caa5c51..807a45e 100644 --- a/src/functions.js +++ b/src/functions.js @@ -1,154 +1,154 @@ -import { RESET_KEYS, MARKER_DATA, ZERO_SEC, NAMESPACE, INVIEW_EVENT, REFRESH_EVENT } from './constants'; - -/** - * @param {object} target target - * @returns {object} target - */ -export const reset = target => { - if ( target.attr( MARKER_DATA ) ) { - destroy( target ); - removeEvent( target ); - } - return target; -}; - -/** - * @param {object} target target - * @returns {object} target - */ -export const destroy = target => { - if ( target[ 0 ].resetValues ) { - RESET_KEYS.forEach( key => { - target.css( key, target[ 0 ].resetValues[ key ] ); - } ); - delete target[ 0 ].resetValues; - } - target.attr( MARKER_DATA, false ); - return target; -}; - -/** - * @param {object} target target - * @param {object} options options - * @returns {object} target - */ -export const create = ( target, options ) => { - target[ 0 ].resetValues = {}; - RESET_KEYS.forEach( key => target[ 0 ].resetValues[ key ] = target.css( key ) ); - - if ( ! isStatic( options ) ) { - target.data( 'inview', false ).on( INVIEW_EVENT, ( event, isInView ) => { - if ( isInView ) { - onInView( target, options ); - } else { - offInView( target, options ); - } - } ); - } - target.css( getCss( options ) ).attr( MARKER_DATA, true ); - return target; -}; - -/** - * @param {object} options options - * @returns {boolean} is static? - */ -export const isStatic = options => options.stripe || ( ZERO_SEC === options.delay && ZERO_SEC === options.duration ); - -/** - * @param {object} options options - * @returns {object} css - */ -export const getCss = options => options.cssFilter( options.stripe ? getStripeCss( options ) : getMarkerCss( options ) ); - -/** - * @param {object} options options - * @returns {object} css - */ -const getCommonCss = options => Object.assign( { - 'display': 'inline', - 'background-position': 'left 0 center', - 'padding-bottom': options.padding_bottom, -}, options.font_weight ? { - 'font-weight': options.font_weight, -} : {} ); - -/** - * @param {object} options options - * @returns {object} css - */ -const getMarkerCss = options => Object.assign( {}, getCommonCss( options ), { - 'background-size': `200% ${ options.thickness }`, - 'background-repeat': 'repeat-x', - 'background-image': `linear-gradient(to right, rgba(255,255,255,0) 50%, ${ options.color } 50%)`, -}, isStatic( options ) ? { - 'background-position': 'left -100% center', -} : {} ); - -/** - * @param {object} options options - * @returns {object} css - */ -const getStripeCss = options => Object.assign( {}, getCommonCss( options ), { - 'background-size': `100% ${ options.thickness }`, - 'background-repeat': 'no-repeat', - // eslint-disable-next-line no-magic-numbers - 'background-image': `repeating-linear-gradient(-45deg, ${ options.color }, ${ options.color } ${ options.stripe_thickness }px, transparent ${ options.stripe_thickness }px, transparent ${ options.stripe_thickness * 2 }px)`, -} ); - -/** - * @param {object} target target - * @param {object} options options - * @returns {object} target - */ -export const refresh = ( target, options ) => { - destroy( target ); - stop( target ); - return create( target, options ); -}; - -/** - * @param {object} target target - * @returns {object} target - */ -export const removeEvent = target => { - target.off( `.${ NAMESPACE }` ); - return target; -}; - -/** - * @param {object} target target - * @returns {object} target - */ -export const stop = target => { - target.off( INVIEW_EVENT ); - return target; -}; - -/** - * @param {object} target target - * @param {object} options options - * @returns {object} target - */ -export const onInView = ( target, options ) => { - target.stop( true, true ).css( { - transition: `background-position ${ options.duration } ${ options.function } ${ options.delay }`, - 'background-position': 'left -100% center', - } ); - if ( ! options.repeat ) { - stop( target ); - } - return target; -}; - -/** - * @param {object} target target - * @param {object} options options - * @returns {object} target - */ -export const offInView = ( target, options ) => { - if ( options.repeat ) { - target.trigger( REFRESH_EVENT ); - } - return target; -}; +import { RESET_KEYS, MARKER_DATA, ZERO_SEC, NAMESPACE, INVIEW_EVENT, REFRESH_EVENT } from './constants'; + +/** + * @param {object} target target + * @returns {object} target + */ +export const reset = target => { + if (target.attr(MARKER_DATA)) { + destroy(target); + removeEvent(target); + } + return target; +}; + +/** + * @param {object} target target + * @returns {object} target + */ +export const destroy = target => { + if (target[ 0 ].resetValues) { + RESET_KEYS.forEach(key => { + target.css(key, target[ 0 ].resetValues[ key ]); + }); + delete target[ 0 ].resetValues; + } + target.attr(MARKER_DATA, false); + return target; +}; + +/** + * @param {object} target target + * @param {object} options options + * @returns {object} target + */ +export const create = (target, options) => { + target[ 0 ].resetValues = {}; + RESET_KEYS.forEach(key => target[ 0 ].resetValues[ key ] = target.css(key)); + + if (!isStatic(options)) { + target.data('inview', false).on(INVIEW_EVENT, (event, isInView) => { + if (isInView) { + onInView(target, options); + } else { + offInView(target, options); + } + }); + } + target.css(getCss(options)).attr(MARKER_DATA, true); + return target; +}; + +/** + * @param {object} options options + * @returns {boolean} is static? + */ +export const isStatic = options => options.stripe || (ZERO_SEC === options.delay && ZERO_SEC === options.duration); + +/** + * @param {object} options options + * @returns {object} css + */ +export const getCss = options => options.cssFilter(options.stripe ? getStripeCss(options) : getMarkerCss(options)); + +/** + * @param {object} options options + * @returns {object} css + */ +const getCommonCss = options => Object.assign({ + 'display': 'inline', + 'background-position': 'left 0 center', + 'padding-bottom': options.padding_bottom, +}, options.font_weight ? { + 'font-weight': options.font_weight, +} : {}); + +/** + * @param {object} options options + * @returns {object} css + */ +const getMarkerCss = options => Object.assign({}, getCommonCss(options), { + 'background-size': `200% ${options.thickness}`, + 'background-repeat': 'repeat-x', + 'background-image': `linear-gradient(to right, rgba(255,255,255,0) 50%, ${options.color} 50%)`, +}, isStatic(options) ? { + 'background-position': 'left -100% center', +} : {}); + +/** + * @param {object} options options + * @returns {object} css + */ +const getStripeCss = options => Object.assign({}, getCommonCss(options), { + 'background-size': `100% ${options.thickness}`, + 'background-repeat': 'no-repeat', + // eslint-disable-next-line no-magic-numbers + 'background-image': `repeating-linear-gradient(-45deg, ${options.color}, ${options.color} ${options.stripe_thickness}px, transparent ${options.stripe_thickness}px, transparent ${options.stripe_thickness * 2}px)`, +}); + +/** + * @param {object} target target + * @param {object} options options + * @returns {object} target + */ +export const refresh = (target, options) => { + destroy(target); + stop(target); + return create(target, options); +}; + +/** + * @param {object} target target + * @returns {object} target + */ +export const removeEvent = target => { + target.off(`.${NAMESPACE}`); + return target; +}; + +/** + * @param {object} target target + * @returns {object} target + */ +export const stop = target => { + target.off(INVIEW_EVENT); + return target; +}; + +/** + * @param {object} target target + * @param {object} options options + * @returns {object} target + */ +export const onInView = (target, options) => { + target.stop(true, true).css({ + transition: `background-position ${options.duration} ${options.function} ${options.delay}`, + 'background-position': 'left -100% center', + }); + if (!options.repeat) { + stop(target); + } + return target; +}; + +/** + * @param {object} target target + * @param {object} options options + * @returns {object} target + */ +export const offInView = (target, options) => { + if (options.repeat) { + target.trigger(REFRESH_EVENT); + } + return target; +}; diff --git a/src/index.js b/src/index.js index 1653b09..e6a2931 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,7 @@ -require( 'jquery-inview' ); +require('jquery-inview'); import $ from 'jquery'; import { setup } from './setup'; -$.fn.markerAnimation = function( ...args ) { - return this.each( function() { - setup( $( this ), args ); - } ); +$.fn.markerAnimation = (...args) => { + return this.each(() => setup($(this), args)); }; diff --git a/src/setup.js b/src/setup.js index e2f1225..6edfe65 100644 --- a/src/setup.js +++ b/src/setup.js @@ -1,53 +1,53 @@ -import { DESTROY_EVENT, REFRESH_EVENT } from './constants'; -import { reset, create, destroy, removeEvent, refresh } from './functions'; -import { getTargetOptions } from './utils'; - -/** - * @param {object} target target - * @param {Array} args args - * @returns {object} target - */ -export const setup = ( target, args ) => { - if ( args.length && typeof args[ 0 ] === 'string' ) { - if ( 'destroy' === args[ 0 ] ) { - triggerDestroy( target ); - return target; - } - if ( 'refresh' === args[ 0 ] ) { - triggerRefresh( target ); - return target; - } - } - - reset( target ); - - const options = getTargetOptions( target, args ); - create( target, options ); - setupEvents( target, options ); - return target; -}; - -/** - * @param {object} target target - * @returns {*} triggered - */ -const triggerDestroy = target => target.trigger( DESTROY_EVENT ); - -/** - * @param {object} target target - * @returns {*} triggered - */ -const triggerRefresh = target => target.trigger( REFRESH_EVENT ); - -/** - * @param {object} target target - * @param {object} options options - */ -const setupEvents = ( target, options ) => { - target.on( DESTROY_EVENT, () => { - destroy( target ); - removeEvent( target ); - } ).on( REFRESH_EVENT, () => { - refresh( target, options ); - } ); -}; \ No newline at end of file +import { DESTROY_EVENT, REFRESH_EVENT } from './constants'; +import { reset, create, destroy, removeEvent, refresh } from './functions'; +import { getTargetOptions } from './utils'; + +/** + * @param {object} target target + * @param {Array} args args + * @returns {object} target + */ +export const setup = (target, args) => { + if (args.length && typeof args[ 0 ] === 'string') { + if ('destroy' === args[ 0 ]) { + triggerDestroy(target); + return target; + } + if ('refresh' === args[ 0 ]) { + triggerRefresh(target); + return target; + } + } + + reset(target); + + const options = getTargetOptions(target, args); + create(target, options); + setupEvents(target, options); + return target; +}; + +/** + * @param {object} target target + * @returns {*} triggered + */ +const triggerDestroy = target => target.trigger(DESTROY_EVENT); + +/** + * @param {object} target target + * @returns {*} triggered + */ +const triggerRefresh = target => target.trigger(REFRESH_EVENT); + +/** + * @param {object} target target + * @param {object} options options + */ +const setupEvents = (target, options) => { + target.on(DESTROY_EVENT, () => { + destroy(target); + removeEvent(target); + }).on(REFRESH_EVENT, () => { + refresh(target, options); + }); +}; diff --git a/src/utils.js b/src/utils.js index c59c026..84711ac 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,58 +1,58 @@ -import { PREFIX, ZERO_SEC } from './constants'; -import { SETTINGS_DEFAULTS } from './defaults'; - -/** - * @param {string} value value - * @returns {string} time - */ -export const parseTime = value => ! /^-?\d*\.?\d+m?s$/.test( value ) || /^-?0?\.?0+m?s$/.test( value ) ? ZERO_SEC : value; - -/** - * @param {string|number} value value - * @returns {number} thickness - */ -export const parseStripeThickness = value => isNaN( parseInt( value, 10 ) ) ? SETTINGS_DEFAULTS.stripe_thickness : parseInt( value ); - -/** - * @param {object} target target - * @param {Array} args args - * @returns {object} options - */ -export const getTargetOptions = ( target, args ) => { - const options = Object.assign( {}, args.length && typeof args[ 0 ] === 'object' ? args[ 0 ] : {} ); - const filters = { - 'delay': parseTime, - 'duration': parseTime, - 'stripe_thickness': parseStripeThickness, - }; - Object.keys( SETTINGS_DEFAULTS ).forEach( key => { - const data = target.data( PREFIX + key ); - if ( isScalar( data ) && key in filters ) { - options[ key ] = filters[ key ]( data ); - } else if ( undefined !== data ) { - options[ key ] = data; - } - } ); - return Object.assign( {}, SETTINGS_DEFAULTS, options ); -}; - -/** - * @param {*} value value - * @returns {boolean} is scalar? - */ -export const isScalar = value => { - const type = typeof value; - return 'string' === type || 'number' === type || 'boolean' === type; -}; - -/** - * @param {string} string target string - * @returns {string} snake case - */ -export const toSnakeCase = string => string.replace( /[\w]([A-Z])/g, matches => `${ matches[ 0 ] }_${ matches[ 1 ] }` ).toLowerCase(); - -/** - * @param {string} string target string - * @returns {string} camel case - */ -export const toCamelCase = string => string.replace( '-', '_' ).replace( /(_\w)/g, matches => matches[ 1 ].toUpperCase() ); +import { PREFIX, ZERO_SEC } from './constants'; +import { SETTINGS_DEFAULTS } from './defaults'; + +/** + * @param {string} value value + * @returns {string} time + */ +export const parseTime = value => !/^-?\d*\.?\d+m?s$/.test(value) || /^-?0?\.?0+m?s$/.test(value) ? ZERO_SEC : value; + +/** + * @param {string|number} value value + * @returns {number} thickness + */ +export const parseStripeThickness = value => isNaN(parseInt(value, 10)) ? SETTINGS_DEFAULTS.stripe_thickness : parseInt(value); + +/** + * @param {object} target target + * @param {Array} args args + * @returns {object} options + */ +export const getTargetOptions = (target, args) => { + const options = Object.assign({}, args.length && typeof args[ 0 ] === 'object' ? args[ 0 ] : {}); + const filters = { + 'delay': parseTime, + 'duration': parseTime, + 'stripe_thickness': parseStripeThickness, + }; + Object.keys(SETTINGS_DEFAULTS).forEach(key => { + const data = target.data(PREFIX + key); + if (isScalar(data) && key in filters) { + options[ key ] = filters[ key ](data); + } else if (undefined !== data) { + options[ key ] = data; + } + }); + return Object.assign({}, SETTINGS_DEFAULTS, options); +}; + +/** + * @param {*} value value + * @returns {boolean} is scalar? + */ +export const isScalar = value => { + const type = typeof value; + return 'string' === type || 'number' === type || 'boolean' === type; +}; + +/** + * @param {string} string target string + * @returns {string} snake case + */ +export const toSnakeCase = string => string.replace(/[\w]([A-Z])/g, matches => `${matches[ 0 ]}_${matches[ 1 ]}`).toLowerCase(); + +/** + * @param {string} string target string + * @returns {string} camel case + */ +export const toCamelCase = string => string.replace('-', '_').replace(/(_\w)/g, matches => matches[ 1 ].toUpperCase()); diff --git a/webpack.config.js b/webpack.config.js index 76016d6..4334b21 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,16 +1,16 @@ -const SpeedMeasurePlugin = require( 'speed-measure-webpack-plugin' ); -const DuplicatePackageCheckerPlugin = require( 'duplicate-package-checker-webpack-plugin' ); -const webpack = require( 'webpack' ); -const pkg = require( './package' ); -const path = require( 'path' ); +const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); +const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin'); +const webpack = require('webpack'); +const pkg = require('./package'); +const path = require('path'); -const banner = `${ pkg.name } ${ pkg.version } - ${ pkg.description }\nCopyright (c) ${ new Date().getFullYear() } ${ pkg.author } - ${ pkg.homepage }\nLicense: ${ pkg.license }`; +const banner = `${pkg.name} ${pkg.version} - ${pkg.description}\nCopyright (c) ${new Date().getFullYear()} ${pkg.author} - ${pkg.homepage}\nLicense: ${pkg.license}`; const webpackConfig = { - context: path.resolve( __dirname, 'src' ), + context: path.resolve(__dirname, 'src'), entry: './index.js', output: { - path: path.resolve( __dirname, 'build' ), + path: path.resolve(__dirname, 'build'), filename: 'index.js', library: 'MarkerAnimation', libraryTarget: 'umd', @@ -33,9 +33,9 @@ const webpackConfig = { }, }, plugins: [ - new webpack.BannerPlugin( banner ), + new webpack.BannerPlugin(banner), new DuplicatePackageCheckerPlugin(), ], }; -module.exports = ( new SpeedMeasurePlugin() ).wrap( webpackConfig ); \ No newline at end of file +module.exports = (new SpeedMeasurePlugin()).wrap(webpackConfig); diff --git a/yarn.lock b/yarn.lock index f7d1a0b..b686039 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,26 +9,26 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.0", "@babel/compat-data@^7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.1.tgz#fc0bbbb7991e4fb2b47e168e60f2cc2c41680be9" - integrity sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw== +"@babel/compat-data@^7.8.4": + version "7.8.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" + integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== dependencies: - browserslist "^4.8.2" + browserslist "^4.8.5" invariant "^2.2.4" semver "^5.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" - integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== +"@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" + integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helpers" "^7.8.3" - "@babel/parser" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.4" "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" + "@babel/traverse" "^7.8.4" "@babel/types" "^7.8.3" convert-source-map "^1.7.0" debug "^4.1.0" @@ -39,10 +39,10 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" - integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== +"@babel/generator@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" + integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== dependencies: "@babel/types" "^7.8.3" jsesc "^2.5.1" @@ -81,15 +81,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-compilation-targets@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz#2deedc816fd41dca7355ef39fd40c9ea69f0719a" - integrity sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw== +"@babel/helper-compilation-targets@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" + integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== dependencies: - "@babel/compat-data" "^7.8.1" - browserslist "^4.8.2" + "@babel/compat-data" "^7.8.4" + browserslist "^4.8.5" invariant "^2.2.4" - levenary "^1.1.0" + levenary "^1.1.1" semver "^5.5.0" "@babel/helper-create-regexp-features-plugin@^7.8.3": @@ -231,13 +231,13 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" - integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ== +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" + "@babel/traverse" "^7.8.4" "@babel/types" "^7.8.3" "@babel/highlight@^7.8.3": @@ -249,10 +249,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" - integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" @@ -471,10 +471,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz#15f17bce2fc95c7d59a24b299e83e81cedc22e18" - integrity sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA== +"@babel/plugin-transform-for-of@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" + integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -559,10 +559,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz#7890576a13b17325d8b7d44cb37f21dc3bbdda59" - integrity sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q== +"@babel/plugin-transform-parameters@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" + integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== dependencies: "@babel/helper-call-delegate" "^7.8.3" "@babel/helper-get-function-arity" "^7.8.3" @@ -638,10 +638,10 @@ "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz#5cffb216fb25c8c64ba6bf5f76ce49d3ab079f4d" - integrity sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g== +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -653,13 +653,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/preset-env@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.3.tgz#dc0fb2938f52bbddd79b3c861a4b3427dd3a6c54" - integrity sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg== +"@babel/preset-env@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" + integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== dependencies: - "@babel/compat-data" "^7.8.0" - "@babel/helper-compilation-targets" "^7.8.3" + "@babel/compat-data" "^7.8.4" + "@babel/helper-compilation-targets" "^7.8.4" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-async-generator-functions" "^7.8.3" @@ -688,7 +688,7 @@ "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.4" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" @@ -699,7 +699,7 @@ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.4" "@babel/plugin-transform-property-literals" "^7.8.3" "@babel/plugin-transform-regenerator" "^7.8.3" "@babel/plugin-transform-reserved-words" "^7.8.3" @@ -707,13 +707,13 @@ "@babel/plugin-transform-spread" "^7.8.3" "@babel/plugin-transform-sticky-regex" "^7.8.3" "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" "@babel/types" "^7.8.3" - browserslist "^4.8.2" + browserslist "^4.8.5" core-js-compat "^3.6.2" invariant "^2.2.2" - levenary "^1.1.0" + levenary "^1.1.1" semver "^5.5.0" "@babel/register@^7.8.3": @@ -736,16 +736,16 @@ "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" - integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" + integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" + "@babel/generator" "^7.8.4" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.3" + "@babel/parser" "^7.8.4" "@babel/types" "^7.8.3" debug "^4.1.0" globals "^11.1.0" @@ -1013,9 +1013,9 @@ "@types/istanbul-lib-report" "*" "@types/node@*": - version "13.1.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" - integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== + version "13.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.0.tgz#b417deda18cf8400f278733499ad5547ed1abec4" + integrity sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ== "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1028,9 +1028,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.1.tgz#9266a9d7be68cfcc982568211085a49a277f7c96" - integrity sha512-sYlwNU7zYi6eZbMzFvG6eHD7VsEvFdoDtlD7eI1JTg7YNnuguzmiGsc6MPSq5l8n+h21AsNof0je+9sgOe4+dg== + version "15.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.3.tgz#41453a0bc7ab393e995d1f5451455638edbd2baf" + integrity sha512-XCMQRK6kfpNBixHLyHUsGmXrpEmFFxzMrcnSXFMziHd8CoNJo8l16FkHyQq4x+xbM7E2XL83/O78OD8u+iZTdQ== dependencies: "@types/yargs-parser" "*" @@ -1654,14 +1654,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.8.2, browserslist@^4.8.3: - version "4.8.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3" - integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg== +browserslist@^4.8.3, browserslist@^4.8.5: + version "4.8.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" + integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== dependencies: - caniuse-lite "^1.0.30001022" - electron-to-chromium "^1.3.338" - node-releases "^1.1.46" + caniuse-lite "^1.0.30001023" + electron-to-chromium "^1.3.341" + node-releases "^1.1.47" bser@2.1.1: version "2.1.1" @@ -1740,10 +1740,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001022: - version "1.0.30001022" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" - integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== +caniuse-lite@^1.0.30001023: + version "1.0.30001027" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d" + integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg== capture-exit@^2.0.0: version "2.0.0" @@ -2105,9 +2105,9 @@ cssom@~0.3.6: integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.1.0.tgz#99f50a3aa21d4af16e758ae3e454dcf5940b9122" - integrity sha512-1iwCdymVYhMdQWiZ+9mB7x+urdNLPGTWsIZt6euFk8Yi+dOERK2ccoAUA3Bl8I5vmK5qfz/eLkBRyLbs42ov4A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" + integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== dependencies: cssom "~0.3.6" @@ -2350,10 +2350,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.338: - version "1.3.340" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" - integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== +electron-to-chromium@^1.3.341: + version "1.3.348" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.348.tgz#61fa7d43f6c4fd8b046b0b69213cb55b7a4c76a5" + integrity sha512-6O0IInybavGdYtcbI4ryF/9e3Qi8/soi6C68ELRseJuTwQPKq39uGgVVeQHG28t69Sgsky09nXBRhUiFXsZyFQ== elliptic@^6.0.0: version "6.5.2" @@ -2426,12 +2426,13 @@ enzyme-shallow-equal@^1.0.1: has "^1.0.3" object-is "^1.0.2" -enzyme-to-json@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.3.tgz#ed4386f48768ed29e2d1a2910893542c34e7e0af" - integrity sha512-jqNEZlHqLdz7OTpXSzzghArSS3vigj67IU/fWkPyl1c0TCj9P5s6Ze0kRkYZWNEoCqCR79xlQbigYlMx5erh8A== +enzyme-to-json@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.4.tgz#b30726c59091d273521b6568c859e8831e94d00e" + integrity sha512-50LELP/SCPJJGic5rAARvU7pgE3m1YaNj7JLM+Qkhl5t7PAs6fiyc8xzc50RnkKPFQCv0EeFVjEWdIFRGPWMsA== dependencies: lodash "^4.17.15" + react-is "^16.12.0" enzyme@^3.11.0: version "3.11.0" @@ -2500,9 +2501,9 @@ escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.13.0.tgz#c7adf9bd3f3cc675bb752f202f79a720189cab29" - integrity sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -3354,9 +3355,9 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inquirer@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.3.tgz#f9b4cd2dff58b9f73e8d43759436ace15bed4567" - integrity sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw== + version "7.0.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" + integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== dependencies: ansi-escapes "^4.2.1" chalk "^2.4.2" @@ -3643,9 +3644,9 @@ istanbul-lib-coverage@^3.0.0: integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== istanbul-lib-instrument@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz#53321a7970f076262fd3292c8f9b2e4ac544aae1" - integrity sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" + integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== dependencies: "@babel/core" "^7.7.5" "@babel/parser" "^7.7.5" @@ -4184,10 +4185,10 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levenary@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.0.tgz#fc146fe75f32dc483a0a2c64aef720f602cd6210" - integrity sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ== +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== dependencies: leven "^3.1.0" @@ -4555,9 +4556,9 @@ nearley@^2.7.10: semver "^5.4.1" needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.2.tgz#3342dea100b7160960a450dc8c22160ac712a528" + integrity sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" @@ -4639,10 +4640,10 @@ node-pre-gyp@*: semver "^5.3.0" tar "^4.4.2" -node-releases@^1.1.46: - version "1.1.47" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" - integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== +node-releases@^1.1.47: + version "1.1.48" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.48.tgz#7f647f0c453a0495bcd64cbd4778c26035c2f03a" + integrity sha512-Hr8BbmUl1ujAST0K0snItzEA5zkJTQup8VNTKNfT6Zw8vTJkIiagUPNfxHmgDOyfFYNfKAul40sD0UEYTvwebw== dependencies: semver "^6.3.0" @@ -4679,12 +4680,13 @@ npm-normalize-package-bin@^1.0.1: integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" @@ -4923,9 +4925,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -5458,9 +5460,9 @@ resolve@1.1.7: integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@^1.3.2, resolve@^1.8.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -5492,9 +5494,9 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: glob "^7.1.3" rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -5614,9 +5616,9 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667" - integrity sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A== + version "7.1.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.2.tgz#847bae5bce68c5d08889824f02667199b70e3d87" + integrity sha512-BJs9T/H8sEVHbeigqzIEo57Iu/3DG6c4QoqTfbQB3BPA4zgzAomh/Fk9E7QtjWQ8mx2dgA9YCfSF4y9k9bHNpQ== serialize-javascript@^2.1.2: version "2.1.2" @@ -6026,9 +6028,9 @@ supports-color@^7.0.0, supports-color@^7.1.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz#b1b94a159e9df00b0a554b2d5f0e0a89690334b0" - integrity sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w== + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -6404,9 +6406,9 @@ v8-compile-cache@^2.0.3: integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== v8-to-istanbul@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.0.1.tgz#d6a2a3823b8ff49bdf2167ff2a45d82dff81d02f" - integrity sha512-x0yZvZAkjJwdD3fPiJzYP37aod0ati4LlmD2RmpKjqewjKAov/u/ytZ8ViIZb07cN4cePKzl9ijiUi7C1LQ8hQ== + version "4.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.2.tgz#387d173be5383dbec209d21af033dcb892e3ac82" + integrity sha512-G9R+Hpw0ITAmPSr47lSlc5A1uekSYzXxTMlFxso2xoffwo4jQnzbv1p9yXIinO8UMZKfAFewaCHwWvnH4Jb4Ug== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -6488,10 +6490,10 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.41.5: - version "4.41.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" - integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== +webpack@^4.41.6: + version "4.41.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.6.tgz#12f2f804bf6542ef166755050d4afbc8f66ba7e1" + integrity sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5"