From 99ff2d545ffd585b8e7a03dd0a81e325ba2d409b Mon Sep 17 00:00:00 2001 From: Shachar <34343793+ShaMan123@users.noreply.github.com> Date: Fri, 6 Jan 2023 23:47:01 +0200 Subject: [PATCH 1/9] fix(IText): make clear contextTop always from the main render cycle (#8560) --- CHANGELOG.md | 5 +- src/canvas/canvas.class.ts | 14 +-- src/canvas/canvas_events.ts | 4 + src/shapes/Object/InteractiveObject.ts | 2 +- src/shapes/itext.class.ts | 37 +++---- src/shapes/textbox.class.ts | 1 - test/lib/visualTestLoop.js | 2 +- test/visual/freedraw.js | 28 ++++- test/visual/golden/mesh_withText.png | Bin 0 -> 11039 bytes test/visual/golden/textSelectionClearing.png | Bin 0 -> 12455 bytes test/visual/golden/textSelectionClearing2.png | Bin 0 -> 12642 bytes test/visual/golden/textSelectionClearing3.png | Bin 0 -> 14955 bytes test/visual/golden/top_ctx_withText.png | Bin 0 -> 8467 bytes test/visual/text.js | 96 ++++++++++++++++++ 14 files changed, 145 insertions(+), 44 deletions(-) create mode 100644 test/visual/golden/mesh_withText.png create mode 100644 test/visual/golden/textSelectionClearing.png create mode 100644 test/visual/golden/textSelectionClearing2.png create mode 100644 test/visual/golden/textSelectionClearing3.png create mode 100644 test/visual/golden/top_ctx_withText.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 18d3bb18d7f..7553f4be0d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,9 @@ ## [next] -- fix(): `_initRetinaScaling` initializaing the scaling regardless of settings in Canvas. [#8565](https://github.com/fabricjs/fabric.js/pull/8565) -- fix(): regression of canvas migration with pointer and sendPointToPlane [#8563](https://github.com/fabricjs/fabric.js/pull/8563) +- fix(IText): refactor clearing context top logic of itext to align with brush pattern, using the canvas rendering cycle in order to guard from edge cases #8560 +- fix(Canvas): `_initRetinaScaling` initializaing the scaling regardless of settings in Canvas. [#8565](https://github.com/fabricjs/fabric.js/pull/8565) +- fix(Canvas): regression of canvas migration with pointer and sendPointToPlane [#8563](https://github.com/fabricjs/fabric.js/pull/8563) - chore(TS): Use exports from files to build fabricJS, get rid of HEADER.js [#8549](https://github.com/fabricjs/fabric.js/pull/8549) - chore(): rm `fabric.filterBackend` => `getFilterBackend` [#8487](https://github.com/fabricjs/fabric.js/pull/8487) - chore(TS): migrate text SVG export mixin [#8486](https://github.com/fabricjs/fabric.js/pull/8486) diff --git a/src/canvas/canvas.class.ts b/src/canvas/canvas.class.ts index fadce44ae8b..95c270f4d76 100644 --- a/src/canvas/canvas.class.ts +++ b/src/canvas/canvas.class.ts @@ -19,11 +19,10 @@ import { isActiveSelection, isCollection, isFabricObjectCached, - isInteractiveTextObject, } from '../util/types'; import { invertTransform, transformPoint } from '../util/misc/matrix'; import { isTransparent } from '../util/misc/isTransparent'; -import { TMat2D, TOriginX, TOriginY, TSize } from '../typedefs'; +import { TOriginX, TOriginY, TSize } from '../typedefs'; import { degreesToRadians } from '../util/misc/radiansDegreesConversion'; import { getPointer, isTouchEvent } from '../util/dom_event'; import type { IText } from '../shapes/itext.class'; @@ -1631,17 +1630,6 @@ export class SelectableCanvas< super._setSVGObject(markup, instance, reviver); instance.set(originalProperties); } - - setViewportTransform(vpt: TMat2D) { - if ( - this.renderOnAddRemove && - isInteractiveTextObject(this._activeObject) && - this._activeObject.isEditing - ) { - this._activeObject.clearContextTop(); - } - super.setViewportTransform(vpt); - } } Object.assign(SelectableCanvas.prototype, { diff --git a/src/canvas/canvas_events.ts b/src/canvas/canvas_events.ts index 59a1bfa2048..142f4991fa8 100644 --- a/src/canvas/canvas_events.ts +++ b/src/canvas/canvas_events.ts @@ -342,10 +342,12 @@ export class Canvas extends SelectableCanvas { source?: FabricObject, target?: FabricObject ) { + let dirty = false; const ctx = this.contextTop; if (source) { source.clearContextTop(true); source.renderDragSourceEffect(e); + dirty = true; } if (target) { if (target !== source) { @@ -354,8 +356,10 @@ export class Canvas extends SelectableCanvas { target.clearContextTop(true); } target.renderDropTargetEffect(e); + dirty = true; } ctx.restore(); + dirty && (this.contextTopDirty = true); } /** diff --git a/src/shapes/Object/InteractiveObject.ts b/src/shapes/Object/InteractiveObject.ts index 475146f04e5..6851bf5edb5 100644 --- a/src/shapes/Object/InteractiveObject.ts +++ b/src/shapes/Object/InteractiveObject.ts @@ -512,7 +512,7 @@ export class InteractiveFabricObject< * Clears the canvas.contextTop in a specific area that corresponds to the object's bounding box * that is in the canvas.contextContainer. * This function is used to clear pieces of contextTop where we render ephemeral effects on top of the object. - * Example: blinking cursror text selection, drag effects. + * Example: blinking cursor text selection, drag effects. * @todo discuss swapping restoreManually with a renderCallback, but think of async issues * @param {Boolean} [restoreManually] When true won't restore the context after clear, in order to draw something else. * @return {CanvasRenderingContext2D|undefined} canvas.contextTop that is either still transformed diff --git a/src/shapes/itext.class.ts b/src/shapes/itext.class.ts index a3d5f55128d..6a0b5e63520 100644 --- a/src/shapes/itext.class.ts +++ b/src/shapes/itext.class.ts @@ -221,7 +221,6 @@ export class IText extends ITextClickBehaviorMixin { */ initDimensions() { this.isEditing && this.initDelayedCursor(); - this.clearContextTop(); super.initDimensions(); } @@ -272,7 +271,6 @@ export class IText extends ITextClickBehaviorMixin { * @param {CanvasRenderingContext2D} ctx Context to render on */ render(ctx: CanvasRenderingContext2D) { - this.clearContextTop(); super.render(ctx); // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor // the correct position but not at every cursor animation. @@ -280,14 +278,6 @@ export class IText extends ITextClickBehaviorMixin { this.renderCursorOrSelection(); } - /** - * @private - * @param {CanvasRenderingContext2D} ctx Context to render on - */ - _render(ctx: CanvasRenderingContext2D) { - super._render(ctx); - } - /** * Renders cursor or selection (depending on what exists) * it does on the contextTop. If contextTop is not available, do nothing. @@ -306,19 +296,10 @@ export class IText extends ITextClickBehaviorMixin { } else { this.renderSelection(ctx, boundaries); } + this.canvas!.contextTopDirty = true; ctx.restore(); } - /** - * Renders cursor on context Top, outside the animation cycle, on request - * Used for the drag/drop effect. - * If contextTop is not available, do nothing. - */ - renderCursorAt(selectionStart) { - const boundaries = this._getCursorBoundaries(selectionStart, true); - this._renderCursor(this.canvas.contextTop, boundaries, selectionStart); - } - /** * Returns cursor boundaries (left, top, leftOffset, topOffset) * left/top are left/top of entire text box @@ -406,6 +387,16 @@ export class IText extends ITextClickBehaviorMixin { return boundaries; } + /** + * Renders cursor on context Top, outside the animation cycle, on request + * Used for the drag/drop effect. + * If contextTop is not available, do nothing. + */ + renderCursorAt(selectionStart: number) { + const boundaries = this._getCursorBoundaries(selectionStart, true); + this._renderCursor(this.canvas.contextTop, boundaries, selectionStart); + } + /** * Renders cursor * @param {Object} boundaries @@ -468,11 +459,7 @@ export class IText extends ITextClickBehaviorMixin { * Renders drag start text selection */ renderDragSourceEffect() { - if ( - this.__isDragging && - this.__dragStartSelection && - this.__dragStartSelection - ) { + if (this.__isDragging && this.__dragStartSelection) { this._renderSelection( this.canvas.contextTop, this.__dragStartSelection, diff --git a/src/shapes/textbox.class.ts b/src/shapes/textbox.class.ts index a30ab866ad7..d7c9f4aac73 100644 --- a/src/shapes/textbox.class.ts +++ b/src/shapes/textbox.class.ts @@ -52,7 +52,6 @@ export class Textbox extends IText { return; } this.isEditing && this.initDelayedCursor(); - this.clearContextTop(); this._clearCache(); // clear dynamicMinWidth as it will be different after we re-wrap line this.dynamicMinWidth = 0; diff --git a/test/lib/visualTestLoop.js b/test/lib/visualTestLoop.js index d8c24f186c2..f6587b21ed1 100644 --- a/test/lib/visualTestLoop.js +++ b/test/lib/visualTestLoop.js @@ -188,7 +188,7 @@ } await fabricCanvas.dispose(); done(); - }); + }, assert); }); } } diff --git a/test/visual/freedraw.js b/test/visual/freedraw.js index 0d62504117d..4c4cb047885 100644 --- a/test/visual/freedraw.js +++ b/test/visual/freedraw.js @@ -3,13 +3,14 @@ canvas.freeDrawingBrush = brush; } var options = { e: { pointerId: 1 } }; - function pointDrawer(points, brush, fireUp = false) { + function pointDrawer(points, brush, fireUp = false, onMove = undefined) { setBrush(brush.canvas, brush); brush.onMouseDown(points[0], options); for (var i = 1; i < points.length; i++) { points[i].x = parseFloat(points[i].x); points[i].y = parseFloat(points[i].y); brush.onMouseMove(points[i], options); + onMove && onMove(points[i], i, points); } if (fireUp) { brush.onMouseUp(options); @@ -2255,6 +2256,31 @@ QUnit.module('Free Drawing', hooks => { } }); + function withText(canvas) { + canvas.add(new fabric.IText('This textbox should NOT\nclear the brush during rendering')); + const brush = new fabric.PencilBrush(canvas); + brush.color = 'red'; + brush.width = 25; + pointDrawer(points, brush, false, (point, index, points) => index === points.length - 1 && canvas.renderAll()); + } + + tests.push({ + test: 'textbox should not clear brush', + build: withText, + golden: 'withText.png', + percentage: 0.02, + width: 200, + height: 250, + fabricClass: 'Canvas', + targets: { + top: true, + main: false, + mesh: true, + result: false, + compare: false + } + }); + tests.forEach(function (test) { var options = Object.assign({}, freeDrawingTestDefaults, test.targets); if (options.top) { diff --git a/test/visual/golden/mesh_withText.png b/test/visual/golden/mesh_withText.png new file mode 100644 index 0000000000000000000000000000000000000000..49ca9acb182d60dcf10d2bcb3693e2690556a8bf GIT binary patch literal 11039 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 m?TscAbKbh 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 Z{C^0(gNnd16ukfd002ovPDHLkV1fsR5Q6{! literal 0 HcmV?d00001 diff --git a/test/visual/golden/textSelectionClearing.png b/test/visual/golden/textSelectionClearing.png new file mode 100644 index 0000000000000000000000000000000000000000..153240362693027a0f35afeecc944ac427d8a797 GIT binary patch literal 12455 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 Ja#{1>{{yY4b(R1C literal 0 HcmV?d00001 diff --git a/test/visual/golden/textSelectionClearing2.png b/test/visual/golden/textSelectionClearing2.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b46b55ad558217377776f7fa8ee271bdb0555b GIT binary patch literal 12642 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 literal 0 HcmV?d00001 diff --git a/test/visual/golden/textSelectionClearing3.png b/test/visual/golden/textSelectionClearing3.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bf1191492e7aba8b6548cdd6757c2a8166c4c8 GIT binary patch literal 14955 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 literal 0 HcmV?d00001 diff --git a/test/visual/golden/top_ctx_withText.png b/test/visual/golden/top_ctx_withText.png new file mode 100644 index 0000000000000000000000000000000000000000..00fec78a57c484ff6fdc1bfb1e46280d3c0a3a5c GIT binary patch literal 8467 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 literal 0 HcmV?d00001 diff --git a/test/visual/text.js b/test/visual/text.js index 20cc2ffbd59..fde1662a968 100644 --- a/test/visual/text.js +++ b/test/visual/text.js @@ -491,5 +491,101 @@ percentage: 0.092, }); + + // sinon could have spied this w/o effort and in one line + class TestTextbox extends fabric.Textbox { + __calledInitDimensions = 0; + initDimensions() { + super.initDimensions(); + this.initialized && this.__calledInitDimensions++; + } + } + + function selectionClearingEdgeCases(canvas, callback, assert) { + const text = new TestTextbox('lorem ipsum dolor sit Amet consectgetur', { + width: 200, + centeredRotation: true + }); + canvas.add(text); + canvas.setActiveObject(text); + text.enterEditing(); + text.selectAll(); + canvas.renderAll(); + text.rotate(90); + text.scale(0.8); + canvas.centerObject(text); + canvas.renderAll(); + assert.equal(text.__calledInitDimensions, 0, 'initDimensions was not called'); + canvas.getContext().drawImage(canvas.upperCanvasEl, 0, 0); + callback(canvas.lowerCanvasEl); + } + + tests.push({ + test: 'Text selection clearing edge cases: transform', + code: selectionClearingEdgeCases, + width: 200, + height: 200, + disabled: fabric.getEnv().isLikelyNode, + golden: 'textSelectionClearing.png', + percentage: 0.02, + fabricClass: 'Canvas' + }); + + function selectionClearingEdgeCases2(canvas, callback, assert) { + const text = new TestTextbox('lorem ipsum dolor sit Amet sit Amet', { + width: 200, + }); + canvas.add(text); + canvas.setActiveObject(text); + text.enterEditing(); + text.selectAll(); + assert.ok(canvas.contextTopDirty, 'flagged as dirty'); + canvas.renderAll(); + text.width = 150; + text._forceClearCache = true; + canvas.renderAll(); + assert.equal(text.__calledInitDimensions, 1, 'initDimensions was called'); + canvas.getContext().drawImage(canvas.upperCanvasEl, 0, 0); + callback(canvas.lowerCanvasEl); + } + + tests.push({ + test: 'Text selection clearing edge cases: changing width, `initDimensions`', + code: selectionClearingEdgeCases2, + width: 200, + height: 200, + disabled: fabric.getEnv().isLikelyNode, + golden: 'textSelectionClearing2.png', + percentage: 0.02, + fabricClass: 'Canvas' + }); + + function selectionClearingEdgeCases3(canvas, callback, assert) { + const text = new TestTextbox('lorem ipsum dolor sit Amet consectgetur', { + width: 200 + }); + canvas.add(text); + canvas.setActiveObject(text); + text.enterEditing(); + text.selectAll(); + canvas.renderAll(); + canvas.setViewportTransform([0.8, 0, 0, 1, 0, 0]); + canvas.renderAll(); + assert.equal(text.__calledInitDimensions, 0, 'initDimensions was not called'); + canvas.getContext().drawImage(canvas.upperCanvasEl, 0, 0); + callback(canvas.lowerCanvasEl); + } + + tests.push({ + test: 'Text selection clearing edge cases: vpt', + code: selectionClearingEdgeCases3, + width: 200, + height: 200, + disabled: fabric.getEnv().isLikelyNode, + golden: 'textSelectionClearing3.png', + percentage: 0.03, + fabricClass: 'Canvas' + }); + tests.forEach(visualTestLoop(QUnit)); })(); From 818a134cb750049d0e1a8013d47a8e90c2eb7d99 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sat, 7 Jan 2023 00:15:34 +0100 Subject: [PATCH 2/9] BREAKING: Remove statefulCache and stateful (#8573) --- CHANGELOG.md | 1 + src/canvas/canvas.class.ts | 2 +- src/canvas/canvas_events.ts | 8 +----- src/canvas/static_canvas.class.ts | 11 -------- src/mixins/stateful.mixin.ts | 12 ++++++-- src/shapes/Object/Object.ts | 45 +++-------------------------- src/shapes/circle.class.ts | 12 +++----- src/shapes/group.class.ts | 24 ---------------- src/shapes/image.class.ts | 11 +++----- src/shapes/line.class.ts | 7 +++-- src/shapes/path.class.ts | 8 +++--- src/shapes/polyline.class.ts | 2 +- src/shapes/rect.class.ts | 3 +- src/shapes/text.class.ts | 10 +++---- test/ts/animation.ts | 10 +------ test/unit/canvas_static.js | 2 -- test/unit/object.js | 15 +--------- test/unit/object_clipPath.js | 47 ------------------------------- test/unit/stateful.js | 36 +++++++++++------------ 19 files changed, 59 insertions(+), 207 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7553f4be0d6..89da59d9f17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- BREAKING: remove Object.stateful and Object.statefulCache [#8573](https://github.com/fabricjs/fabric.js/pull/8573) - fix(IText): refactor clearing context top logic of itext to align with brush pattern, using the canvas rendering cycle in order to guard from edge cases #8560 - fix(Canvas): `_initRetinaScaling` initializaing the scaling regardless of settings in Canvas. [#8565](https://github.com/fabricjs/fabric.js/pull/8565) - fix(Canvas): regression of canvas migration with pointer and sendPointToPlane [#8563](https://github.com/fabricjs/fabric.js/pull/8563) diff --git a/src/canvas/canvas.class.ts b/src/canvas/canvas.class.ts index 95c270f4d76..657889199c8 100644 --- a/src/canvas/canvas.class.ts +++ b/src/canvas/canvas.class.ts @@ -61,7 +61,7 @@ type TDestroyedCanvas = Omit< * @extends StaticCanvas * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas} * - * @fires object:modified at the end of a transform or any change when statefull is true + * @fires object:modified at the end of a transform * @fires object:rotating while an object is being rotated from the control * @fires object:scaling while an object is being scaled by controls * @fires object:moving while an object is being dragged diff --git a/src/canvas/canvas_events.ts b/src/canvas/canvas_events.ts index 142f4991fa8..1f4e5d43a2b 100644 --- a/src/canvas/canvas_events.ts +++ b/src/canvas/canvas_events.ts @@ -989,11 +989,7 @@ export class Canvas extends SelectableCanvas { target.setCoords(); - if ( - transform.actionPerformed || - // @ts-ignore - (this.stateful && target.hasStateChanged()) - ) { + if (transform.actionPerformed) { this.fire('object:modified', options); target.fire('modified', options); } @@ -1184,8 +1180,6 @@ export class Canvas extends SelectableCanvas { */ _beforeTransform(e: TPointerEvent) { const t = this._currentTransform!; - // @ts-ignore - this.stateful && t.target.saveState(); this.fire('before:transform', { e, transform: t, diff --git a/src/canvas/static_canvas.class.ts b/src/canvas/static_canvas.class.ts index c9b1c46dee5..b93f59a817e 100644 --- a/src/canvas/static_canvas.class.ts +++ b/src/canvas/static_canvas.class.ts @@ -122,14 +122,6 @@ export class StaticCanvas< */ includeDefaultValues: boolean; - /** - * Indicates whether objects' state should be saved - * @type Boolean - * @deprecated - * @default - */ - stateful: boolean; - /** * Indicates whether {@link add}, {@link insertAt} and {@link remove}, * {@link moveTo}, {@link clear} and many more, should also re-render canvas. @@ -305,8 +297,6 @@ export class StaticCanvas< } _onObjectAdded(obj: FabricObject) { - // @ts-ignore; - this.stateful && obj.saveState(); if (obj.canvas && obj.canvas !== this) { /* _DEV_MODE_START_ */ console.warn( @@ -1755,7 +1745,6 @@ Object.assign(StaticCanvas.prototype, { overlayColor: '', overlayImage: null, includeDefaultValues: true, - stateful: false, renderOnAddRemove: true, controlsAboveOverlay: false, allowTouchScrolling: false, diff --git a/src/mixins/stateful.mixin.ts b/src/mixins/stateful.mixin.ts index 4bb6818e31e..bb40a02483e 100644 --- a/src/mixins/stateful.mixin.ts +++ b/src/mixins/stateful.mixin.ts @@ -4,6 +4,14 @@ import { extend } from '../util/lang_object'; const originalSet = 'stateProperties'; +/* + * This function was taking care of running isEqual over statePropertie. + * State properties included things that could reference a canvas or a group. + * FabricJS does not support stateful saving anymore apart for a very small number of props for + * Text cache invalidation temporarly. + * So you shouldn't use saveState or hasStateChanged for your own application + * @depreacted + */ function _isEqual(origValue: any, currentValue: any, firstPass = false) { if (origValue === currentValue) { // if the objects are identical, return @@ -57,7 +65,7 @@ export class StatefulMixin { * @param {String} [propertySet] optional name for the set of property we want to save * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called */ - hasStateChanged(propertySet: string = originalSet): boolean { + private hasStateChanged(propertySet: string = originalSet): boolean { const dashedPropertySet = `_${propertySet}`; if ( Object.keys(this[dashedPropertySet] || {}).length < @@ -83,7 +91,7 @@ export class StatefulMixin { * @param {string} [options.propertySet] name for the property set to save * @return {fabric.Object} thisArg */ - saveState( + private saveState( this: FabricObject, { propertySet = originalSet }: TSaveStateOptions = {} ): FabricObject { diff --git a/src/shapes/Object/Object.ts b/src/shapes/Object/Object.ts index 5e9c8ef17d0..f3fe37b6156 100644 --- a/src/shapes/Object/Object.ts +++ b/src/shapes/Object/Object.ts @@ -433,18 +433,6 @@ export class FabricObject< */ objectCaching: boolean; - /** - * When `true`, object properties are checked for cache invalidation. In some particular - * situation you may want this to be disabled ( spray brush, very big, groups) - * or if your application does not allow you to modify properties for groups child you want - * to disable it for groups. - * default to false - * since 1.7.0 - * @type Boolean - * @default false - */ - statefullCache: boolean; - /** * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled * too much and will be redrawn with correct details at the end of scaling. @@ -492,7 +480,7 @@ export class FabricObject< /** * List of properties to consider when checking if cache needs refresh - * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single + * Those properties are checked by * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty * and refreshed at the next render * @type Array @@ -1051,10 +1039,10 @@ export class FabricObject< if (isChanged) { const groupNeedsUpdate = this.group && this.group.isOnACache(); - if (this.cacheProperties.indexOf(key) > -1) { + if (this.cacheProperties.includes(key)) { this.dirty = true; groupNeedsUpdate && this.group.set('dirty', true); - } else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) { + } else if (groupNeedsUpdate && this.stateProperties.includes(key)) { this.group.set('dirty', true); } } @@ -1105,9 +1093,6 @@ export class FabricObject< this._removeCacheCanvas(); this.dirty = false; this.drawObject(ctx); - if (this.objectCaching && this.statefullCache) { - this.saveState({ propertySet: 'cacheProperties' }); - } } ctx.restore(); } @@ -1118,7 +1103,6 @@ export class FabricObject< this._createCacheCanvas(); } if (this.isCacheDirty() && this._cacheContext) { - this.statefullCache && this.saveState({ propertySet: 'cacheProperties' }); this.drawObject(this._cacheContext, options.forClipping); this.dirty = false; } @@ -1315,11 +1299,7 @@ export class FabricObject< // in this case the context is already cleared. return true; } else { - if ( - this.dirty || - (this.clipPath && this.clipPath.absolutePositioned) || - (this.statefullCache && this.hasStateChanged('cacheProperties')) - ) { + if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) { if (this._cacheCanvas && this._cacheContext && !skipCanvas) { const width = this.cacheWidth! / this.zoomX!; const height = this.cacheHeight! / this.zoomY!; @@ -2059,7 +2039,6 @@ export const fabricObjectDefaultValues = { lockScalingFlip: false, excludeFromExport: false, objectCaching: !getEnv().isLikelyNode, - statefullCache: false, noScaleCache: true, strokeUniform: false, dirty: true, @@ -2069,35 +2048,19 @@ export const fabricObjectDefaultValues = { stateProperties: [ 'top', 'left', - 'width', - 'height', 'scaleX', 'scaleY', 'flipX', 'flipY', 'originX', 'originY', - 'transformMatrix', - 'stroke', - 'strokeWidth', - 'strokeDashArray', - 'strokeLineCap', - 'strokeDashOffset', - 'strokeLineJoin', - 'strokeMiterLimit', 'angle', 'opacity', - 'fill', 'globalCompositeOperation', 'shadow', 'visible', - 'backgroundColor', 'skewX', 'skewY', - 'fillRule', - 'paintFirst', - 'clipPath', - 'strokeUniform', ], cacheProperties: [ 'fill', diff --git a/src/shapes/circle.class.ts b/src/shapes/circle.class.ts index f8535faab79..6448efa1a1d 100644 --- a/src/shapes/circle.class.ts +++ b/src/shapes/circle.class.ts @@ -194,16 +194,12 @@ export const circleDefaultValues: Partial> = { radius: 0, startAngle: 0, endAngle: 360, - stateProperties: fabricObjectDefaultValues.stateProperties.concat( + cacheProperties: [ + ...fabricObjectDefaultValues.cacheProperties, 'radius', 'startAngle', - 'endAngle' - ), - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat( - 'radius', - 'startAngle', - 'endAngle' - ), + 'endAngle', + ], }; Object.assign(Circle.prototype, circleDefaultValues); diff --git a/src/shapes/group.class.ts b/src/shapes/group.class.ts index 49c6a06aa18..596ee2178f2 100644 --- a/src/shapes/group.class.ts +++ b/src/shapes/group.class.ts @@ -488,30 +488,6 @@ export class Group extends createCollectionMixin(FabricObject) { this._drawClipPath(ctx, this.clipPath); } - /** - * Check if cache is dirty - */ - isCacheDirty(skipCanvas?: boolean) { - if (super.isCacheDirty(skipCanvas)) { - return true; - } - if (!this.statefullCache) { - return false; - } - for (let i = 0; i < this._objects.length; i++) { - if (this._objects[i].isCacheDirty(true)) { - if (this._cacheCanvas) { - // if this group has not a cache canvas there is nothing to clean - const x = this.cacheWidth / this.zoomX, - y = this.cacheHeight / this.zoomY; - this._cacheContext.clearRect(-x / 2, -y / 2, x, y); - } - return true; - } - } - return false; - } - /** * @override * @return {Boolean} diff --git a/src/shapes/image.class.ts b/src/shapes/image.class.ts index fa6b6fc0b6a..40e9a1a99e7 100644 --- a/src/shapes/image.class.ts +++ b/src/shapes/image.class.ts @@ -777,14 +777,11 @@ export const imageDefaultValues: Partial> = { strokeWidth: 0, srcFromAttribute: false, minimumScaleTrigger: 0.5, - stateProperties: fabricObjectDefaultValues.stateProperties.concat( + cacheProperties: [ + ...fabricObjectDefaultValues.cacheProperties, 'cropX', - 'cropY' - ), - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat( - 'cropX', - 'cropY' - ), + 'cropY', + ], cropX: 0, cropY: 0, imageSmoothing: true, diff --git a/src/shapes/line.class.ts b/src/shapes/line.class.ts index 71bb822872e..467d9adb5cf 100644 --- a/src/shapes/line.class.ts +++ b/src/shapes/line.class.ts @@ -312,12 +312,13 @@ export const lineDefaultValues: Partial> = { y1: 0, x2: 0, y2: 0, - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat( + cacheProperties: [ + ...fabricObjectDefaultValues.cacheProperties, 'x1', 'x2', 'y1', - 'y2' - ), + 'y2', + ], }; Object.assign(Line.prototype, lineDefaultValues); diff --git a/src/shapes/path.class.ts b/src/shapes/path.class.ts index 44f1b614a44..adaca3913d6 100644 --- a/src/shapes/path.class.ts +++ b/src/shapes/path.class.ts @@ -384,11 +384,11 @@ export class Path extends FabricObject { export const pathDefaultValues: Partial> = { type: 'path', path: null, - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat( + cacheProperties: [ + ...fabricObjectDefaultValues.cacheProperties, 'path', - 'fillRule' - ), - stateProperties: fabricObjectDefaultValues.stateProperties.concat('path'), + 'fillRule', + ], }; Object.assign(Path.prototype, pathDefaultValues); diff --git a/src/shapes/polyline.class.ts b/src/shapes/polyline.class.ts index 616b45db660..01bcc48f59d 100644 --- a/src/shapes/polyline.class.ts +++ b/src/shapes/polyline.class.ts @@ -313,7 +313,7 @@ export class Polyline extends FabricObject { export const polylineDefaultValues: Partial> = { type: 'polyline', exactBoundingBox: false, - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat('points'), + cacheProperties: [...fabricObjectDefaultValues.cacheProperties, 'points'], strokeBBoxAffectingProperties: [ 'skewX', 'skewY', diff --git a/src/shapes/rect.class.ts b/src/shapes/rect.class.ts index bb1722201c4..0316d934958 100644 --- a/src/shapes/rect.class.ts +++ b/src/shapes/rect.class.ts @@ -185,11 +185,10 @@ export class Rect extends FabricObject { } export const rectDefaultValues: Partial> = { - stateProperties: fabricObjectDefaultValues.stateProperties.concat('rx', 'ry'), type: 'rect', rx: 0, ry: 0, - cacheProperties: fabricObjectDefaultValues.cacheProperties.concat('rx', 'ry'), + cacheProperties: [...fabricObjectDefaultValues.cacheProperties, 'rx', 'ry'], }; Object.assign(Rect.prototype, rectDefaultValues); diff --git a/src/shapes/text.class.ts b/src/shapes/text.class.ts index b2b16146b6c..9635d3a0b75 100644 --- a/src/shapes/text.class.ts +++ b/src/shapes/text.class.ts @@ -381,7 +381,6 @@ export class Text< } this.initDimensions(); this.setCoords(); - // @ts-ignore this.saveState({ propertySet: '_dimensionAffectingProps' }); } @@ -429,7 +428,6 @@ export class Text< // once text is measured we need to make space fatter to make justified text. this.enlargeSpaces(); } - // @ts-ignore this.saveState({ propertySet: '_dimensionAffectingProps' }); } @@ -1924,10 +1922,10 @@ export const textDefaultValues: Partial> = { baseline: 0.11, // baseline-shift factor (downwards) }, textBackgroundColor: '', - stateProperties: - fabricObjectDefaultValues.stateProperties.concat(additionalProps), - cacheProperties: - fabricObjectDefaultValues.cacheProperties.concat(additionalProps), + cacheProperties: [ + ...fabricObjectDefaultValues.cacheProperties, + ...additionalProps, + ], stroke: null, shadow: null, path: null, diff --git a/test/ts/animation.ts b/test/ts/animation.ts index be5fcd04400..cbaf7df2c71 100644 --- a/test/ts/animation.ts +++ b/test/ts/animation.ts @@ -8,14 +8,6 @@ function assertStrict(assertTrue: IsExact) { animate({ endValue: 3, }); -animate({ - byValue: 2, -}); -// @ts-expect-error only one of (`byValue` | `endValue`) is allowed -animate({ - endValue: 3, - byValue: 2, -}); const context = animate({ startValue: 1, @@ -31,7 +23,7 @@ assertStrict(true); const arrayContext = animate({ startValue: [5], - byValue: [1], + endValue: [1], onChange(a, b, c) { assertStrict(true); assertStrict(true); diff --git a/test/unit/canvas_static.js b/test/unit/canvas_static.js index 4a448d92495..abbc3dfddd6 100644 --- a/test/unit/canvas_static.js +++ b/test/unit/canvas_static.js @@ -195,7 +195,6 @@ assert.ok('backgroundImage' in canvas); assert.ok('overlayImage' in canvas); assert.ok('includeDefaultValues' in canvas); - assert.ok('stateful' in canvas); assert.ok('renderOnAddRemove' in canvas); assert.ok('controlsAboveOverlay' in canvas); assert.ok('allowTouchScrolling' in canvas); @@ -204,7 +203,6 @@ assert.ok('overlayVpt' in canvas); assert.equal(canvas.includeDefaultValues, true); - assert.equal(canvas.stateful, false); assert.equal(canvas.renderOnAddRemove, true); assert.equal(canvas.controlsAboveOverlay, false); assert.equal(canvas.allowTouchScrolling, false); diff --git a/test/unit/object.js b/test/unit/object.js index 837e88b3db6..3acff348df8 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -1084,29 +1084,16 @@ assert.equal(object.dirty, true, 'object is dirty again if cache gets created'); }); - QUnit.test('isCacheDirty statefullCache disabled', function(assert) { + QUnit.test('isCacheDirty', function(assert) { var object = new fabric.Object({ scaleX: 3, scaleY: 2, width: 1, height: 2}); assert.equal(object.dirty, true, 'object is dirty after creation'); object.cacheProperties = ['propA', 'propB']; object.dirty = false; - object.statefullCache = false; assert.equal(object.isCacheDirty(), false, 'object is not dirty if dirty flag is false'); object.dirty = true; assert.equal(object.isCacheDirty(), true, 'object is dirty if dirty flag is true'); }); - QUnit.test('isCacheDirty statefullCache enabled', function(assert) { - var object = new fabric.Object({ scaleX: 3, scaleY: 2, width: 1, height: 2}); - object.cacheProperties = ['propA', 'propB']; - object.dirty = false; - object.statefullCache = true; - object.propA = 'A'; - object.saveState({ propertySet: 'cacheProperties' }); - assert.equal(object.isCacheDirty(), false, 'object is not dirty'); - object.propA = 'B'; - assert.equal(object.isCacheDirty(), true, 'object is dirty because change in propA is detected by statefullCache'); - }); - QUnit.test('_getCacheCanvasDimensions returns dimensions and zoom for cache canvas', function(assert) { var object = new fabric.Object({ width: 10, height: 10, strokeWidth: 0 }); var dims = object._getCacheCanvasDimensions(); diff --git a/test/unit/object_clipPath.js b/test/unit/object_clipPath.js index d77a769747c..220f623b94e 100644 --- a/test/unit/object_clipPath.js +++ b/test/unit/object_clipPath.js @@ -134,51 +134,4 @@ assert.equal(new fabric.Color(canvas.contextContainer.strokeStyle).getAlpha(), 0, 'stroke style is reset'); assert.equal(canvas.contextContainer.globalAlpha, 1, 'globalAlpha is reset'); }); - - QUnit.test('clipPath caching detection', function(assert) { - var cObj = new fabric.Object(); - var clipPath = new fabric.Object(); - cObj.statefullCache = true; - cObj.saveState({ propertySet: 'cacheProperties' }); - var change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, false, 'cache is clean'); - - cObj.clipPath = clipPath; - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, true, 'cache is dirty'); - - cObj.saveState({ propertySet: 'cacheProperties' }); - - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, false, 'cache is clean again'); - - cObj.clipPath.fill = 'red'; - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, true, 'cache change in clipPath is detected'); - }); - - QUnit.test('clipPath caching detection with canvas object', function(assert) { - var canvas = new fabric.StaticCanvas(null, { renderOnAddRemove: false }); - var cObj = new fabric.Rect(); - var clipPath = new fabric.Rect(); - canvas.add(cObj); - clipPath.canvas = canvas; - cObj.statefullCache = true; - cObj.saveState({ propertySet: 'cacheProperties' }); - var change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, false, 'cache is clean - canvas'); - - cObj.clipPath = clipPath; - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, true, 'cache is dirty - canvas'); - - cObj.saveState({ propertySet: 'cacheProperties' }); - - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, false, 'cache is clean again - canvas'); - - cObj.clipPath.fill = 'red'; - change = cObj.hasStateChanged('cacheProperties'); - assert.equal(change, true, 'cache change in clipPath is detected - canvas'); - }); })(); diff --git a/test/unit/stateful.js b/test/unit/stateful.js index 8e80ae60a20..79f999a3860 100644 --- a/test/unit/stateful.js +++ b/test/unit/stateful.js @@ -26,29 +26,29 @@ QUnit.test('saveState with array', function(assert) { var cObj = new fabric.Text('Hello'); cObj.set('strokeDashArray', [0, 4]); - cObj.saveState(); + cObj.saveState({ propertySet: 'cacheProperties' }); //equal(cObj.underline, cObj._stateProperties.underline, 'textDecoration in state is deepEqual'); //notEqual(cObj.textDecoration, cObj._stateProperties.textDecoration, 'textDecoration in not same Object'); cObj.strokeDashArray[0] = 2; - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in nested props'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in nested props'); cObj.saveState(); cObj.strokeDashArray[2] = 2; - assert.ok(cObj.hasStateChanged(), 'more properties added'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'more properties added'); }); QUnit.test('saveState with array to null', function(assert) { var cObj = new fabric.Text('Hello'); cObj.set('strokeDashArray', [0, 4]); - cObj.saveState(); + cObj.saveState({ propertySet: 'cacheProperties' }); //equal(cObj.underline, cObj._stateProperties.underline, 'textDecoration in state is deepEqual'); //notEqual(cObj.textDecoration, cObj._stateProperties.textDecoration, 'textDecoration in not same Object'); cObj.strokeDashArray = null; - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in array without throwing'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in array without throwing'); - cObj.saveState(); + cObj.saveState({ propertySet: 'cacheProperties' }); cObj.strokeDashArray = [2, 3]; - assert.ok(cObj.hasStateChanged(), 'back to array'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'back to array'); }); QUnit.test('saveState with fabric class gradient', function(assert) { @@ -68,18 +68,18 @@ }); cObj.set('fill', '#FF0000'); - cObj.saveState(); + cObj.saveState({ propertySet: 'cacheProperties' }); cObj.set('fill', gradient); - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in nested props'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in nested props'); cObj.saveState(); gradient.type = 'radial'; - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in nested props on first level of nesting'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in nested props on first level of nesting'); cObj.saveState(); gradient.coords.x1 = 3; - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in nested props on second level of nesting'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in nested props on second level of nesting'); cObj.saveState(); gradient.colorStops[0].color = 'blue'; - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in nested props on third level of nesting'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in nested props on third level of nesting'); }); QUnit.test('saveState with fabric class gradient to other types', function(assert) { @@ -99,15 +99,15 @@ }); cObj.set('fill', gradient); - cObj.saveState(); + cObj.saveState({ propertySet: 'cacheProperties' }); cObj.set('fill', 'red'); - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in object to string without throwing'); - cObj.saveState(); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in object to string without throwing'); + cObj.saveState({ propertySet: 'cacheProperties' }); cObj.set('fill', gradient); - assert.ok(cObj.hasStateChanged(), 'back to gradient'); - cObj.saveState(); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'back to gradient'); + cObj.saveState({ propertySet: 'cacheProperties' }); cObj.set('fill', null); - assert.ok(cObj.hasStateChanged(), 'hasStateChanged detects changes in object to null without throwing'); + assert.ok(cObj.hasStateChanged('cacheProperties'), 'hasStateChanged detects changes in object to null without throwing'); }); QUnit.test('savestate with custom property set', function(assert) { From a7696d7c805eccff10e201fccabdb3224284ffda Mon Sep 17 00:00:00 2001 From: luizzappa <65685842+luizzappa@users.noreply.github.com> Date: Sun, 8 Jan 2023 23:27:14 -0300 Subject: [PATCH 3/9] feat(Controls) Add handlers to modify polygon points (#8556) --- CHANGELOG.md | 1 + index.js | 2 + src/controls/polyControl.ts | 135 +++++++++++++++++++++++++++++++++++ src/shapes/polyline.class.ts | 2 +- 4 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 src/controls/polyControl.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 89da59d9f17..c8be8308a19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- feat(PolyControl): modify the shape of a poly with control points [#8556](https://github.com/fabricjs/fabric.js/pull/8556) - BREAKING: remove Object.stateful and Object.statefulCache [#8573](https://github.com/fabricjs/fabric.js/pull/8573) - fix(IText): refactor clearing context top logic of itext to align with brush pattern, using the canvas rendering cycle in order to guard from edge cases #8560 - fix(Canvas): `_initRetinaScaling` initializaing the scaling regardless of settings in Canvas. [#8565](https://github.com/fabricjs/fabric.js/pull/8565) diff --git a/index.js b/index.js index f496a21aacf..a05af7cf7aa 100644 --- a/index.js +++ b/index.js @@ -264,6 +264,7 @@ import { renderSquareControl, } from './src/controls/controls.render'; import { dragHandler } from './src/controls/drag'; +import { createPolyControls } from './src/controls/polyControl'; import { rotationStyleHandler, rotationWithSnapping, @@ -306,6 +307,7 @@ const controlsUtils = { skewHandlerX, skewHandlerY, dragHandler, + createPolyControls, scaleOrSkewActionName, rotationStyleHandler, wrapWithFixedAnchor, diff --git a/src/controls/polyControl.ts b/src/controls/polyControl.ts new file mode 100644 index 00000000000..c2d4df2b605 --- /dev/null +++ b/src/controls/polyControl.ts @@ -0,0 +1,135 @@ +import { Point } from '../point.class'; +import { Control } from './control.class'; +import { TMat2D } from '../typedefs'; +import { iMatrix } from '../constants'; +import type { Polyline } from '../shapes/polyline.class'; +import { multiplyTransformMatrices } from '../util/misc/matrix'; +import { + TPointerEvent, + Transform, + TransformActionHandler, +} from '../EventTypeDefs'; +import { getLocalPoint } from './util'; + +type TTransformAnchor = Transform & { pointIndex: number }; + +const getSize = (poly: Polyline) => { + return new Point(poly.width, poly.height); +}; + +/** + * This function locates the controls. + * It'll be used both for drawing and for interaction. + */ +const factoryPolyPositionHandler = (pointIndex: number) => { + return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) { + const x = polyObject.points[pointIndex].x - polyObject.pathOffset.x, + y = polyObject.points[pointIndex].y - polyObject.pathOffset.y; + return new Point(x, y).transform( + multiplyTransformMatrices( + polyObject.canvas?.viewportTransform ?? iMatrix, + polyObject.calcTransformMatrix() + ) + ); + }; +}; + +/** + * This function defines what the control does. + * It'll be called on every mouse move after a control has been clicked and is being dragged. + * The function receives as argument the mouse event, the current transform object + * and the current position in canvas coordinate `transform.target` is a reference to the + * current object being transformed. + */ +const polyActionHandler = ( + eventData: TPointerEvent, + transform: TTransformAnchor, + x: number, + y: number +) => { + const poly = transform.target as Polyline, + pointIndex = transform.pointIndex, + mouseLocalPosition = getLocalPoint(transform, 'center', 'center', x, y), + polygonBaseSize = getSize(poly), + size = poly._getTransformedDimensions(), + sizeFactor = polygonBaseSize.divide(size), + adjustFlip = new Point(poly.flipX ? -1 : 1, poly.flipY ? -1 : 1); + + const finalPointPosition = mouseLocalPosition + .multiply(adjustFlip) + .multiply(sizeFactor) + .add(poly.pathOffset); + + poly.points[pointIndex] = finalPointPosition; + poly.setDimensions(); + + return true; +}; + +/** + * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`. + */ +const anchorWrapper = ( + pointIndex: number, + fn: TransformActionHandler +) => { + return function ( + eventData: TPointerEvent, + transform: Transform, + x: number, + y: number + ) { + const poly = transform.target as Polyline, + anchorIndex = (pointIndex > 0 ? pointIndex : poly.points.length) - 1, + pointInParentPlane = new Point( + poly.points[anchorIndex].x - poly.pathOffset.x, + poly.points[anchorIndex].y - poly.pathOffset.y + ).transform(poly.calcOwnMatrix()), + actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y), + polygonBaseSize = getSize(poly), + adjustFlip = new Point(poly.flipX ? -1 : 1, poly.flipY ? -1 : 1); + + const newPosition = new Point( + poly.points[anchorIndex].x, + poly.points[anchorIndex].y + ) + .subtract(poly.pathOffset) + .divide(polygonBaseSize) + .multiply(adjustFlip); + + poly.setPositionByOrigin( + pointInParentPlane, + newPosition.x + 0.5, + newPosition.y + 0.5 + ); + return actionPerformed; + }; +}; + +export function createPolyControls( + poly: Polyline, + options?: Partial +): Record; +export function createPolyControls( + numOfControls: number, + options?: Partial +): Record; +export function createPolyControls( + arg0: number | Polyline, + options: Partial = {} +) { + const controls = {} as Record; + for ( + let idx = 0; + idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length); + idx++ + ) { + controls[`p${idx}`] = new Control({ + actionName: 'modifyPoly', + positionHandler: factoryPolyPositionHandler(idx), + actionHandler: anchorWrapper(idx, polyActionHandler), + ...options, + }); + } + return controls; +} diff --git a/src/shapes/polyline.class.ts b/src/shapes/polyline.class.ts index 01bcc48f59d..c4a223e2dd2 100644 --- a/src/shapes/polyline.class.ts +++ b/src/shapes/polyline.class.ts @@ -149,7 +149,7 @@ export class Polyline extends FabricObject { * * @private */ - _getTransformedDimensions(options: any) { + _getTransformedDimensions(options?: any) { return this.exactBoundingBox ? super._getTransformedDimensions({ ...(options || {}), From 862777485659de9d6ec79fc997ec417a2aacc420 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Mon, 9 Jan 2023 09:13:58 +0100 Subject: [PATCH 4/9] refactor(): BREAKING Animation removing byValue, removing fxStraigthenand '+=' syntax (#8547) Co-authored-by: ShaMan123 --- CHANGELOG.md | 1 + index.js | 7 +- src/canvas/static_canvas.class.ts | 5 +- src/parkinglot/straighten.ts | 58 +++++++++ src/shapes/Object/AnimatableObject.ts | 163 +++++--------------------- src/shapes/Object/Object.ts | 3 +- src/util/animation/AnimationBase.ts | 53 ++++----- src/util/animation/ArrayAnimation.ts | 7 +- src/util/animation/ColorAnimation.ts | 49 ++++---- src/util/animation/ValueAnimation.ts | 13 +- src/util/animation/animate.ts | 26 ++-- src/util/animation/index.ts | 5 - src/util/animation/types.ts | 59 ++++------ test/ts/animation.ts | 40 ++++++- test/unit/animation.js | 98 ++++++---------- test/unit/canvas_dispose.js | 2 +- test/unit/object.js | 6 +- 17 files changed, 274 insertions(+), 321 deletions(-) create mode 100644 src/parkinglot/straighten.ts delete mode 100644 src/util/animation/index.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c8be8308a19..081ac731f58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- refactor(Animation): BREAKING: Animation api reduction and semplification (byValue is removed, '+=' syntax is removed, callbacks fired 100%) [#8547](https://github.com/fabricjs/fabric.js/pull/8547) - feat(PolyControl): modify the shape of a poly with control points [#8556](https://github.com/fabricjs/fabric.js/pull/8556) - BREAKING: remove Object.stateful and Object.statefulCache [#8573](https://github.com/fabricjs/fabric.js/pull/8573) - fix(IText): refactor clearing context top logic of itext to align with brush pattern, using the canvas rendering cycle in order to guard from edge cases #8560 diff --git a/index.js b/index.js index a05af7cf7aa..293b081091b 100644 --- a/index.js +++ b/index.js @@ -150,13 +150,12 @@ import { } from './src/util/dom_misc'; import { isTransparent } from './src/util/misc/isTransparent'; import { mergeClipPaths } from './src/util/misc/mergeClipPaths'; +import { animate, animateColor } from './src/util/animation/animate'; +import * as ease from './src/util/animation/easing'; import { - animate, - animateColor, - ease, requestAnimFrame, cancelAnimFrame, -} from './src/util/animation'; +} from './src/util/animation/AnimationFrameProvider'; import { classRegistry } from './src/util/class_registry'; import { removeFromArray } from './src/util/internals/removeFromArray'; import { getRandomInt } from './src/util/internals/getRandomInt'; diff --git a/src/canvas/static_canvas.class.ts b/src/canvas/static_canvas.class.ts index b93f59a817e..76d422845d5 100644 --- a/src/canvas/static_canvas.class.ts +++ b/src/canvas/static_canvas.class.ts @@ -22,7 +22,10 @@ import { TToCanvasElementOptions, TValidToObjectMethod, } from '../typedefs'; -import { cancelAnimFrame, requestAnimFrame } from '../util/animation'; +import { + cancelAnimFrame, + requestAnimFrame, +} from '../util/animation/AnimationFrameProvider'; import { cleanUpJsdomNode, getElementOffset, diff --git a/src/parkinglot/straighten.ts b/src/parkinglot/straighten.ts new file mode 100644 index 00000000000..352fe68eb2c --- /dev/null +++ b/src/parkinglot/straighten.ts @@ -0,0 +1,58 @@ +// @ts-nocheck +import { noop } from '../constants'; +import { FabricObject } from '../shapes/Object/FabricObject'; +import { TDegree } from '../typedefs'; +import { animate } from '../util/animation/animate'; + +Object.assign(FabricObject.prototype, { + /** + * @private + * @return {Number} angle value + */ + _getAngleValueForStraighten(this: FabricObject) { + const angle = this.angle % 360; + if (angle > 0) { + return Math.round((angle - 1) / 90) * 90; + } + return Math.round(angle / 90) * 90; + }, + + /** + * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer) + */ + straighten(this: FabricObject) { + this.rotate(this._getAngleValueForStraighten()); + }, + + /** + * Same as {@link straighten} but with animation + * @param {Object} callbacks Object with callback functions + * @param {Function} [callbacks.onComplete] Invoked on completion + * @param {Function} [callbacks.onChange] Invoked on every step of animation + */ + fxStraighten( + this: FabricObject, + callbacks: { + onChange?(value: TDegree): any; + onComplete?(): any; + } = {} + ) { + const onComplete = callbacks.onComplete || noop, + onChange = callbacks.onChange || noop; + + return animate({ + target: this, + startValue: this.angle, + endValue: this._getAngleValueForStraighten(), + duration: this.FX_DURATION, + onChange: (value: TDegree) => { + this.rotate(value); + onChange(value); + }, + onComplete: () => { + this.setCoords(); + onComplete(); + }, + }); + }, +}); diff --git a/src/shapes/Object/AnimatableObject.ts b/src/shapes/Object/AnimatableObject.ts index 6590d666e4d..6daacfd9094 100644 --- a/src/shapes/Object/AnimatableObject.ts +++ b/src/shapes/Object/AnimatableObject.ts @@ -1,39 +1,28 @@ import { TColorArg } from '../../color/color.class'; -import { noop } from '../../constants'; import { ObjectEvents } from '../../EventTypeDefs'; -import { TDegree } from '../../typedefs'; -import { - animate, - animateColor, - AnimationOptions, +import { animate, animateColor } from '../../util/animation/animate'; +import type { + ValueAnimationOptions, ColorAnimationOptions, -} from '../../util/animation'; +} from '../../util/animation/types'; +import { ArrayAnimation } from '../../util/animation/ArrayAnimation'; import type { ColorAnimation } from '../../util/animation/ColorAnimation'; import type { ValueAnimation } from '../../util/animation/ValueAnimation'; import { StackedObject } from './StackedObject'; type TAnimationOptions = T extends number - ? AnimationOptions + ? ValueAnimationOptions : ColorAnimationOptions; export abstract class AnimatableObject< EventSpec extends ObjectEvents = ObjectEvents > extends StackedObject { - /** - * Animation duration (in ms) for fx* methods - * @type Number - * @default - */ - FX_DURATION: number; - /** * List of properties to consider for animating colors. * @type String[] */ colorProperties: string[]; - abstract rotate(deg: TDegree): void; - /** * Animates object's properties * @param {String|Object} property Property to animate (if string) or properties to animate (if object) @@ -45,46 +34,13 @@ export abstract class AnimatableObject< * * object.animate({ left: ..., top: ... }); * object.animate({ left: ..., top: ... }, { duration: ... }); - * - * As string — one property - * Supports +=N and -=N for animating N units in a given direction - * - * object.animate('left', ...); - * object.animate('left', ..., { duration: ... }); - * - * Example of +=/-= - * object.animate('right', '-=50'); - * object.animate('top', '+=50', { duration: ... }); */ - animate( - key: string, - toValue: T, - options?: Partial> - ): (ColorAnimation | ValueAnimation)[]; animate( animatable: Record, options?: Partial> - ): (ColorAnimation | ValueAnimation)[]; - animate>( - arg0: S, - arg1: S extends string ? T : Partial>, - arg2?: S extends string ? Partial> : never - ): (ColorAnimation | ValueAnimation)[] { - const animatable = ( - typeof arg0 === 'string' ? { [arg0]: arg1 } : arg0 - ) as Record; - const keys = Object.keys(animatable); - const options = (typeof arg0 === 'string' ? arg2 : arg1) as Partial< - TAnimationOptions - >; - return keys.map((key, index) => - this._animate( - key, - animatable[key], - index === keys.length - 1 - ? options - : { ...options, onChange: undefined, onComplete: undefined } - ) + ): (ColorAnimation | ValueAnimation | ArrayAnimation)[] { + return Object.entries(animatable).map(([key, endValue]) => + this._animate(key, endValue, options) ); } @@ -96,41 +52,26 @@ export abstract class AnimatableObject< */ _animate( key: string, - to: T, + endValue: T, options: Partial> = {} ) { const path = key.split('.'); const propIsColor = this.colorProperties.includes(path[path.length - 1]); - const currentValue = path.reduce((deep: any, key) => deep[key], this); - - if (!propIsColor && typeof to === 'string') { - // check for things like +=50 - // which should animate so that the thing moves by 50 units in the positive direction - to = to.includes('=') - ? currentValue + parseFloat(to.replace('=', '')) - : parseFloat(to); - } - + const { easing, duration, abort, startValue, onChange, onComplete } = + options; const animationOptions = { target: this, + // path.reduce... is the current value in case start value isn't provided startValue: - options.startValue ?? - // backward compat - (options as any).from ?? - currentValue, - endValue: to, - // `byValue` takes precedence over `endValue` - byValue: - options.byValue ?? - // backward compat - (options as any).by, - easing: options.easing, - duration: options.duration, - abort: options.abort?.bind(this), + startValue ?? path.reduce((deep: any, key) => deep[key], this), + endValue, + easing, + duration, + abort: abort?.bind(this), onChange: ( value: string | number, - valueRatio: number, - durationRatio: number + valueProgress: number, + durationProgress: number ) => { path.reduce((deep: Record, key, index) => { if (index === path.length - 1) { @@ -138,76 +79,26 @@ export abstract class AnimatableObject< } return deep[key]; }, this); - options.onChange && + onChange && // @ts-expect-error generic callback arg0 is wrong - options.onChange(value, valueRatio, durationRatio); + onChange(value, valueProgress, durationProgress); }, onComplete: ( value: string | number, - valueRatio: number, - durationRatio: number + valueProgress: number, + durationProgress: number ) => { this.setCoords(); - options.onComplete && + onComplete && // @ts-expect-error generic callback arg0 is wrong - options.onComplete(value, valueRatio, durationRatio); + onComplete(value, valueProgress, durationProgress); }, } as TAnimationOptions; if (propIsColor) { return animateColor(animationOptions as ColorAnimationOptions); } else { - return animate(animationOptions as AnimationOptions); + return animate(animationOptions as ValueAnimationOptions); } } - - /** - * @private - * @return {Number} angle value - */ - protected _getAngleValueForStraighten() { - const angle = this.angle % 360; - if (angle > 0) { - return Math.round((angle - 1) / 90) * 90; - } - return Math.round(angle / 90) * 90; - } - - /** - * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer) - */ - straighten() { - this.rotate(this._getAngleValueForStraighten()); - } - - /** - * Same as {@link straighten} but with animation - * @param {Object} callbacks Object with callback functions - * @param {Function} [callbacks.onComplete] Invoked on completion - * @param {Function} [callbacks.onChange] Invoked on every step of animation - */ - fxStraighten( - callbacks: { - onChange?(value: TDegree): any; - onComplete?(): any; - } = {} - ) { - const onComplete = callbacks.onComplete || noop, - onChange = callbacks.onChange || noop; - - return animate({ - target: this, - startValue: this.angle, - endValue: this._getAngleValueForStraighten(), - duration: this.FX_DURATION, - onChange: (value: TDegree) => { - this.rotate(value); - onChange(value); - }, - onComplete: () => { - this.setCoords(); - onComplete(); - }, - }); - } } diff --git a/src/shapes/Object/Object.ts b/src/shapes/Object/Object.ts index f3fe37b6156..d40446196bc 100644 --- a/src/shapes/Object/Object.ts +++ b/src/shapes/Object/Object.ts @@ -15,7 +15,7 @@ import type { TCacheCanvasDimensions, } from '../../typedefs'; import { classRegistry } from '../../util/class_registry'; -import { runningAnimations } from '../../util/animation'; +import { runningAnimations } from '../../util/animation/AnimationRegistry'; import { clone } from '../../util/lang_object'; import { capitalize } from '../../util/lang_string'; import { capValue } from '../../util/misc/capValue'; @@ -2082,7 +2082,6 @@ export const fabricObjectDefaultValues = { clipPath: undefined, inverted: false, absolutePositioned: false, - FX_DURATION: 500, }; Object.assign(FabricObject.prototype, fabricObjectDefaultValues); diff --git a/src/util/animation/AnimationBase.ts b/src/util/animation/AnimationBase.ts index ec358a2ab99..c83ea2615ef 100644 --- a/src/util/animation/AnimationBase.ts +++ b/src/util/animation/AnimationBase.ts @@ -5,9 +5,7 @@ import { defaultEasing } from './easing'; import { AnimationState, TAbortCallback, - TAnimationBaseOptions, - TAnimationCallbacks, - TAnimationValues, + TBaseAnimationOptions, TEasingFunction, TOnAnimationChangeCallback, } from './types'; @@ -18,10 +16,11 @@ export abstract class AnimationBase< T extends number | number[] = number | number[] > { readonly startValue: T; - readonly byValue: T; readonly endValue: T; readonly duration: number; readonly delay: number; + + protected readonly byValue: T; protected readonly easing: TEasingFunction; private readonly _onStart: VoidFunction; @@ -40,11 +39,11 @@ export abstract class AnimationBase< * Time %, or the ratio of `timeElapsed / duration` * @see tick */ - durationRatio = 0; + durationProgress = 0; /** * Value %, or the ratio of `(currentValue - startValue) / (endValue - startValue)` */ - valueRatio = 0; + valueProgress = 0; /** * Current value */ @@ -54,12 +53,6 @@ export abstract class AnimationBase< */ private startTime!: number; - /** - * Constructor - * Since both `byValue` and `endValue` are accepted in subclass options - * and are populated with defaults if missing, we defer to `byValue` and - * ignore `endValue` to avoid conflict - */ constructor({ startValue, byValue, @@ -71,8 +64,7 @@ export abstract class AnimationBase< onComplete = noop, abort = defaultAbort, target, - }: Partial & TAnimationCallbacks> & - Required, 'endValue'>>) { + }: TBaseAnimationOptions) { this.tick = this.tick.bind(this); this.duration = duration; @@ -87,7 +79,7 @@ export abstract class AnimationBase< this.startValue = startValue; this.byValue = byValue; this.value = this.startValue; - this.endValue = this.calculate(this.duration).value; + this.endValue = Object.freeze(this.calculate(this.duration).value); } get state() { @@ -101,7 +93,7 @@ export abstract class AnimationBase< */ protected abstract calculate(timeElapsed: number): { value: T; - changeRatio: number; + valueProgress: number; }; start() { @@ -127,29 +119,30 @@ export abstract class AnimationBase< private tick(t: number) { const durationMs = (t || +new Date()) - this.startTime; const boundDurationMs = Math.min(durationMs, this.duration); - this.durationRatio = boundDurationMs / this.duration; - const { value, changeRatio } = this.calculate(boundDurationMs); - this.value = Array.isArray(value) ? (value.slice() as T) : value; - this.valueRatio = changeRatio; + this.durationProgress = boundDurationMs / this.duration; + const { value, valueProgress } = this.calculate(boundDurationMs); + this.value = Object.freeze(value); + this.valueProgress = valueProgress; if (this._state === 'aborted') { return; - } else if (this._abort(value, this.valueRatio, this.durationRatio)) { + } else if ( + this._abort(this.value, this.valueProgress, this.durationProgress) + ) { this._state = 'aborted'; this.unregister(); } else if (durationMs >= this.duration) { - const endValue = this.endValue; - this.durationRatio = this.valueRatio = 1; - this._onChange( - (Array.isArray(endValue) ? endValue.slice() : endValue) as T, - this.valueRatio, - this.durationRatio - ); + this.durationProgress = this.valueProgress = 1; + this._onChange(this.endValue, this.valueProgress, this.durationProgress); this._state = 'completed'; - this._onComplete(endValue, this.valueRatio, this.durationRatio); + this._onComplete( + this.endValue, + this.valueProgress, + this.durationProgress + ); this.unregister(); } else { - this._onChange(value, this.valueRatio, this.durationRatio); + this._onChange(this.value, this.valueProgress, this.durationProgress); requestAnimFrame(this.tick); } } diff --git a/src/util/animation/ArrayAnimation.ts b/src/util/animation/ArrayAnimation.ts index 8d519715bb5..57470f8a175 100644 --- a/src/util/animation/ArrayAnimation.ts +++ b/src/util/animation/ArrayAnimation.ts @@ -5,13 +5,12 @@ export class ArrayAnimation extends AnimationBase { constructor({ startValue = [0], endValue = [100], - byValue = endValue.map((value, i) => value - startValue[i]), ...options }: ArrayAnimationOptions) { super({ ...options, startValue, - byValue, + byValue: endValue.map((value, i) => value - startValue[i]), }); } protected calculate(timeElapsed: number) { @@ -20,7 +19,9 @@ export class ArrayAnimation extends AnimationBase { ); return { value: values, - changeRatio: Math.abs((values[0] - this.startValue[0]) / this.byValue[0]), + valueProgress: Math.abs( + (values[0] - this.startValue[0]) / this.byValue[0] + ), }; } } diff --git a/src/util/animation/ColorAnimation.ts b/src/util/animation/ColorAnimation.ts index ea4c67ffe4b..2b7f3c0a0e7 100644 --- a/src/util/animation/ColorAnimation.ts +++ b/src/util/animation/ColorAnimation.ts @@ -1,26 +1,36 @@ import { Color } from '../../color/color.class'; import { TRGBAColorSource } from '../../color/color.class'; +import { halfPI } from '../../constants'; import { capValue } from '../misc/capValue'; import { AnimationBase } from './AnimationBase'; -import { ColorAnimationOptions, TOnAnimationChangeCallback } from './types'; +import type { + ColorAnimationOptions, + TEasingFunction, + TOnAnimationChangeCallback, +} from './types'; + +const defaultColorEasing: TEasingFunction = ( + timeElapsed, + startValue, + byValue, + duration +) => { + const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI); + return startValue + byValue * durationProgress; +}; const wrapColorCallback = ( callback?: TOnAnimationChangeCallback ) => callback && - ((rgba: TRGBAColorSource, valueRatio: number, durationRatio: number) => - callback(new Color(rgba).toRgba(), valueRatio, durationRatio)); + ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) => + callback(new Color(rgba).toRgba(), valueProgress, durationProgress)); export class ColorAnimation extends AnimationBase { constructor({ startValue, endValue, - byValue, - easing = (timeElapsed, startValue, byValue, duration) => { - const durationRatio = - 1 - Math.cos((timeElapsed / duration) * (Math.PI / 2)); - return startValue + byValue * durationRatio; - }, + easing = defaultColorEasing, onChange, onComplete, abort, @@ -31,13 +41,9 @@ export class ColorAnimation extends AnimationBase { super({ ...options, startValue: startColor, - byValue: byValue - ? new Color(byValue) - .setAlpha(Array.isArray(byValue) && byValue[3] ? byValue[3] : 0) - .getSource() - : (endColor.map( - (value, i) => value - startColor[i] - ) as TRGBAColorSource), + byValue: endColor.map( + (value, i) => value - startColor[i] + ) as TRGBAColorSource, easing, onChange: wrapColorCallback(onChange), onComplete: wrapColorCallback(onComplete), @@ -48,12 +54,15 @@ export class ColorAnimation extends AnimationBase { const [r, g, b, a] = this.startValue.map((value, i) => this.easing(timeElapsed, value, this.byValue[i], this.duration, i) ) as TRGBAColorSource; - const rgb = [r, g, b].map(Math.round); + const value = [ + ...[r, g, b].map(Math.round), + capValue(0, a, 1), + ] as TRGBAColorSource; return { - value: [...rgb, capValue(0, a, 1)] as TRGBAColorSource, - changeRatio: + value, + valueProgress: // to correctly calculate the change ratio we must find a changed value - rgb + value .map((p, i) => this.byValue[i] !== 0 ? Math.abs((p - this.startValue[i]) / this.byValue[i]) diff --git a/src/util/animation/ValueAnimation.ts b/src/util/animation/ValueAnimation.ts index e0d329b49c5..45fd25de64c 100644 --- a/src/util/animation/ValueAnimation.ts +++ b/src/util/animation/ValueAnimation.ts @@ -1,17 +1,16 @@ import { AnimationBase } from './AnimationBase'; -import { AnimationOptions } from './types'; +import { ValueAnimationOptions } from './types'; export class ValueAnimation extends AnimationBase { constructor({ startValue = 0, endValue = 100, - byValue = endValue - startValue, - ...options - }: AnimationOptions) { + ...otherOptions + }: ValueAnimationOptions) { super({ - ...options, + ...otherOptions, startValue, - byValue, + byValue: endValue - startValue, }); } @@ -24,7 +23,7 @@ export class ValueAnimation extends AnimationBase { ); return { value, - changeRatio: Math.abs((value - this.startValue) / this.byValue), + valueProgress: Math.abs((value - this.startValue) / this.byValue), }; } } diff --git a/src/util/animation/animate.ts b/src/util/animation/animate.ts index cfcb17fd23e..27be4466537 100644 --- a/src/util/animation/animate.ts +++ b/src/util/animation/animate.ts @@ -2,19 +2,15 @@ import { ValueAnimation } from './ValueAnimation'; import { ArrayAnimation } from './ArrayAnimation'; import { ColorAnimation } from './ColorAnimation'; import { - AnimationOptions, + ValueAnimationOptions, ArrayAnimationOptions, ColorAnimationOptions, } from './types'; const isArrayAnimation = ( - options: ArrayAnimationOptions | AnimationOptions + options: ArrayAnimationOptions | ValueAnimationOptions ): options is ArrayAnimationOptions => { - return ( - Array.isArray(options.startValue) || - Array.isArray(options.endValue) || - Array.isArray(options.byValue) - ); + return Array.isArray(options.startValue) || Array.isArray(options.endValue); }; /** @@ -43,12 +39,12 @@ const isArrayAnimation = ( * }); * */ -export const animate = < - T extends AnimationOptions | ArrayAnimationOptions, +export function animate(options: ArrayAnimationOptions): ArrayAnimation; +export function animate(options: ValueAnimationOptions): ValueAnimation; +export function animate< + T extends ValueAnimationOptions | ArrayAnimationOptions, R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation ->( - options: T -): R => { +>(options: T): R { const animation = ( isArrayAnimation(options) ? new ArrayAnimation(options) @@ -56,10 +52,10 @@ export const animate = < ) as R; animation.start(); return animation; -}; +} -export const animateColor = (options: ColorAnimationOptions) => { +export function animateColor(options: ColorAnimationOptions) { const animation = new ColorAnimation(options); animation.start(); return animation; -}; +} diff --git a/src/util/animation/index.ts b/src/util/animation/index.ts deleted file mode 100644 index f1fea7f06de..00000000000 --- a/src/util/animation/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './animate'; -export * from './AnimationFrameProvider'; -export * from './AnimationRegistry'; -export * as ease from './easing'; -export * from './types'; diff --git a/src/util/animation/types.ts b/src/util/animation/types.ts index b5c3af11004..b3e88245d59 100644 --- a/src/util/animation/types.ts +++ b/src/util/animation/types.ts @@ -5,13 +5,14 @@ export type AnimationState = 'pending' | 'running' | 'completed' | 'aborted'; /** * Callback called every frame * @param {number | number[]} value current value of the animation. - * @param valueRatio ∈ [0, 1], current value / end value. - * @param durationRatio ∈ [0, 1], time passed / duration. + * @param {number} valueProgress ∈ [0, 1], the current animation progress reflected on value, normalized. + * 0 is the starting value and 1 is the ending value. + * @param {number} durationProgress ∈ [0, 1], the current animation duration normalized to 1. */ export type TOnAnimationChangeCallback = ( value: T, - valueRatio: number, - durationRatio: number + valueProgress: number, + durationProgress: number ) => R; /** @@ -50,19 +51,19 @@ export type TAnimationBaseOptions = { * Duration of the animation in ms * @default 500 */ - duration?: number; + duration: number; /** * Delay to start the animation in ms * @default 0 */ - delay?: number; + delay: number; /** * Easing function * @default {defaultEasing} */ - easing?: TEasingFunction; + easing: TEasingFunction; /** * The object this animation is being performed on @@ -93,41 +94,31 @@ export type TAnimationCallbacks = { abort: TAbortCallback; }; -export type TAnimationValues = - | { +export type TBaseAnimationOptions = Partial< + TAnimationBaseOptions & TAnimationCallbacks +> & { + startValue: T; + byValue: T; +}; + +export type TAnimationOptions = Partial< + TAnimationBaseOptions & + TAnimationCallbacks & { /** * Starting value(s) * @default 0 */ startValue: T; - } & ( - | { - /** - * Ending value(s) - * Ignored if `byValue` exists - * @default 100 - */ - endValue: T; - byValue?: never; - } - | { - /** - * Difference between the start value(s) to the end value(s) - * Overrides `endValue` - * @default [endValue - startValue] - */ - byValue: T; - endValue?: never; - } - ); -export type TAnimationOptions = Partial< - TAnimationBaseOptions & - TAnimationValues & - TAnimationCallbacks + /** + * Ending value(s) + * @default 100 + */ + endValue: T; + } >; -export type AnimationOptions = TAnimationOptions; +export type ValueAnimationOptions = TAnimationOptions; export type ArrayAnimationOptions = TAnimationOptions; diff --git a/test/ts/animation.ts b/test/ts/animation.ts index cbaf7df2c71..cfb40f19b71 100644 --- a/test/ts/animation.ts +++ b/test/ts/animation.ts @@ -1,5 +1,6 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { IsExact } from 'conditional-type-checks'; -import { animate } from '../../src/util/animation'; +import { animate } from '../../src/util/animation/animate'; function assertStrict(assertTrue: IsExact) { return assertTrue; @@ -8,6 +9,19 @@ function assertStrict(assertTrue: IsExact) { animate({ endValue: 3, }); +animate({ + // @ts-expect-error `byValue` is not part of options + byValue: 2, +}); +// @ts-expect-error `byValue` is not part of options +animate({ + byValue: 2, + endValue: 3, +}); +animate({ + // @ts-expect-error `foo` is not part of options + foo: 'bar', +}) const context = animate({ startValue: 1, @@ -32,3 +46,27 @@ const arrayContext = animate({ }); assertStrict(true); + +const mixedContextError = animate({ + startValue: [5], + // @ts-expect-error mixed context + endValue: 1, + onChange(a, b, c) { + assertStrict(true); + assertStrict(true); + assertStrict(true); + }, +}); + +const mixedContextError2 = animate({ + // @ts-expect-error mixed context + startValue: 5, + endValue: [1], + onChange(a, b, c) { + assertStrict(true); + assertStrict(true); + assertStrict(true); + }, +}); + + diff --git a/test/unit/animation.js b/test/unit/animation.js index f980ef483c1..e2f1a534f5f 100644 --- a/test/unit/animation.js +++ b/test/unit/animation.js @@ -40,24 +40,14 @@ let called = false; fabric.util.animateColor({ startValue: 'red', - endValue: 'magenta', + endValue: 'blue', duration: 96, onChange: function (val, changePerc) { called && assert.ok(changePerc !== 0, 'change percentage'); called = true; }, - onComplete: done, - }); - }); - - QUnit.test('animateColor byValue', function (assert) { - var done = assert.async(); - fabric.util.animateColor({ - startValue: 'red', - byValue: 'blue', - duration: 16, onComplete: function (val, changePerc, timePerc) { - assert.equal(val, 'rgba(255,0,255,1)', 'color is magenta'); + assert.equal(val, 'rgba(0,0,255,1)', 'color is blue'); assert.equal(changePerc, 1, 'change percentage is 100%'); assert.equal(timePerc, 1, 'time percentage is 100%'); done(); @@ -65,14 +55,14 @@ }); }); - QUnit.test('animateColor byValue with ignored opacity', function (assert) { + QUnit.test('animateColor with opacity', function (assert) { var done = assert.async(); fabric.util.animateColor({ - startValue: 'rgba(255,0,0,0.5)', - byValue: 'rgba(0,0,255,0.5)', + startValue: 'rgba(255, 0, 0, 0.9)', + endValue: 'rgba(0, 0, 255, 0.7)', duration: 16, onComplete: function (val, changePerc, timePerc) { - assert.equal(val, 'rgba(255,0,255,0.5)', 'color is magenta'); + assert.equal(val, 'rgba(0,0,255,0.7)', 'color is animated on all 4 values'); assert.equal(changePerc, 1, 'change percentage is 100%'); assert.equal(timePerc, 1, 'time percentage is 100%'); done(); @@ -80,14 +70,17 @@ }); }); - QUnit.test('animateColor byValue with opacity', function (assert) { + QUnit.test('animateColor, opacity out of bounds value are ignored', function (assert) { var done = assert.async(); fabric.util.animateColor({ startValue: 'red', - byValue: [0, 0, 255, -0.5], + endValue: [255, 255, 255, 3], duration: 16, + onChange: val => { + assert.equal(new fabric.Color(val).getAlpha(), 1, 'alpha diff should be ignored') + }, onComplete: function (val, changePerc, timePerc) { - assert.equal(val, 'rgba(255,0,255,0.5)', 'color is magenta'); + assert.equal(val, 'rgba(255,255,255,1)', 'color is normalized to max values'); assert.equal(changePerc, 1, 'change percentage is 100%'); assert.equal(timePerc, 1, 'time percentage is 100%'); done(); @@ -95,33 +88,36 @@ }); }); - QUnit.test('animateColor byValue with wrong opacity is ignored', function (assert) { + QUnit.test('animateColor opacity only', function (assert) { var done = assert.async(); + let called = false; fabric.util.animateColor({ - startValue: 'red', - byValue: [0, 0, 255, 0.5], - duration: 16, - onChange: val => { - assert.equal(new fabric.Color(val).getAlpha(), 1, 'alpha diff should be ignored') + startValue: 'rgba(255, 0, 0, 0.9)', + endValue: 'rgba(255, 0, 0, 0.7)', + duration: 96, + onChange: function (val, changePerc) { + const alpha = new fabric.Color(val).getAlpha(); + assert.equal(changePerc, (0.9 - alpha) / (0.9 - 0.7), 'valueProgress should match'); + called = true; }, onComplete: function (val, changePerc, timePerc) { - assert.equal(val, 'rgba(255,0,255,1)', 'color is magenta'); + assert.equal(val, 'rgba(255,0,0,0.7)', 'color is animated on all 4 values'); assert.equal(changePerc, 1, 'change percentage is 100%'); assert.equal(timePerc, 1, 'time percentage is 100%'); + assert.ok(called); done(); } }); }); - QUnit.test('byValue', function (assert) { + QUnit.test('endValue', function (assert) { var done = assert.async(); fabric.util.animate({ - startValue: 0, - byValue: 10, + startValue: 2, endValue: 5, duration: 16, onComplete: function (val, changePerc, timePerc) { - assert.equal(val, 10, 'endValue is ignored'); + assert.equal(val, 5, 'endValue is respected'); assert.equal(changePerc, 1, 'change percentage is 100%'); assert.equal(timePerc, 1, 'time percentage is 100%'); done(); @@ -273,7 +269,7 @@ assert.ok(typeof object.animate === 'function'); - object.animate('left', 40); + object.animate({ left: 40 }); assert.ok(true, 'animate without options does not crash'); assert.equal(fabric.runningAnimations.length, 1, 'should have 1 registered animation'); assert.equal(fabric.runningAnimations[0].target, object, 'animation.target should be set'); @@ -290,7 +286,7 @@ var done = assert.async(); var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 43 }); - object.animate('left', '+=40'); + object.animate({ left: object.left + 40 }); assert.ok(true, 'animate without options does not crash'); setTimeout(function() { @@ -304,7 +300,7 @@ var done = assert.async(); var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 43, shadow: { offsetX: 20 } }); - object.animate('shadow.offsetX', 100); + object.animate({ 'shadow.offsetX': 100 }); assert.ok(true, 'animate without options does not crash'); setTimeout(function() { @@ -319,7 +315,7 @@ properties.forEach(function (prop, index) { object.set(prop, 'red'); - object.animate(prop, 'blue'); + object.animate({ [prop]: 'blue' }); assert.ok(true, 'animate without options does not crash'); assert.equal(fabric.runningAnimations.length, index + 1, 'should have 1 registered animation'); assert.equal(findAnimationsByTarget(object).length, index + 1, 'animation.target should be set'); @@ -338,7 +334,7 @@ var done = assert.async(); var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 43 }); - object.animate('left', '-=40'); + object.animate({ left: object.left - 40 }); assert.ok(true, 'animate without options does not crash'); setTimeout(function() { @@ -348,23 +344,6 @@ }, 1000); }); - QUnit.test('animate with object', function(assert) { - var done = assert.async(); - var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 43 }); - - assert.ok(typeof object.animate === 'function'); - - object.animate({ left: 40}); - assert.ok(true, 'animate without options does not crash'); - assert.equal(fabric.runningAnimations.length, 1, 'should have 1 registered animation'); - assert.equal(findAnimationsByTarget(object).length, 1, 'animation.target should be set'); - - setTimeout(function() { - assert.equal(40, Math.round(object.left)); - done(); - }, 1000); - }); - QUnit.test('animate multiple properties', function(assert) { var done = assert.async(); var object = new fabric.Object({ left: 123, top: 124 }); @@ -399,7 +378,7 @@ assert.equal(Math.round(object.get('top')), 1); assert.ok(changedInvocations > 0); - assert.equal(completeInvocations, 1); + assert.equal(completeInvocations, 2, 'the callbacks get call for each animation'); done(); @@ -413,23 +392,24 @@ fabric.util.animate({ startValue: [1, 2, 3], endValue: [2, 4, 6], - byValue: [1, 2, 3], duration: 96, - onChange: function(currentValue) { + onChange: function(currentValue, valueProgress) { assert.equal(fabric.runningAnimations.length, 1, 'runningAnimations should not be empty'); assert.ok(Array.isArray(currentValue), 'should be array'); - assert.ok(fabric.runningAnimations[0].value !== currentValue, 'should not share array'); + assert.ok(Object.isFrozen(fabric.runningAnimations[0].value), 'should be frozen'); assert.deepEqual(fabric.runningAnimations[0].value, currentValue); assert.equal(currentValue.length, 3); currentValue.forEach(function(v) { assert.ok(v > 0, 'confirm values are not invalid numbers'); }) + assert.equal(valueProgress, currentValue[0] - 1, 'should match'); // Make sure mutations are not kept assert.ok(currentValue[0] <= 2, 'mutating callback values must not persist'); currentValue[0] = 200; run = true; }, - onComplete: function(endValue) { + onComplete: function (endValue) { + assert.ok(Object.isFrozen(endValue), 'should be frozen'); assert.equal(endValue.length, 3); assert.deepEqual(endValue, [2, 4, 6]); assert.equal(run, true, 'something run'); @@ -442,14 +422,14 @@ var done = assert.async(); var object = new fabric.Object({ left: 123, top: 124 }); - var context; + var context; object.animate({ left: 223, top: 224 }, { abort: function() { context = this; return true; } }); - + setTimeout(function() { assert.equal(123, Math.round(object.get('left'))); assert.equal(124, Math.round(object.get('top'))); diff --git a/test/unit/canvas_dispose.js b/test/unit/canvas_dispose.js index f53575eba74..7a3eee8ee08 100644 --- a/test/unit/canvas_dispose.js +++ b/test/unit/canvas_dispose.js @@ -208,7 +208,7 @@ function testCanvasDisposing() { assert.ok(typeof canvas.dispose === 'function'); assert.ok(typeof canvas.destroy === 'function'); canvas.add(makeRect(), makeRect(), makeRect()); - canvas.item(0).animate('scaleX', 10); + canvas.item(0).animate({ scaleX: 10 }); assert.equal(fabric.runningAnimations.length, 1, 'should have a running animation'); await canvas.dispose(); assert.equal(fabric.runningAnimations.length, 0, 'dispose should clear running animations'); diff --git a/test/unit/object.js b/test/unit/object.js index 3acff348df8..f079ee380b9 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -511,7 +511,7 @@ assert.equal(canvas.contextContainer.getLineDash().length, 6, 'bailed immediately as array empty'); }); - QUnit.test('straighten', function(assert) { + QUnit.skip('straighten', function(assert) { var object = new fabric.Object({ left: 100, top: 124, width: 210, height: 66 }); assert.ok(typeof object.straighten === 'function'); @@ -540,7 +540,7 @@ assert.equal(object.get('angle'), 270); }); - QUnit.test('fxStraighten', function(assert) { + QUnit.skip('fxStraighten', function(assert) { var done = assert.async(); var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 43 }); @@ -1417,7 +1417,7 @@ QUnit.test('dispose', function (assert) { var object = new fabric.Object({ fill: 'blue', width: 100, height: 100 }); assert.ok(typeof object.dispose === 'function'); - object.animate('fill', 'red'); + object.animate({ fill: 'red' }); const findAnimationsByTarget = target => fabric.runningAnimations.filter(({ target: t }) => target === t); assert.equal(findAnimationsByTarget(object).length, 1, 'runningAnimations should include the animation'); object.dispose(); From fa697ac0f41687d9edfa4d756971df2b0c9a00db Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Tue, 10 Jan 2023 02:17:58 +0100 Subject: [PATCH 5/9] chore(TS): Add declare to every non initialized property. (#8574) --- .vscode/settings.json | 4 +- CHANGELOG.md | 1 + index.js | 3 + src/canvas/canvas.class.ts | 86 ++-- src/canvas/canvas_events.ts | 18 +- src/canvas/static_canvas.class.ts | 70 +-- src/filters/WebGLProbe.ts | 4 +- src/filters/base_filter.class.ts | 8 +- src/filters/blendcolor_filter.class.ts | 6 +- src/filters/blendimage_filter.class.ts | 6 +- src/filters/blur_filter.class.ts | 6 +- src/filters/brightness_filter.class.ts | 2 +- src/filters/colormatrix_filter.class.ts | 4 +- src/filters/composed_filter.class.ts | 2 +- src/filters/contrast_filter.class.ts | 2 +- src/filters/convolute_filter.class.ts | 4 +- src/filters/filter_boilerplate.ts | 2 +- src/filters/gamma_filter.class.ts | 4 +- src/filters/grayscale_filter.class.ts | 2 +- src/filters/hue_rotation.class.ts | 2 +- src/filters/invert_filter.class.ts | 4 +- src/filters/noise_filter.class.ts | 2 +- src/filters/pixelate_filter.class.ts | 2 +- src/filters/removecolor_filter.class.ts | 6 +- src/filters/resize_filter.class.ts | 10 +- src/filters/saturate_filter.class.ts | 2 +- src/filters/vibrance_filter.class.ts | 2 +- src/filters/webgl_backend.class.ts | 14 +- src/gradient/gradient.class.ts | 22 +- src/intersection.class.ts | 4 +- src/mixins/collection.mixin.ts | 1 + src/mixins/itext_behavior.mixin.ts | 65 +-- src/mixins/itext_click_behavior.mixin.ts | 8 +- src/mixins/itext_key_behavior.mixin.ts | 18 +- src/mixins/object.svg_export.ts | 2 +- src/mixins/shared_methods.mixin.ts | 5 +- src/mixins/text_style.mixin.ts | 8 +- src/parser/elements_parser.ts | 5 +- src/pattern.class.ts | 6 +- src/point.class.ts | 4 +- src/shadow.class.ts | 16 +- src/shapes/Object/AnimatableObject.ts | 2 +- src/shapes/Object/FabricObject.ts | 2 +- src/shapes/Object/InteractiveObject.ts | 57 ++- src/shapes/Object/Object.ts | 554 ++++++++--------------- src/shapes/Object/ObjectGeometry.ts | 16 +- src/shapes/Object/ObjectOrigin.ts | 32 +- src/shapes/Object/defaultValues.ts | 112 +++++ src/shapes/active_selection.class.ts | 6 +- src/shapes/circle.class.ts | 25 +- src/shapes/ellipse.class.ts | 16 +- src/shapes/group.class.ts | 21 +- src/shapes/image.class.ts | 44 +- src/shapes/itext.class.ts | 28 +- src/shapes/line.class.ts | 95 ++-- src/shapes/path.class.ts | 24 +- src/shapes/polyline.class.ts | 29 +- src/shapes/rect.class.ts | 14 +- src/shapes/text.class.ts | 93 ++-- src/shapes/textbox.class.ts | 11 +- src/util/class_registry.ts | 4 +- src/util/transform_matrix_removal.ts | 60 +++ src/util/types.ts | 11 +- test/unit/image.js | 14 +- test/unit/object.js | 106 ----- test/unit/path.js | 5 - 66 files changed, 865 insertions(+), 958 deletions(-) create mode 100644 src/shapes/Object/defaultValues.ts create mode 100644 src/util/transform_matrix_removal.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 1f6fc1db217..1b9e38a7ee9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,7 @@ "markdown.validate.ignoredLinks": [ // github links "../../**" - ] + ], + "editor.formatOnSave": true, + "editor.formatOnPaste": true } diff --git a/CHANGELOG.md b/CHANGELOG.md index 081ac731f58..14c4a7934a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +\- chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) - refactor(Animation): BREAKING: Animation api reduction and semplification (byValue is removed, '+=' syntax is removed, callbacks fired 100%) [#8547](https://github.com/fabricjs/fabric.js/pull/8547) - feat(PolyControl): modify the shape of a poly with control points [#8556](https://github.com/fabricjs/fabric.js/pull/8556) - BREAKING: remove Object.stateful and Object.statefulCache [#8573](https://github.com/fabricjs/fabric.js/pull/8573) diff --git a/index.js b/index.js index 293b081091b..eadcb2f05a5 100644 --- a/index.js +++ b/index.js @@ -161,6 +161,7 @@ import { removeFromArray } from './src/util/internals/removeFromArray'; import { getRandomInt } from './src/util/internals/getRandomInt'; import { wrapElement } from './src/util/dom_misc'; import { request } from './src/util/dom_request'; +import { removeTransformMatrixForSvgParsing } from './src/util/transform_matrix_removal'; import { parseFontDeclaration } from './src/parser/parseFontDeclaration'; const util = { @@ -253,6 +254,8 @@ const util = { requestAnimFrame, cancelAnimFrame, classRegistry, + // for test compatibility. We don't want to export it. + removeTransformMatrixForSvgParsing, }; // CONTROLS UTILS diff --git a/src/canvas/canvas.class.ts b/src/canvas/canvas.class.ts index 657889199c8..aa9d7790e1c 100644 --- a/src/canvas/canvas.class.ts +++ b/src/canvas/canvas.class.ts @@ -159,7 +159,7 @@ export class SelectableCanvas< * @default * @since fabric 4.0 // changed name and default value */ - uniformScaling: boolean; + declare uniformScaling: boolean; /** * Indicates which key switches uniform scaling. @@ -173,7 +173,7 @@ export class SelectableCanvas< * @type ModifierKey * @default */ - uniScaleKey: TOptionalModifierKey; + declare uniScaleKey: TOptionalModifierKey; /** * When true, objects use center point as the origin of scale transformation. @@ -182,7 +182,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - centeredScaling: boolean; + declare centeredScaling: boolean; /** * When true, objects use center point as the origin of rotate transformation. @@ -191,7 +191,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - centeredRotation: boolean; + declare centeredRotation: boolean; /** * Indicates which key enable centered Transform @@ -202,7 +202,7 @@ export class SelectableCanvas< * @type ModifierKey * @default */ - centeredKey: TOptionalModifierKey; + declare centeredKey: TOptionalModifierKey; /** * Indicates which key enable alternate action on corner @@ -213,7 +213,7 @@ export class SelectableCanvas< * @type ModifierKey * @default */ - altActionKey: TOptionalModifierKey; + declare altActionKey: TOptionalModifierKey; /** * Indicates that canvas is interactive. This property should not be changed. @@ -227,7 +227,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - selection: boolean; + declare selection: boolean; /** * Indicates which key or keys enable multiple click selection @@ -239,7 +239,7 @@ export class SelectableCanvas< * @type ModifierKey|ModifierKey[] * @default */ - selectionKey: TOptionalModifierKey | ModifierKey[]; + declare selectionKey: TOptionalModifierKey | ModifierKey[]; /** * Indicates which key enable alternative selection @@ -253,70 +253,70 @@ export class SelectableCanvas< * @type null|ModifierKey * @default */ - altSelectionKey: TOptionalModifierKey; + declare altSelectionKey: TOptionalModifierKey; /** * Color of selection * @type String * @default */ - selectionColor: string; + declare selectionColor: string; /** * Default dash array pattern * If not empty the selection border is dashed * @type Array */ - selectionDashArray: number[]; + declare selectionDashArray: number[]; /** * Color of the border of selection (usually slightly darker than color of selection itself) * @type String * @default */ - selectionBorderColor: string; + declare selectionBorderColor: string; /** * Width of a line used in object/group selection * @type Number * @default */ - selectionLineWidth: number; + declare selectionLineWidth: number; /** * Select only shapes that are fully contained in the dragged selection rectangle. * @type Boolean * @default */ - selectionFullyContained: boolean; + declare selectionFullyContained: boolean; /** * Default cursor value used when hovering over an object on canvas * @type CSSStyleDeclaration['cursor'] * @default move */ - hoverCursor: CSSStyleDeclaration['cursor']; + declare hoverCursor: CSSStyleDeclaration['cursor']; /** * Default cursor value used when moving an object on canvas * @type CSSStyleDeclaration['cursor'] * @default move */ - moveCursor: CSSStyleDeclaration['cursor']; + declare moveCursor: CSSStyleDeclaration['cursor']; /** * Default cursor value used for the entire canvas * @type String * @default default */ - defaultCursor: CSSStyleDeclaration['cursor']; + declare defaultCursor: CSSStyleDeclaration['cursor']; /** * Cursor value used during free drawing * @type String * @default crosshair */ - freeDrawingCursor: CSSStyleDeclaration['cursor']; + declare freeDrawingCursor: CSSStyleDeclaration['cursor']; /** * Cursor value used for disabled elements ( corners with disabled action ) @@ -324,28 +324,28 @@ export class SelectableCanvas< * @since 2.0.0 * @default not-allowed */ - notAllowedCursor: CSSStyleDeclaration['cursor']; + declare notAllowedCursor: CSSStyleDeclaration['cursor']; /** * Default element class that's given to wrapper (div) element of canvas * @type String * @default */ - containerClass: string; + declare containerClass: string; /** * When true, object detection happens on per-pixel basis rather than on per-bounding-box * @type Boolean * @default */ - perPixelTargetFind: boolean; + declare perPixelTargetFind: boolean; /** * Number of pixels around target pixel to tolerate (consider active) during object detection * @type Number * @default */ - targetFindTolerance: number; + declare targetFindTolerance: number; /** * When true, target detection is skipped. Target detection will return always undefined. @@ -356,7 +356,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - skipTargetFind: boolean; + declare skipTargetFind: boolean; /** * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing. @@ -366,7 +366,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - isDrawingMode: boolean; + declare isDrawingMode: boolean; /** * Indicates whether objects should remain in current stack position when selected. @@ -374,7 +374,7 @@ export class SelectableCanvas< * @type Boolean * @default */ - preserveObjectStacking: boolean; + declare preserveObjectStacking: boolean; /** * Indicates if the right click on canvas can output the context menu or not @@ -382,7 +382,7 @@ export class SelectableCanvas< * @since 1.6.5 * @default */ - stopContextMenu: boolean; + declare stopContextMenu: boolean; /** * Indicates if the canvas can fire right click events @@ -390,7 +390,7 @@ export class SelectableCanvas< * @since 1.6.5 * @default */ - fireRightClick: boolean; + declare fireRightClick: boolean; /** * Indicates if the canvas can fire middle click events @@ -398,7 +398,7 @@ export class SelectableCanvas< * @since 1.7.8 * @default */ - fireMiddleClick: boolean; + declare fireMiddleClick: boolean; /** * Keep track of the subTargets for Mouse Events @@ -411,7 +411,7 @@ export class SelectableCanvas< * @type FabricObject | null * @private */ - _hoveredTarget?: FabricObject; + declare _hoveredTarget?: FabricObject; /** * hold the list of nested targets hovered @@ -459,7 +459,7 @@ export class SelectableCanvas< * @type CanvasRenderingContext2D * @private */ - contextCache: CanvasRenderingContext2D; + declare contextCache: CanvasRenderingContext2D; /** * During a mouse event we may need the pointer multiple times in multiple functions. @@ -468,7 +468,7 @@ export class SelectableCanvas< * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates * @type {Point} */ - protected _absolutePointer?: Point; + protected declare _absolutePointer?: Point; /** * During a mouse event we may need the pointer multiple times in multiple functions. @@ -477,7 +477,7 @@ export class SelectableCanvas< * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates * @type {Point} */ - protected _pointer?: Point; + protected declare _pointer?: Point; /** * During a mouse event we may need the target multiple times in multiple functions. @@ -485,17 +485,17 @@ export class SelectableCanvas< * lifespan. Every fabricJS mouse event create and delete the cache every time * @type {FabricObject} */ - protected _target?: FabricObject; - - upperCanvasEl: HTMLCanvasElement; - contextTop: CanvasRenderingContext2D; - wrapperEl: HTMLDivElement; - cacheCanvasEl: HTMLCanvasElement; - protected _isCurrentlyDrawing: boolean; - freeDrawingBrush?: BaseBrush; - _activeObject?: FabricObject; - _hasITextHandlers?: boolean; - _iTextInstances: (IText | Textbox)[]; + protected declare _target?: FabricObject; + + declare upperCanvasEl: HTMLCanvasElement; + declare contextTop: CanvasRenderingContext2D; + declare wrapperEl: HTMLDivElement; + declare cacheCanvasEl: HTMLCanvasElement; + protected declare _isCurrentlyDrawing: boolean; + declare freeDrawingBrush?: BaseBrush; + declare _activeObject?: FabricObject; + declare _hasITextHandlers?: boolean; + declare _iTextInstances: (IText | Textbox)[]; /** * Constructor * @param {HTMLCanvasElement | String} el canvas element to initialize instance on diff --git a/src/canvas/canvas_events.ts b/src/canvas/canvas_events.ts index 1f4e5d43a2b..1c2e5806b6c 100644 --- a/src/canvas/canvas_events.ts +++ b/src/canvas/canvas_events.ts @@ -74,46 +74,46 @@ export class Canvas extends SelectableCanvas { * @type Number * @private */ - mainTouchId: null | number; + declare mainTouchId: null | number; /** * When the option is enabled, PointerEvent is used instead of TPointerEvent. * @type Boolean * @default */ - enablePointerEvents: boolean; + declare enablePointerEvents: boolean; /** * an internal flag that is used to remember if we already bound the events * @type Boolean * @private */ - private eventsBound: boolean; + private declare eventsBound: boolean; /** * Holds a reference to a setTimeout timer for event synchronization * @type number * @private */ - private _willAddMouseDown: number; + private declare _willAddMouseDown: number; /** * Holds a reference to an object on the canvas that is receiving the drag over event. * @type FabricObject * @private */ - private _draggedoverTarget?: FabricObject; + private declare _draggedoverTarget?: FabricObject; /** * Holds a reference to an object on the canvas from where the drag operation started * @type FabricObject * @private */ - private _dragSource?: FabricObject; + private declare _dragSource?: FabricObject; - currentTarget?: FabricObject; + declare currentTarget?: FabricObject; - currentSubTargets?: FabricObject[]; + declare currentSubTargets?: FabricObject[]; /** * Holds a reference to a pointer during mousedown to compare on mouse up and determine @@ -121,7 +121,7 @@ export class Canvas extends SelectableCanvas { * @type FabricObject * @private */ - _previousPointer: Point; + declare _previousPointer: Point; /** * Adds mouse listeners to canvas diff --git a/src/canvas/static_canvas.class.ts b/src/canvas/static_canvas.class.ts index 76d422845d5..fbd3ebfc6e5 100644 --- a/src/canvas/static_canvas.class.ts +++ b/src/canvas/static_canvas.class.ts @@ -87,7 +87,7 @@ export class StaticCanvas< * @type {(String|TFiller)} * @default */ - backgroundColor: TFiller | string; + declare backgroundColor: TFiller | string; /** * Background image of canvas instance. @@ -97,7 +97,7 @@ export class StaticCanvas< * @type FabricObject * @default */ - backgroundImage: FabricObject | null; + declare backgroundImage: FabricObject | null; /** * Overlay color of canvas instance. @@ -105,7 +105,7 @@ export class StaticCanvas< * @type {(String|TFiller)} * @default */ - overlayColor: TFiller | string; + declare overlayColor: TFiller | string; /** * Overlay image of canvas instance. @@ -115,7 +115,7 @@ export class StaticCanvas< * @type FabricObject * @default */ - overlayImage: FabricObject | null; + declare overlayImage: FabricObject | null; /** * Indicates whether toObject/toDatalessObject should include default values @@ -123,7 +123,7 @@ export class StaticCanvas< * @type Boolean * @default */ - includeDefaultValues: boolean; + declare includeDefaultValues: boolean; /** * Indicates whether {@link add}, {@link insertAt} and {@link remove}, @@ -135,28 +135,28 @@ export class StaticCanvas< * @type Boolean * @default */ - renderOnAddRemove: boolean; + declare renderOnAddRemove: boolean; /** * Indicates whether object controls (borders/controls) are rendered above overlay image * @type Boolean * @default */ - controlsAboveOverlay: boolean; + declare controlsAboveOverlay: boolean; /** * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas * @type Boolean * @default */ - allowTouchScrolling: boolean; + declare allowTouchScrolling: boolean; /** * Indicates whether this canvas will use image smoothing, this is on by default in browsers * @type Boolean * @default */ - imageSmoothingEnabled: boolean; + declare imageSmoothingEnabled: boolean; /** * The transformation (a Canvas 2D API transform matrix) which focuses the viewport @@ -167,7 +167,7 @@ export class StaticCanvas< * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50]; * @default */ - viewportTransform: TMat2D; + declare viewportTransform: TMat2D; /** * if set to false background image is not affected by viewport transform @@ -176,7 +176,7 @@ export class StaticCanvas< * @todo we should really find a different way to do this * @default */ - backgroundVpt: boolean; + declare backgroundVpt: boolean; /** * if set to false overlya image is not affected by viewport transform @@ -185,14 +185,14 @@ export class StaticCanvas< * @todo we should really find a different way to do this * @default */ - overlayVpt: boolean; + declare overlayVpt: boolean; /** * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens * @type Boolean * @default */ - enableRetinaScaling: boolean; + declare enableRetinaScaling: boolean; /** * Describe canvas element extension over design @@ -202,7 +202,7 @@ export class StaticCanvas< * of canvas element in plain untrasformed coordinates * The coordinates get updated with @method calcViewportBoundaries. */ - vptCoords: TCornerPoint; + declare vptCoords: TCornerPoint; /** * Based on vptCoords and object.aCoords, skip rendering of objects that @@ -213,7 +213,7 @@ export class StaticCanvas< * @type Boolean * @default */ - skipOffscreen: boolean; + declare skipOffscreen: boolean; /** * a fabricObject that, without stroke define a clipping area with their shape. filled in black @@ -222,65 +222,70 @@ export class StaticCanvas< * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true * @type FabricObject */ - clipPath: FabricObject; + declare clipPath: FabricObject; /** * A reference to the canvas actual HTMLCanvasElement. * Can be use to read the raw pixels, but never write or manipulate * @type HTMLCanvasElement */ - lowerCanvasEl: HTMLCanvasElement; + declare lowerCanvasEl: HTMLCanvasElement; - contextContainer: CanvasRenderingContext2D; + declare contextContainer: CanvasRenderingContext2D; /** * Width in virtual/logical pixels of the canvas. * The canvas can be larger than width if retina scaling is active * @type number */ - width: number; + declare width: number; /** * Height in virtual/logical pixels of the canvas. * The canvas can be taller than width if retina scaling is active * @type height */ - height: number; + declare height: number; /** * If true the Canvas is in the process or has been disposed/destroyed. * No more rendering operation will be executed on this canvas. * @type boolean */ - destroyed?: boolean; + declare destroyed?: boolean; /** * Started the process of disposing but not done yet. * WIll likely complete the render cycle already scheduled but stopping adding more. * @type boolean */ - disposed?: boolean; + declare disposed?: boolean; /** * Keeps a copy of the canvas style before setting retina scaling and other potions * in order to return it to original state on dispose * @type string */ - _originalCanvasStyle?: string; + declare _originalCanvasStyle?: string; - renderAndResetBound: () => void; - requestRenderAllBound: () => void; + declare renderAndResetBound: () => void; + declare requestRenderAllBound: () => void; - _offset: { left: number; top: number }; - protected hasLostContext: boolean; - protected nextRenderHandle: number; + declare _offset: { left: number; top: number }; + protected declare hasLostContext: boolean; + protected declare nextRenderHandle: number; // reference to - protected __cleanupTask?: { + protected declare __cleanupTask?: { (): void; kill: (reason?: any) => void; }; + constructor(el: string | HTMLCanvasElement, options = {}) { + super(); + this._init(el, options); + } + add(...objects: FabricObject[]) { const size = super.add(...objects); objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll(); @@ -325,11 +330,6 @@ export class StaticCanvas< this.renderOnAddRemove && this.requestRenderAll(); } - constructor(el: string | HTMLCanvasElement, options = {}) { - super(); - this._init(el, options); - } - /** * @private * @param {HTMLCanvasElement | String} el element to initialize instance on @@ -1148,7 +1148,7 @@ export class StaticCanvas< * @type Boolean * @default */ - svgViewportTransformation: boolean; + declare svgViewportTransformation: boolean; /** * Returns SVG representation of canvas diff --git a/src/filters/WebGLProbe.ts b/src/filters/WebGLProbe.ts index 8178ca51be9..19e3cd7d416 100644 --- a/src/filters/WebGLProbe.ts +++ b/src/filters/WebGLProbe.ts @@ -11,9 +11,9 @@ export enum WebGLPrecision { * Lazy initialize WebGL constants */ class WebGLProbe { - maxTextureSize?: number; + declare maxTextureSize?: number; - webGLPrecision: WebGLPrecision | undefined; + declare webGLPrecision: WebGLPrecision | undefined; /** * Tests if webgl supports certain precision diff --git a/src/filters/base_filter.class.ts b/src/filters/base_filter.class.ts index 960e6e85c37..77a38f71c56 100644 --- a/src/filters/base_filter.class.ts +++ b/src/filters/base_filter.class.ts @@ -25,15 +25,15 @@ export abstract class AbstractBaseFilter { * @param {String} type * @default */ - type: string; + declare type: string; /** * Array of attributes to send with buffers. do not modify * @private */ - vertexSource: string; + declare vertexSource: string; - fragmentSource: T; + declare fragmentSource: T; /** * Name of the parameter that can be changed in the filter. @@ -41,7 +41,7 @@ export abstract class AbstractBaseFilter { * mainParameter * @private */ - mainParameter?: keyof this; + declare mainParameter?: keyof this; /** * Constructor diff --git a/src/filters/blendcolor_filter.class.ts b/src/filters/blendcolor_filter.class.ts index 137a21dfc3d..b6f018c4a48 100644 --- a/src/filters/blendcolor_filter.class.ts +++ b/src/filters/blendcolor_filter.class.ts @@ -28,9 +28,9 @@ export class BlendColor extends AbstractBaseFilter> { * @type String * @default **/ - color: string; + declare color: string; - mode: + declare mode: | 'multiply' | 'add' | 'diff' @@ -48,7 +48,7 @@ export class BlendColor extends AbstractBaseFilter> { * @type Number * @default **/ - alpha: number; + declare alpha: number; /** * build the fragment source for the filters, joining the common part with diff --git a/src/filters/blendimage_filter.class.ts b/src/filters/blendimage_filter.class.ts index c1c72c2f780..6c779e71784 100644 --- a/src/filters/blendimage_filter.class.ts +++ b/src/filters/blendimage_filter.class.ts @@ -33,15 +33,15 @@ export class BlendImage extends AbstractBaseFilter> { * Color to make the blend operation with. default to a reddish color since black or white * gives always strong result. **/ - image: Image; + declare image: Image; - mode: 'multiply' | 'mask'; + declare mode: 'multiply' | 'mask'; /** * alpha value. represent the strength of the blend image operation. * not implemented. **/ - alpha: number; + declare alpha: number; getCacheKey() { return `${this.type}_${this.mode}`; diff --git a/src/filters/blur_filter.class.ts b/src/filters/blur_filter.class.ts index 851cb6349a0..9c4dde3f966 100644 --- a/src/filters/blur_filter.class.ts +++ b/src/filters/blur_filter.class.ts @@ -28,10 +28,10 @@ export class Blur extends BaseFilter { * @type Number * @default */ - blur: number; + declare blur: number; - horizontal: boolean; - aspectRatio: number; + declare horizontal: boolean; + declare aspectRatio: number; applyTo(options: TWebGLPipelineState | T2DPipelineState) { if (isWebGLPipelineState(options)) { diff --git a/src/filters/brightness_filter.class.ts b/src/filters/brightness_filter.class.ts index bd96376da9f..51a213a2595 100644 --- a/src/filters/brightness_filter.class.ts +++ b/src/filters/brightness_filter.class.ts @@ -19,7 +19,7 @@ export class Brightness extends BaseFilter { * @param {Number} brightness * @default */ - brightness: number; + declare brightness: number; /** * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/colormatrix_filter.class.ts b/src/filters/colormatrix_filter.class.ts index aa4e212299c..eab3bdc8edd 100644 --- a/src/filters/colormatrix_filter.class.ts +++ b/src/filters/colormatrix_filter.class.ts @@ -27,7 +27,7 @@ export class ColorMatrix extends BaseFilter { * @param {Array} matrix array of 20 numbers. * @default */ - matrix: number[]; + declare matrix: number[]; /** * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario @@ -35,7 +35,7 @@ export class ColorMatrix extends BaseFilter { * @type Boolean * @default true */ - colorsOnly: boolean; + declare colorsOnly: boolean; setOptions({ matrix, ...options }: Record) { if (matrix) { diff --git a/src/filters/composed_filter.class.ts b/src/filters/composed_filter.class.ts index 9e1a5e1cd25..d581d277d6e 100644 --- a/src/filters/composed_filter.class.ts +++ b/src/filters/composed_filter.class.ts @@ -16,7 +16,7 @@ export class Composed extends BaseFilter { /** * A non sparse array of filters to apply */ - subFilters: AbstractBaseFilter[]; + declare subFilters: AbstractBaseFilter[]; constructor({ subFilters = [], diff --git a/src/filters/contrast_filter.class.ts b/src/filters/contrast_filter.class.ts index cd30b7fe781..6b3c4dc0d13 100644 --- a/src/filters/contrast_filter.class.ts +++ b/src/filters/contrast_filter.class.ts @@ -18,7 +18,7 @@ export class Contrast extends BaseFilter { * @param {Number} contrast * @default 0 */ - contrast: number; + declare contrast: number; /** * Apply the Contrast operation to a Uint8Array representing the pixels of an image. diff --git a/src/filters/convolute_filter.class.ts b/src/filters/convolute_filter.class.ts index 0ff18f1b1ba..70b0142d9c2 100644 --- a/src/filters/convolute_filter.class.ts +++ b/src/filters/convolute_filter.class.ts @@ -47,12 +47,12 @@ export class Convolute extends AbstractBaseFilter> { /* * Opaque value (true/false) */ - opaque: boolean; + declare opaque: boolean; /* * matrix for the filter, max 9x9 */ - matrix: number[]; + declare matrix: number[]; getCacheKey() { return `${this.type}_${Math.sqrt(this.matrix.length)}_${ diff --git a/src/filters/filter_boilerplate.ts b/src/filters/filter_boilerplate.ts index ea415c6f5fe..4d27eb9b07c 100644 --- a/src/filters/filter_boilerplate.ts +++ b/src/filters/filter_boilerplate.ts @@ -19,7 +19,7 @@ export class MyFilter extends BaseFilter { * @param {Number} myParameter * @default */ - myParameter: number; + declare myParameter: number; /** * Apply the MyFilter operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/gamma_filter.class.ts b/src/filters/gamma_filter.class.ts index 1659f7b3b67..25212b95ab3 100644 --- a/src/filters/gamma_filter.class.ts +++ b/src/filters/gamma_filter.class.ts @@ -20,8 +20,8 @@ export class Gamma extends BaseFilter { * @param {Array} gamma * @default */ - gamma: GammaInput; - rgbValues?: { + declare gamma: GammaInput; + declare rgbValues?: { r: Uint8Array; g: Uint8Array; b: Uint8Array; diff --git a/src/filters/grayscale_filter.class.ts b/src/filters/grayscale_filter.class.ts index 7bfdcd293f6..3a72d1bcf00 100644 --- a/src/filters/grayscale_filter.class.ts +++ b/src/filters/grayscale_filter.class.ts @@ -11,7 +11,7 @@ import { classRegistry } from '../util/class_registry'; * object.applyFilters(); */ export class Grayscale extends AbstractBaseFilter> { - mode: 'average' | 'lightness' | 'luminosity'; + declare mode: 'average' | 'lightness' | 'luminosity'; /** * Apply the Grayscale operation to a Uint8Array representing the pixels of an image. diff --git a/src/filters/hue_rotation.class.ts b/src/filters/hue_rotation.class.ts index 096d7dc4eb9..79027bc8b30 100644 --- a/src/filters/hue_rotation.class.ts +++ b/src/filters/hue_rotation.class.ts @@ -19,7 +19,7 @@ export class HueRotation extends ColorMatrix { /** * HueRotation value, from -1 to 1. */ - rotation: number; + declare rotation: number; calculateMatrix() { const rad = this.rotation * Math.PI, diff --git a/src/filters/invert_filter.class.ts b/src/filters/invert_filter.class.ts index 7cb5001fe1a..5544b5cf31c 100644 --- a/src/filters/invert_filter.class.ts +++ b/src/filters/invert_filter.class.ts @@ -15,14 +15,14 @@ export class Invert extends BaseFilter { * @param {Boolean} alpha * @default **/ - alpha: boolean; + declare alpha: boolean; /** * Filter invert. if false, does nothing * @param {Boolean} invert * @default */ - invert: boolean; + declare invert: boolean; /** * Apply the Invert operation to a Uint8Array representing the pixels of an image. diff --git a/src/filters/noise_filter.class.ts b/src/filters/noise_filter.class.ts index 48bb338aa94..a9ecd292a28 100644 --- a/src/filters/noise_filter.class.ts +++ b/src/filters/noise_filter.class.ts @@ -19,7 +19,7 @@ export class Noise extends BaseFilter { * @param {Number} noise * @default */ - noise: number; + declare noise: number; /** * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/pixelate_filter.class.ts b/src/filters/pixelate_filter.class.ts index 80f8871198e..0c4108b22c2 100644 --- a/src/filters/pixelate_filter.class.ts +++ b/src/filters/pixelate_filter.class.ts @@ -13,7 +13,7 @@ import { classRegistry } from '../util/class_registry'; * object.applyFilters(); */ export class Pixelate extends BaseFilter { - blocksize: number; + declare blocksize: number; /** * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/removecolor_filter.class.ts b/src/filters/removecolor_filter.class.ts index e9e730a0236..e34ba3e71c9 100644 --- a/src/filters/removecolor_filter.class.ts +++ b/src/filters/removecolor_filter.class.ts @@ -20,19 +20,19 @@ export class RemoveColor extends BaseFilter { * @param {String} type * @default */ - color: string; + declare color: string; /** * distance to actual color, as value up or down from each r,g,b * between 0 and 1 **/ - distance: number; + declare distance: number; /** * For color to remove inside distance, use alpha channel for a smoother deletion * NOT IMPLEMENTED YET **/ - useAlpha: boolean; + declare useAlpha: boolean; /** * Applies filter to canvas element diff --git a/src/filters/resize_filter.class.ts b/src/filters/resize_filter.class.ts index a247bcaa407..bb9987a6bad 100644 --- a/src/filters/resize_filter.class.ts +++ b/src/filters/resize_filter.class.ts @@ -20,30 +20,30 @@ export class Resize extends BaseFilter { * bilinear, hermite, sliceHack, lanczos. * @default */ - resizeType: 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos'; + declare resizeType: 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos'; /** * Scale factor for resizing, x axis * @param {Number} scaleX * @default */ - scaleX: number; + declare scaleX: number; /** * Scale factor for resizing, y axis * @param {Number} scaleY * @default */ - scaleY: number; + declare scaleY: number; /** * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos * @param {Number} lanczosLobes * @default */ - lanczosLobes: number; + declare lanczosLobes: number; - fragmentSourceTOP: string; + declare fragmentSourceTOP: string; /** * Return WebGL uniform locations for this filter's shader. diff --git a/src/filters/saturate_filter.class.ts b/src/filters/saturate_filter.class.ts index b7d21056cc1..8a390877c38 100644 --- a/src/filters/saturate_filter.class.ts +++ b/src/filters/saturate_filter.class.ts @@ -21,7 +21,7 @@ export class Saturation extends BaseFilter { * @param {Number} saturation * @default */ - saturation: number; + declare saturation: number; /** * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/vibrance_filter.class.ts b/src/filters/vibrance_filter.class.ts index 05d799f6721..0ac78018033 100644 --- a/src/filters/vibrance_filter.class.ts +++ b/src/filters/vibrance_filter.class.ts @@ -21,7 +21,7 @@ export class Vibrance extends BaseFilter { * @param {Number} vibrance * @default */ - vibrance: number; + declare vibrance: number; /** * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image. diff --git a/src/filters/webgl_backend.class.ts b/src/filters/webgl_backend.class.ts index 77e738dcb48..5f9dbb4a4e9 100644 --- a/src/filters/webgl_backend.class.ts +++ b/src/filters/webgl_backend.class.ts @@ -4,7 +4,7 @@ import { createCanvasElement } from '../util/misc/dom'; import { TWebGLPipelineState, TProgramCache, TTextureCache } from './typedefs'; export class WebGLFilterBackend { - tileSize: number; + declare tileSize: number; /** * Define ... @@ -15,29 +15,29 @@ export class WebGLFilterBackend { * If GLPut data is the fastest operation, or if forced, this buffer will be used * to transfer the data back in the 2d logic **/ - imageBuffer?: ArrayBuffer; + declare imageBuffer?: ArrayBuffer; - canvas: HTMLCanvasElement; + declare canvas: HTMLCanvasElement; /** * The Webgl context that will execute the operations for filtering **/ - gl: WebGLRenderingContext; + declare gl: WebGLRenderingContext; /** * Keyed map for shader cache **/ - programCache: TProgramCache; + declare programCache: TProgramCache; /** * Keyed map for texture cache **/ - textureCache: TTextureCache; + declare textureCache: TTextureCache; /** * Contains GPU info for debug **/ - gpuInfo: any; + declare gpuInfo: any; /** * Experimental. This object is a sort of repository of help layers used to avoid diff --git a/src/gradient/gradient.class.ts b/src/gradient/gradient.class.ts index 9ace832309d..c5aa0cf71d3 100644 --- a/src/gradient/gradient.class.ts +++ b/src/gradient/gradient.class.ts @@ -38,14 +38,14 @@ export class Gradient< * @type Number * @default 0 */ - offsetX = 0; + declare offsetX: number; /** * Vertical offset for aligning gradients coming from SVG when outside pathgroups * @type Number * @default 0 */ - offsetY = 0; + declare offsetY: number; /** * A transform matrix to apply to the gradient before painting. @@ -55,7 +55,7 @@ export class Gradient< * @type Number[] * @default null */ - gradientTransform: TMat2D | null = null; + declare gradientTransform: TMat2D | null; /** * coordinates units for coords. @@ -66,35 +66,35 @@ export class Gradient< * @type GradientUnits * @default 'pixels' */ - gradientUnits: GradientUnits; + declare gradientUnits: GradientUnits; /** * Gradient type linear or radial * @type GradientType * @default 'linear' */ - type: T; + declare type: T; /** * Defines how the gradient is located in space and spread * @type GradientCoords */ - coords: GradientCoords; + declare coords: GradientCoords; /** * Defines how many colors a gradient has and how they are located on the axis * defined by coords * @type GradientCoords */ - colorStops: ColorStop[]; + declare colorStops: ColorStop[]; /** * If true, this object will not be exported during the serialization of a canvas * @type boolean */ - excludeFromExport?: boolean; + declare excludeFromExport?: boolean; - private id: string | number; + private declare id: string | number; constructor({ type = 'linear' as T, @@ -103,13 +103,13 @@ export class Gradient< colorStops = [], offsetX = 0, offsetY = 0, - gradientTransform, + gradientTransform = null, id, }: GradientOptions) { this.id = id ? `${id}_${uid()}` : uid(); this.type = type; this.gradientUnits = gradientUnits; - this.gradientTransform = gradientTransform || null; + this.gradientTransform = gradientTransform; this.offsetX = offsetX; this.offsetY = offsetY; this.coords = { diff --git a/src/intersection.class.ts b/src/intersection.class.ts index e23e1d406bc..ab7e5249d82 100644 --- a/src/intersection.class.ts +++ b/src/intersection.class.ts @@ -22,9 +22,9 @@ const isContainedInInterval = (T: Point, A: Point, B: Point) => { }; export class Intersection { - points: Point[]; + declare points: Point[]; - status?: IntersectionType; + declare status?: IntersectionType; constructor(status?: IntersectionType) { this.status = status; diff --git a/src/mixins/collection.mixin.ts b/src/mixins/collection.mixin.ts index 40f31e632d5..733721c4c1d 100644 --- a/src/mixins/collection.mixin.ts +++ b/src/mixins/collection.mixin.ts @@ -6,6 +6,7 @@ export function createCollectionMixin(Base: TBase) { class Collection extends Base { /** * @type {FabricObject[]} + * @TODO needs to end up in the constructor too */ _objects: FabricObject[] = []; diff --git a/src/mixins/itext_behavior.mixin.ts b/src/mixins/itext_behavior.mixin.ts index b0caeb4d91d..328f188eaba 100644 --- a/src/mixins/itext_behavior.mixin.ts +++ b/src/mixins/itext_behavior.mixin.ts @@ -18,46 +18,49 @@ const reNonWord = /[ \n\.,;!\?\-]/; export abstract class ITextBehaviorMixin< EventSpec extends ObjectEvents > extends Text { - abstract isEditing: boolean; - abstract cursorDelay: number; - abstract selectionStart: number; - abstract selectionEnd: number; - abstract cursorDuration: number; - abstract editable: boolean; - abstract editingBorderColor: string; + declare abstract isEditing: boolean; + declare abstract cursorDelay: number; + declare abstract selectionStart: number; + declare abstract selectionEnd: number; + declare abstract cursorDuration: number; + declare abstract editable: boolean; + declare abstract editingBorderColor: string; - abstract compositionStart: number; - abstract compositionEnd: number; + declare abstract compositionStart: number; + declare abstract compositionEnd: number; - abstract hiddenTextarea: HTMLTextAreaElement; + declare abstract hiddenTextarea: HTMLTextAreaElement; /** * Helps determining when the text is in composition, so that the cursor * rendering is altered. */ - protected inCompositionMode: boolean; - - protected _reSpace: RegExp; - private _currentTickState: { isAborted: boolean; abort: () => void }; - private _cursorTimeout1: number; - private _cursorTimeout2: number; - private _currentTickCompleteState: { isAborted: boolean; abort: () => void }; - protected _currentCursorOpacity: number; - private _textBeforeEdit: string; - protected __isMousedown: boolean; - protected __selectionStartOnMouseDown: number; - private __dragImageDisposer: VoidFunction; - private __dragStartFired: boolean; - protected __isDragging: boolean; - protected __dragStartSelection: { + protected declare inCompositionMode: boolean; + + protected declare _reSpace: RegExp; + private declare _currentTickState: { isAborted: boolean; abort: () => void }; + private declare _cursorTimeout1: number; + private declare _cursorTimeout2: number; + private declare _currentTickCompleteState: { + isAborted: boolean; + abort: () => void; + }; + protected declare _currentCursorOpacity: number; + private declare _textBeforeEdit: string; + protected declare __isMousedown: boolean; + protected declare __selectionStartOnMouseDown: number; + private declare __dragImageDisposer: VoidFunction; + private declare __dragStartFired: boolean; + protected declare __isDragging: boolean; + protected declare __dragStartSelection: { selectionStart: number; selectionEnd: number; }; - protected __isDraggingOver: boolean; - protected selected: boolean; - protected __lastSelected: boolean; - protected cursorOffsetCache: { left?: number; top?: number } = {}; - protected _savedProps: { + protected declare __isDraggingOver: boolean; + protected declare selected: boolean; + protected declare __lastSelected: boolean; + protected declare cursorOffsetCache: { left?: number; top?: number }; + protected declare _savedProps: { hasControls: boolean; borderColor: string; lockMovementX: boolean; @@ -67,7 +70,7 @@ export abstract class ITextBehaviorMixin< defaultCursor: string; moveCursor: CSSStyleDeclaration['cursor']; }; - protected _selectionDirection: 'left' | 'right' | null; + protected declare _selectionDirection: 'left' | 'right' | null; abstract initHiddenTextarea(): void; abstract initCursorSelectionHandlers(): void; diff --git a/src/mixins/itext_click_behavior.mixin.ts b/src/mixins/itext_click_behavior.mixin.ts index 6cc5188304f..c23ef4cae5c 100644 --- a/src/mixins/itext_click_behavior.mixin.ts +++ b/src/mixins/itext_click_behavior.mixin.ts @@ -9,10 +9,10 @@ import { ITextKeyBehaviorMixin } from './itext_key_behavior.mixin'; export abstract class ITextClickBehaviorMixin< EventSpec extends ObjectEvents > extends ITextKeyBehaviorMixin { - private __lastClickTime: number; - private __lastLastClickTime: number; - private __lastPointer: IPoint | Record; - private __newClickTime: number; + private declare __lastClickTime: number; + private declare __lastLastClickTime: number; + private declare __lastPointer: IPoint | Record; + private declare __newClickTime: number; /** * Initializes "dbclick" event handler diff --git a/src/mixins/itext_key_behavior.mixin.ts b/src/mixins/itext_key_behavior.mixin.ts index 1b6af83e897..feff5723e59 100644 --- a/src/mixins/itext_key_behavior.mixin.ts +++ b/src/mixins/itext_key_behavior.mixin.ts @@ -22,21 +22,21 @@ export abstract class ITextKeyBehaviorMixin< * this.keysMap = Object.assign({}, this.keysMap); * The function must be in IText.prototype.myFunction And will receive event as args[0] */ - keysMap: TKeyMapIText; + declare keysMap: TKeyMapIText; - keysMapRtl: TKeyMapIText; + declare keysMapRtl: TKeyMapIText; /** * For functionalities on keyUp + ctrl || cmd */ - ctrlKeysMapUp: TKeyMapIText; + declare ctrlKeysMapUp: TKeyMapIText; /** * For functionalities on keyDown + ctrl || cmd */ - ctrlKeysMapDown: TKeyMapIText; + declare ctrlKeysMapDown: TKeyMapIText; - hiddenTextarea: HTMLTextAreaElement | null; + declare hiddenTextarea: HTMLTextAreaElement | null; /** * DOM container to append the hiddenTextarea. @@ -46,11 +46,11 @@ export abstract class ITextKeyBehaviorMixin< * @type HTMLElement * @default */ - hiddenTextareaContainer?: HTMLElement | null; + declare hiddenTextareaContainer?: HTMLElement | null; - private _clickHandlerInitialized: boolean; - private _copyDone: boolean; - private fromPaste: boolean; + private declare _clickHandlerInitialized: boolean; + private declare _copyDone: boolean; + private declare fromPaste: boolean; /** * Initializes hidden textarea (needed to bring up keyboard in iOS) diff --git a/src/mixins/object.svg_export.ts b/src/mixins/object.svg_export.ts index d50ebf27423..e54a9d1793e 100644 --- a/src/mixins/object.svg_export.ts +++ b/src/mixins/object.svg_export.ts @@ -9,7 +9,7 @@ export class FabricObjectSVGExportMixin { * This reference is a UID in the fabric namespace and is temporary stored here. * @type {String} */ - clipPathId?: string; + declare clipPathId?: string; /** * Returns styles-string for svg-export diff --git a/src/mixins/shared_methods.mixin.ts b/src/mixins/shared_methods.mixin.ts index 30c9ad10a39..26d14c85b86 100644 --- a/src/mixins/shared_methods.mixin.ts +++ b/src/mixins/shared_methods.mixin.ts @@ -3,10 +3,11 @@ import { Observable } from './observable.mixin'; export class CommonMethods extends Observable { /** - * Sets object's properties from options + * Sets object's properties from options, for initialization only + * @protected * @param {Object} [options] Options object */ - _setOptions(options: any) { + protected _setOptions(options: any = {}) { for (const prop in options) { this.set(prop, options[prop]); } diff --git a/src/mixins/text_style.mixin.ts b/src/mixins/text_style.mixin.ts index 403fadd2a6e..5f00ec59c34 100644 --- a/src/mixins/text_style.mixin.ts +++ b/src/mixins/text_style.mixin.ts @@ -10,10 +10,10 @@ export type TextStyle = { export abstract class TextStyleMixin< EventSpec extends ObjectEvents > extends FabricObject { - abstract styles: TextStyle; - protected abstract _textLines: string[][]; - protected abstract _forceClearCache: boolean; - protected abstract _styleProperties: string[]; + declare abstract styles: TextStyle; + protected declare abstract _textLines: string[][]; + protected declare abstract _forceClearCache: boolean; + protected declare abstract _styleProperties: string[]; abstract get2DCursorLocation( selectionStart: number, skipWrapping?: boolean diff --git a/src/parser/elements_parser.ts b/src/parser/elements_parser.ts index 9a1b5b83261..a02c2136bf2 100644 --- a/src/parser/elements_parser.ts +++ b/src/parser/elements_parser.ts @@ -9,6 +9,7 @@ import { qrDecompose, } from '../util/misc/matrix'; import { storage } from './constants'; +import { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal'; const ElementsParser = function ( elements, @@ -69,7 +70,7 @@ const ElementsParser = function ( if (obj instanceof Image && obj._originalElement) { _options = obj.parsePreserveAspectRatioAttribute(el); } - obj._removeTransformMatrix(_options); + removeTransformMatrixForSvgParsing(obj, _options); this.resolveClipPath(obj, el); this.reviver && this.reviver(el, obj); this.instances[index] = obj; @@ -108,7 +109,7 @@ const ElementsParser = function ( proto.createClipPathCallback = function (obj, container) { return function (_newObj) { - _newObj._removeTransformMatrix(); + removeTransformMatrixForSvgParsing(_newObj); _newObj.fillRule = _newObj.clipRule; container.push(_newObj); }; diff --git a/src/pattern.class.ts b/src/pattern.class.ts index 4828805f9ee..177a91701d4 100644 --- a/src/pattern.class.ts +++ b/src/pattern.class.ts @@ -78,15 +78,15 @@ export class Pattern { /** * The actual pixel source of the pattern */ - source!: CanvasImageSource; + declare source!: CanvasImageSource; /** * If true, this object will not be exported during the serialization of a canvas * @type boolean */ - excludeFromExport?: boolean; + declare excludeFromExport?: boolean; - readonly id: number; + declare readonly id: number; /** * Constructor diff --git a/src/point.class.ts b/src/point.class.ts index 5cd3c0c1f37..f444f39cc66 100644 --- a/src/point.class.ts +++ b/src/point.class.ts @@ -11,9 +11,9 @@ export interface IPoint { * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com) */ export class Point implements IPoint { - x: number; + declare x: number; - y: number; + declare y: number; constructor(); constructor(x: number, y: number); diff --git a/src/shadow.class.ts b/src/shadow.class.ts index 8d94d8bea29..fc77c24b798 100644 --- a/src/shadow.class.ts +++ b/src/shadow.class.ts @@ -14,41 +14,41 @@ export class Shadow { * @type String * @default */ - color: string; + declare color: string; /** * Shadow blur * @type Number */ - blur: number; + declare blur: number; /** * Shadow horizontal offset * @type Number * @default */ - offsetX: number; + declare offsetX: number; /** * Shadow vertical offset * @type Number * @default */ - offsetY: number; + declare offsetY: number; /** * Whether the shadow should affect stroke operations * @type Boolean * @default */ - affectStroke: boolean; + declare affectStroke: boolean; /** * Indicates whether toObject should include default values * @type Boolean * @default */ - includeDefaultValues: boolean; + declare includeDefaultValues: boolean; /** * When `false`, the shadow will scale with the object. @@ -57,9 +57,9 @@ export class Shadow { * @type Boolean * @default */ - nonScaling: boolean; + declare nonScaling: boolean; - id: number; + declare id: number; /** * @see {@link http://fabricjs.com/shadows|Shadow demo} diff --git a/src/shapes/Object/AnimatableObject.ts b/src/shapes/Object/AnimatableObject.ts index 6daacfd9094..9d8d5f44eae 100644 --- a/src/shapes/Object/AnimatableObject.ts +++ b/src/shapes/Object/AnimatableObject.ts @@ -21,7 +21,7 @@ export abstract class AnimatableObject< * List of properties to consider for animating colors. * @type String[] */ - colorProperties: string[]; + declare colorProperties: string[]; /** * Animates object's properties diff --git a/src/shapes/Object/FabricObject.ts b/src/shapes/Object/FabricObject.ts index 39af92dae70..765ce935063 100644 --- a/src/shapes/Object/FabricObject.ts +++ b/src/shapes/Object/FabricObject.ts @@ -16,4 +16,4 @@ export class FabricObject< applyMixins(FabricObject, [FabricObjectSVGExportMixin, StatefulMixin]); -export { fabricObjectDefaultValues } from './Object'; +export { cacheProperties, stateProperties } from './defaultValues'; diff --git a/src/shapes/Object/InteractiveObject.ts b/src/shapes/Object/InteractiveObject.ts index 6851bf5edb5..63c58fe71f5 100644 --- a/src/shapes/Object/InteractiveObject.ts +++ b/src/shapes/Object/InteractiveObject.ts @@ -8,7 +8,6 @@ import { qrDecompose, TQrDecomposeOut, } from '../../util/misc/matrix'; -import { ObjectGeometry } from './ObjectGeometry'; import type { Control } from '../../controls/control.class'; import { sizeAfterTransform } from '../../util/misc/objectTransforms'; import { ObjectEvents, TPointerEvent } from '../../EventTypeDefs'; @@ -37,7 +36,18 @@ export class InteractiveFabricObject< * The coordinates depends from the controls positionHandler and are used * to draw and locate controls */ - oCoords: Record = {}; + declare oCoords: Record; + + /** + * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled + * too much and will be redrawn with correct details at the end of scaling. + * this setting is performance and application dependant. + * default to true + * since 1.7.0 + * @type Boolean + * @default true + */ + declare noScaleCache: boolean; /** * keeps the value of the last hovered corner during mouse move. @@ -48,39 +58,39 @@ export class InteractiveFabricObject< * @type number|string|any * @default 0 */ - __corner: 0 | string; + declare __corner: 0 | string; /** * a map of control visibility for this object. * this was left when controls were introduced to do not brea the api too much * this takes priority over the generic control visibility */ - _controlsVisibility: Record; + declare _controlsVisibility: Record; /** * The angle that an object will lock to while rotating. * @type [TDegree] */ - snapAngle?: TDegree; + declare snapAngle?: TDegree; /** * The angle difference from the current snapped angle in which snapping should occur. * When undefined, the snapThreshold will default to the snapAngle. * @type [TDegree] */ - snapThreshold?: TDegree; + declare snapThreshold?: TDegree; /** * holds the controls for the object. * controls are added by default_controls.js */ - controls: TControlSet; + declare controls: TControlSet; /** * internal boolean to signal the code that the object is * part of the move action. */ - isMoving?: boolean; + declare isMoving?: boolean; /** * internal boolean to signal the code that the object is @@ -89,7 +99,7 @@ export class InteractiveFabricObject< * they need to be either both private or more generic * Canvas class needs to see this variable */ - __isDragging?: boolean; + declare __isDragging?: boolean; /** * A boolean used from the gesture module to keep tracking of a scaling @@ -99,7 +109,7 @@ export class InteractiveFabricObject< * @TODO use git blame to investigate why it was added * DON'T USE IT. WE WILL TRY TO REMOVE IT */ - _scaling?: boolean; + declare _scaling?: boolean; declare canvas?: Canvas; @@ -111,6 +121,27 @@ export class InteractiveFabricObject< super(options); } + /** + * Update width and height of the canvas for cache + * returns true or false if canvas needed resize. + * @private + * @return {Boolean} true if the canvas has been resized + */ + _updateCacheCanvas() { + const targetCanvas = this.canvas; + if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) { + const target = targetCanvas._currentTransform.target, + action = targetCanvas._currentTransform.action; + if ( + this === (target as InteractiveFabricObject) && + action.startsWith('scale') + ) { + return false; + } + } + return super._updateCacheCanvas(); + } + /** * Determines which corner has been clicked * @private @@ -221,11 +252,7 @@ export class InteractiveFabricObject< * @return {void} */ setCoords(): void { - if (this.callSuper) { - ObjectGeometry.prototype.setCoords.call(this); - } else { - super.setCoords(); - } + super.setCoords(); // set coordinates of the draggable boxes in the corners used to scale/rotate the image this.oCoords = this.calcOCoords(); this._setCornerCoords(); diff --git a/src/shapes/Object/Object.ts b/src/shapes/Object/Object.ts index d40446196bc..4614bf60af5 100644 --- a/src/shapes/Object/Object.ts +++ b/src/shapes/Object/Object.ts @@ -1,5 +1,3 @@ -// @ts-nocheck -import { getEnv } from '../../env'; import { cache } from '../../cache'; import { config } from '../../config'; import { ALIASING_LIMIT, iMatrix, VERSION } from '../../constants'; @@ -20,11 +18,7 @@ import { clone } from '../../util/lang_object'; import { capitalize } from '../../util/lang_string'; import { capValue } from '../../util/misc/capValue'; import { createCanvasElement, toDataURL } from '../../util/misc/dom'; -import { - invertTransform, - qrDecompose, - transformPoint, -} from '../../util/misc/matrix'; +import { invertTransform, qrDecompose } from '../../util/misc/matrix'; import { enlivenObjectEnlivables } from '../../util/misc/objectEnlive'; import { resetObjectTransform, @@ -34,8 +28,17 @@ import { pick } from '../../util/misc/pick'; import { toFixed } from '../../util/misc/toFixed'; import type { Group } from '../group.class'; import { StaticCanvas } from '../../canvas/static_canvas.class'; -import { isTextObject } from '../../util/types'; +import { isFiller, isSerializableFiller, isTextObject } from '../../util/types'; import { Image } from '../image.class'; +import { + cacheProperties, + fabricObjectDefaultValues, + stateProperties, +} from './defaultValues'; +import type { Gradient } from '../../gradient/gradient.class'; +import type { Pattern } from '../../pattern.class'; +import type { Canvas } from '../../canvas/canvas_events'; +import { removeTransformMatrixForSvgParsing } from '../../util/transform_matrix_removal'; export type TCachedFabricObject = FabricObject & Required< @@ -52,9 +55,6 @@ export type TCachedFabricObject = FabricObject & _cacheContext: CanvasRenderingContext2D; }; -// temporary hack for unfinished migration -type TCallSuper = (arg0: string, ...moreArgs: any[]) => any; - /** * Root object class from which all 2d shape classes inherit from * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects} @@ -86,56 +86,56 @@ type TCallSuper = (arg0: string, ...moreArgs: any[]) => any; export class FabricObject< EventSpec extends ObjectEvents = ObjectEvents > extends AnimatableObject { - type: string; + declare type: string; /** * Opacity of an object * @type Number * @default 1 */ - opacity: number; + declare opacity: number; /** * Size of object's controlling corners (in pixels) * @type Number * @default 13 */ - cornerSize: number; + declare cornerSize: number; /** * Size of object's controlling corners when touch interaction is detected * @type Number * @default 24 */ - touchCornerSize: number; + declare touchCornerSize: number; /** * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill) * @type Boolean * @default true */ - transparentCorners: boolean; + declare transparentCorners: boolean; /** * Default cursor value used when hovering over this object on canvas * @type CSSStyleDeclaration['cursor'] | null * @default null */ - hoverCursor: CSSStyleDeclaration['cursor'] | null; + declare hoverCursor: CSSStyleDeclaration['cursor'] | null; /** * Default cursor value used when moving this object on canvas * @type CSSStyleDeclaration['cursor'] | null * @default null */ - moveCursor: CSSStyleDeclaration['cursor'] | null; + declare moveCursor: CSSStyleDeclaration['cursor'] | null; /** * Color of controlling borders of an object (when it's active) * @type String * @default rgb(178,204,255) */ - borderColor: string; + declare borderColor: string; /** * Array specifying dash pattern of an object's borders (hasBorder must be true) @@ -143,14 +143,14 @@ export class FabricObject< * @type Array | null * default null; */ - borderDashArray: number[] | null; + declare borderDashArray: number[] | null; /** * Color of controlling corners of an object (when it's active) * @type String * @default rgb(178,204,255) */ - cornerColor: string; + declare cornerColor: string; /** * Color of controlling corners of an object (when it's active and transparentCorners false) @@ -158,22 +158,25 @@ export class FabricObject< * @type String * @default null */ - cornerStrokeColor: string; + declare cornerStrokeColor: string; /** * Specify style of control, 'rect' or 'circle' + * This is deprecated. In the futuer there will be a standard control render + * And you can swap it with one of the alternative proposed with the control api * @since 1.6.2 * @type 'rect' | 'circle' * @default rect + * @deprecated */ - cornerStyle: 'rect' | 'circle'; + declare cornerStyle: 'rect' | 'circle'; /** * Array specifying dash pattern of an object's control (hasBorder must be true) * @since 1.6.2 * @type Array | null */ - cornerDashArray: number[] | null; + declare cornerDashArray: number[] | null; /** * When true, this object will use center point as the origin of transformation @@ -183,7 +186,7 @@ export class FabricObject< * @type Boolean * @default */ - centeredScaling: false; + declare centeredScaling: false; /** * When true, this object will use center point as the origin of transformation @@ -193,7 +196,7 @@ export class FabricObject< * @type Boolean * @default */ - centeredRotation: true; + declare centeredRotation: true; /** * When defined, an object is rendered via stroke and this property specifies its color @@ -201,7 +204,7 @@ export class FabricObject< * @type String * @default null */ - stroke: string | TFiller | null; + declare stroke: string | TFiller | null; /** * Color of object's fill @@ -209,7 +212,7 @@ export class FabricObject< * @type String * @default rgb(0,0,0) */ - fill: string | null; + declare fill: string | TFiller | null; /** * Fill rule used to fill an object @@ -218,14 +221,14 @@ export class FabricObject< * @type String * @default nonzero */ - fillRule: CanvasFillRule; + declare fillRule: CanvasFillRule; /** * Composite rule used for canvas globalCompositeOperation * @type String * @default */ - globalCompositeOperation: GlobalCompositeOperation; + declare globalCompositeOperation: GlobalCompositeOperation; /** * Background color of an object. @@ -233,64 +236,65 @@ export class FabricObject< * @type String * @default */ - backgroundColor: string; + declare backgroundColor: string; /** * Selection Background color of an object. colored layer behind the object when it is active. * does not mix good with globalCompositeOperation methods. * @type String + * @deprecated * @default */ - selectionBackgroundColor: string; + declare selectionBackgroundColor: string; /** * Array specifying dash pattern of an object's stroke (stroke must be defined) * @type Array * @default null; */ - strokeDashArray: number[] | null; + declare strokeDashArray: number[] | null; /** * Line offset of an object's stroke * @type Number * @default 0 */ - strokeDashOffset: number; + declare strokeDashOffset: number; /** * Line endings style of an object's stroke (one of "butt", "round", "square") * @type String * @default butt */ - strokeLineCap: CanvasLineCap; + declare strokeLineCap: CanvasLineCap; /** * Corner style of an object's stroke (one of "bevel", "round", "miter") * @type String * @default */ - strokeLineJoin: CanvasLineJoin; + declare strokeLineJoin: CanvasLineJoin; /** * Maximum miter length (used for strokeLineJoin = "miter") of an object's stroke * @type Number * @default 4 */ - strokeMiterLimit: number; + declare strokeMiterLimit: number; /** * Shadow object representing shadow of this shape * @type Shadow * @default null */ - shadow: Shadow | null; + declare shadow: Shadow | null; /** * Opacity of object's controlling borders when object is active and moving * @type Number * @default 0.4 */ - borderOpacityWhenMoving: number; + declare borderOpacityWhenMoving: number; /** * Scale factor of object's controlling borders @@ -300,14 +304,14 @@ export class FabricObject< * @type Number * @default 1 */ - borderScaleFactor: number; + declare borderScaleFactor: number; /** * Minimum allowed scale value of an object * @type Number * @default 0 */ - minScaleLimit: number; + declare minScaleLimit: number; /** * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). @@ -315,105 +319,105 @@ export class FabricObject< * @type Boolean * @default */ - selectable: boolean; + declare selectable: boolean; /** * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4 * @type Boolean * @default */ - evented: boolean; + declare evented: boolean; /** * When set to `false`, an object is not rendered on canvas * @type Boolean * @default */ - visible: boolean; + declare visible: boolean; /** * When set to `false`, object's controls are not displayed and can not be used to manipulate object * @type Boolean * @default */ - hasControls: boolean; + declare hasControls: boolean; /** * When set to `false`, object's controlling borders are not rendered * @type Boolean * @default */ - hasBorders: boolean; + declare hasBorders: boolean; /** * When set to `true`, objects are "found" on canvas on per-pixel basis rather than according to bounding box * @type Boolean * @default */ - perPixelTargetFind: boolean; + declare perPixelTargetFind: boolean; /** * When `false`, default object's values are not included in its serialization * @type Boolean * @default */ - includeDefaultValues: boolean; + declare includeDefaultValues: boolean; /** * When `true`, object horizontal movement is locked * @type Boolean * @default */ - lockMovementX: boolean; + declare lockMovementX: boolean; /** * When `true`, object vertical movement is locked * @type Boolean * @default */ - lockMovementY: boolean; + declare lockMovementY: boolean; /** * When `true`, object rotation is locked * @type Boolean * @default */ - lockRotation: boolean; + declare lockRotation: boolean; /** * When `true`, object horizontal scaling is locked * @type Boolean * @default */ - lockScalingX: boolean; + declare lockScalingX: boolean; /** * When `true`, object vertical scaling is locked * @type Boolean * @default */ - lockScalingY: boolean; + declare lockScalingY: boolean; /** * When `true`, object horizontal skewing is locked * @type Boolean * @default */ - lockSkewingX: boolean; + declare lockSkewingX: boolean; /** * When `true`, object vertical skewing is locked * @type Boolean * @default */ - lockSkewingY: boolean; + declare lockSkewingY: boolean; /** * When `true`, object cannot be flipped by scaling into negative values * @type Boolean * @default */ - lockScalingFlip: boolean; + declare lockScalingFlip: boolean; /** * When `true`, object is not exported in OBJECT/JSON @@ -421,7 +425,7 @@ export class FabricObject< * @type Boolean * @default */ - excludeFromExport: boolean; + declare excludeFromExport: boolean; /** * When `true`, object is cached on an additional canvas. @@ -431,18 +435,7 @@ export class FabricObject< * @type Boolean * @default true */ - objectCaching: boolean; - - /** - * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled - * too much and will be redrawn with correct details at the end of scaling. - * this setting is performance and application dependant. - * default to true - * since 1.7.0 - * @type Boolean - * @default true - */ - noScaleCache: boolean; + declare objectCaching: boolean; /** * When set to `true`, object's cache will be rerendered next render call. @@ -450,14 +443,14 @@ export class FabricObject< * @type Boolean * @default true */ - dirty: boolean; + declare dirty: boolean; /** * Determines if the fill or the stroke is drawn first (one of "fill" or "stroke") * @type String * @default */ - paintFirst: 'fill' | 'stroke'; + declare paintFirst: 'fill' | 'stroke'; /** * When 'down', object is set to active on mousedown/touchstart @@ -468,15 +461,15 @@ export class FabricObject< * @type String * @default 'down' */ - activeOn: 'down' | 'up'; + declare activeOn: 'down' | 'up'; /** - * List of properties to consider when checking if state - * of an object is changed (hasStateChanged) - * as well as for history (undo/redo) purposes + * This list of properties is used to check if the state of an object is changed. + * This state change now is only used for children of groups to understand if a group + * needs its cache regenerated during a .set call * @type Array */ - stateProperties: string[]; + declare stateProperties: string[]; /** * List of properties to consider when checking if cache needs refresh @@ -485,7 +478,7 @@ export class FabricObject< * and refreshed at the next render * @type Array */ - cacheProperties: string[]; + declare cacheProperties: string[]; /** * a fabricObject that, without stroke define a clipping area with their shape. filled in black @@ -494,7 +487,7 @@ export class FabricObject< * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center' * @type FabricObject */ - clipPath?: FabricObject; + declare clipPath?: FabricObject; /** * Meaningful ONLY when the object is used as clipPath. @@ -503,7 +496,7 @@ export class FabricObject< * @type boolean * @default false */ - inverted: boolean; + declare inverted: boolean; /** * Meaningful ONLY when the object is used as clipPath. @@ -515,7 +508,7 @@ export class FabricObject< * @type boolean * @default false */ - absolutePositioned: boolean; + declare absolutePositioned: boolean; /** * Quick access for the _cacheCanvas rendering context @@ -536,7 +529,7 @@ export class FabricObject< * @default undefined * @private */ - _cacheCanvas?: HTMLCanvasElement; + declare _cacheCanvas?: HTMLCanvasElement; /** * Size of the cache canvas, width @@ -545,7 +538,7 @@ export class FabricObject< * @default undefined * @private */ - cacheWidth?: number; + declare cacheWidth?: number; /** * Size of the cache canvas, height @@ -554,7 +547,7 @@ export class FabricObject< * @default undefined * @private */ - cacheHeight?: number; + declare cacheHeight?: number; /** * zoom level used on the cacheCanvas to draw the cache, X axe @@ -563,7 +556,7 @@ export class FabricObject< * @default undefined * @private */ - zoomX?: number; + declare zoomX?: number; /** * zoom level used on the cacheCanvas to draw the cache, Y axe @@ -572,7 +565,7 @@ export class FabricObject< * @default undefined * @private */ - zoomY?: number; + declare zoomY?: number; /** * zoom level used on the cacheCanvas to draw the cache, Y axe @@ -581,7 +574,7 @@ export class FabricObject< * @default undefined * @private */ - cacheTranslationX?: number; + declare cacheTranslationX?: number; /** * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness @@ -590,7 +583,7 @@ export class FabricObject< * @default undefined * @private */ - cacheTranslationY?: number; + declare cacheTranslationY?: number; /** * A reference to the parent of the object, usually a Group @@ -598,13 +591,13 @@ export class FabricObject< * @default undefined * @private */ - group?: Group; + declare group?: Group; /** * A reference to the parent of the object * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref */ - __owningGroup?: Group; + declare __owningGroup?: Group; /** * Indicate if the object is sitting on a cache dedicated to it @@ -613,7 +606,7 @@ export class FabricObject< * @default undefined * @private */ - ownCaching?: boolean; + declare ownCaching?: boolean; /** * Private. indicates if the object inside a group is on a transformed context or not @@ -622,9 +615,7 @@ export class FabricObject< * @default undefined * @private */ - _transformDone?: boolean; - - callSuper?: TCallSuper; + declare _transformDone?: boolean; /** * Constructor @@ -632,9 +623,7 @@ export class FabricObject< */ constructor(options?: Partial>) { super(); - if (options) { - this.setOptions(options); - } + this.setOptions(options); } /** @@ -738,14 +727,6 @@ export class FabricObject< * @return {Boolean} true if the canvas has been resized */ _updateCacheCanvas() { - const targetCanvas = this.canvas; - if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) { - const target = targetCanvas._currentTransform.target, - action = targetCanvas._currentTransform.action; - if (this === target && action.slice && action.slice(0, 5) === 'scale') { - return false; - } - } const canvas = this._cacheCanvas, context = this._cacheContext, dims = this._limitCacheSize(this._getCacheCanvasDimensions()), @@ -791,8 +772,8 @@ export class FabricObject< shouldRedraw = true; shouldResizeCanvas = true; // IMHO in those lines we are using zoomX and zoomY not the this version. - additionalWidth += this.getHeightOfLine(0) * this.zoomX; - additionalHeight += this.getHeightOfLine(0) * this.zoomY; + additionalWidth += this.getHeightOfLine(0) * this.zoomX!; + additionalHeight += this.getHeightOfLine(0) * this.zoomY!; } if (shouldRedraw) { if (shouldResizeCanvas) { @@ -820,10 +801,12 @@ export class FabricObject< } /** - * Sets object's properties from options + * Sets object's properties from options, for class constructor only. + * Needs to be overridden for different defaults. + * @protected * @param {Object} [options] Options object */ - setOptions(options: Record = {}) { + protected setOptions(options: Record = {}) { this._setOptions(options); } @@ -834,7 +817,7 @@ export class FabricObject< transform(ctx: CanvasRenderingContext2D) { const needFullTransform = (this.group && !this.group._transformDone) || - (this.group && this.canvas && ctx === this.canvas.contextTop); + (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop); const m = this.calcTransformMatrix(!needFullTransform); ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } @@ -844,7 +827,7 @@ export class FabricObject< * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} Object representation of an instance */ - toObject(propertiesToInclude?: (keyof this | string)[]): Record { + toObject(propertiesToInclude?: string[]): Record { const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS, clipPathData = this.clipPath && !this.clipPath.excludeFromExport @@ -855,7 +838,7 @@ export class FabricObject< } : null, object = { - ...pick(this, propertiesToInclude), + ...pick(this, propertiesToInclude as (keyof this)[]), type: this.type, version: VERSION, originX: this.originX, @@ -864,12 +847,12 @@ export class FabricObject< top: toFixed(this.top, NUM_FRACTION_DIGITS), width: toFixed(this.width, NUM_FRACTION_DIGITS), height: toFixed(this.height, NUM_FRACTION_DIGITS), - fill: - this.fill && this.fill.toObject ? this.fill.toObject() : this.fill, - stroke: - this.stroke && this.stroke.toObject - ? this.stroke.toObject() - : this.stroke, + fill: isSerializableFiller(this.fill) + ? this.fill.toObject() + : this.fill, + stroke: isSerializableFiller(this.stroke) + ? this.stroke.toObject() + : this.stroke, strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() @@ -909,7 +892,7 @@ export class FabricObject< * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} Object representation of an instance */ - toDatalessObject(propertiesToInclude?: (keyof this | string)[]) { + toDatalessObject(propertiesToInclude?: string[]) { // will be overwritten by subclasses return this.toObject(propertiesToInclude); } @@ -1018,7 +1001,7 @@ export class FabricObject< * @param {*} value */ _set(key: string, value: any) { - const isChanged = this[key] !== value; + const isChanged = this[key as keyof this] !== value; if (key === 'scaleX' || key === 'scaleY') { value = this._constrainScale(value); @@ -1029,21 +1012,22 @@ export class FabricObject< } else if (key === 'scaleY' && value < 0) { this.flipY = !this.flipY; value *= -1; + // i don't like this automatic initialization here } else if (key === 'shadow' && value && !(value instanceof Shadow)) { value = new Shadow(value); } else if (key === 'dirty' && this.group) { this.group.set('dirty', value); } - this[key] = value; + this[key as keyof this] = value; if (isChanged) { const groupNeedsUpdate = this.group && this.group.isOnACache(); if (this.cacheProperties.includes(key)) { this.dirty = true; - groupNeedsUpdate && this.group.set('dirty', true); + groupNeedsUpdate && this.group!.set('dirty', true); } else if (groupNeedsUpdate && this.stateProperties.includes(key)) { - this.group.set('dirty', true); + this.group!.set('dirty', true); } } return this; @@ -1088,7 +1072,7 @@ export class FabricObject< this._setShadow(ctx); if (this.shouldCache()) { this.renderCache(); - this.drawCacheOnCanvas(ctx); + (this as TCachedFabricObject).drawCacheOnCanvas(ctx); } else { this._removeCacheCanvas(); this.dirty = false; @@ -1097,6 +1081,10 @@ export class FabricObject< ctx.restore(); } + drawSelectionBackground(ctx: CanvasRenderingContext2D) { + /* no op */ + } + renderCache(options?: any) { options = options || {}; if (!this._cacheCanvas || !this._cacheContext) { @@ -1204,7 +1192,10 @@ export class FabricObject< * @param {CanvasRenderingContext2D} ctx Context to render on * @param {FabricObject} clipPath */ - drawClipPathOnCache(ctx: CanvasRenderingContext2D, clipPath: FabricObject) { + drawClipPathOnCache( + ctx: CanvasRenderingContext2D, + clipPath: TCachedFabricObject + ) { ctx.save(); // DEBUG: uncomment this line, comment the following // ctx.globalAlpha = 0.4 @@ -1219,11 +1210,11 @@ export class FabricObject< ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } clipPath.transform(ctx); - ctx.scale(1 / clipPath.zoomX!, 1 / clipPath.zoomY!); + ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY); ctx.drawImage( - clipPath._cacheCanvas!, - -clipPath.cacheTranslationX!, - -clipPath.cacheTranslationY! + clipPath._cacheCanvas, + -clipPath.cacheTranslationX, + -clipPath.cacheTranslationY ); ctx.restore(); } @@ -1265,19 +1256,19 @@ export class FabricObject< clipPath.shouldCache(); clipPath._transformDone = true; clipPath.renderCache({ forClipping: true }); - this.drawClipPathOnCache(ctx, clipPath); + this.drawClipPathOnCache(ctx, clipPath as TCachedFabricObject); } /** * Paint the cached copy of the object on the target context. * @param {CanvasRenderingContext2D} ctx Context to render on */ - drawCacheOnCanvas(ctx: CanvasRenderingContext2D) { - ctx.scale(1 / this.zoomX!, 1 / this.zoomY!); + drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) { + ctx.scale(1 / this.zoomX, 1 / this.zoomY); ctx.drawImage( - this._cacheCanvas!, - -this.cacheTranslationX!, - -this.cacheTranslationY! + this._cacheCanvas, + -this.cacheTranslationX, + -this.cacheTranslationY ); } @@ -1360,11 +1351,11 @@ export class FabricObject< ctx.lineDashOffset = decl.strokeDashOffset; ctx.lineJoin = decl.strokeLineJoin; ctx.miterLimit = decl.strokeMiterLimit; - if (stroke.toLive) { + if (isFiller(stroke)) { if ( - stroke.gradientUnits === 'percentage' || - stroke.gradientTransform || - stroke.patternTransform + (stroke as Gradient<'linear'>).gradientUnits === 'percentage' || + (stroke as Gradient<'linear'>).gradientTransform || + (stroke as Pattern).patternTransform ) { // need to transform gradient in a pattern. // this is a slow process. If you are hitting this codepath, and the object @@ -1373,20 +1364,20 @@ export class FabricObject< this._applyPatternForTransformedGradient(ctx, stroke); } else { // is a simple gradient or pattern - ctx.strokeStyle = stroke.toLive(ctx, this); + ctx.strokeStyle = stroke.toLive(ctx); this._applyPatternGradientTransform(ctx, stroke); } } else { // is a color - ctx.strokeStyle = decl.stroke; + ctx.strokeStyle = decl.stroke as string; } } } _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) { if (fill) { - if (fill.toLive) { - ctx.fillStyle = fill.toLive(ctx, this); + if (isFiller(fill)) { + ctx.fillStyle = fill.toLive(ctx); this._applyPatternGradientTransform(ctx, fill); } else { ctx.fillStyle = fill; @@ -1466,14 +1457,16 @@ export class FabricObject< ctx: CanvasRenderingContext2D, filler: TFiller ) { - if (!filler || !filler.toLive) { + if (!isFiller(filler)) { return { offsetX: 0, offsetY: 0 }; } - const t = filler.gradientTransform || filler.patternTransform; + const t = + (filler as Gradient<'linear'>).gradientTransform || + (filler as Pattern).patternTransform; const offsetX = -this.width / 2 + filler.offsetX || 0, offsetY = -this.height / 2 + filler.offsetY || 0; - if (filler.gradientUnits === 'percentage') { + if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') { ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY); } else { ctx.transform(1, 0, 0, 1, offsetX, offsetY); @@ -1575,6 +1568,9 @@ export class FabricObject< pCanvas.width = width; pCanvas.height = height; const pCtx = pCanvas.getContext('2d'); + if (!pCtx) { + return; + } pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); @@ -1597,64 +1593,17 @@ export class FabricObject< (retinaScaling * this.scaleX) / dims.zoomX, (retinaScaling * this.scaleY) / dims.zoomY ); - ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat'); + ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? ''; } /** * This function is an helper for svg import. it returns the center of the object in the svg * untransformed coordinates * @private - * @return {Object} center point from element coordinates + * @return {Point} center point from element coordinates */ _findCenterFromElement() { - return { x: this.left + this.width / 2, y: this.top + this.height / 2 }; - } - - /** - * This function is an helper for svg import. it decompose the transformMatrix - * and assign properties to object. - * untransformed coordinates - * @todo move away in the svg import stuff. - * @private - */ - _assignTransformMatrixProps() { - if (this.transformMatrix) { - const options = qrDecompose(this.transformMatrix); - this.flipX = false; - this.flipY = false; - this.set('scaleX', options.scaleX); - this.set('scaleY', options.scaleY); - this.angle = options.angle; - this.skewX = options.skewX; - this.skewY = 0; - } - } - - /** - * This function is an helper for svg import. it removes the transform matrix - * and set to object properties that fabricjs can handle - * @todo move away in the svg import stuff. - * @private - * @param {Object} preserveAspectRatioOptions - */ - _removeTransformMatrix(preserveAspectRatioOptions) { - let center = this._findCenterFromElement(); - if (this.transformMatrix) { - this._assignTransformMatrixProps(); - center = transformPoint(center, this.transformMatrix); - } - this.transformMatrix = null; - if (preserveAspectRatioOptions) { - this.scaleX *= preserveAspectRatioOptions.scaleX; - this.scaleY *= preserveAspectRatioOptions.scaleY; - this.cropX = preserveAspectRatioOptions.cropX; - this.cropY = preserveAspectRatioOptions.cropY; - center.x += preserveAspectRatioOptions.offsetLeft; - center.y += preserveAspectRatioOptions.offsetTop; - this.width = preserveAspectRatioOptions.width; - this.height = preserveAspectRatioOptions.height; - } - this.setPositionByOrigin(center, 'center', 'center'); + return new Point(this.left + this.width / 2, this.top + this.height / 2); } /** @@ -1662,9 +1611,11 @@ export class FabricObject< * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @returns {Promise} */ - clone(propertiesToInclude: (keyof this)[]) { + clone(propertiesToInclude: string[]) { const objectForm = this.toObject(propertiesToInclude); // todo ok understand this. is static or it isn't? + // TS is more an issue here than an helper. + // @ts-ignore return this.constructor.fromObject(objectForm); } @@ -1745,7 +1696,7 @@ export class FabricObject< // we need to make it so. el.width = Math.ceil(width); el.height = Math.ceil(height); - let canvas = new StaticCanvas(el, { + const canvas = new StaticCanvas(el, { enableRetinaScaling: false, renderOnAddRemove: false, skipOffscreen: false, @@ -1759,6 +1710,8 @@ export class FabricObject< 'center' ); const originalCanvas = this.canvas; + // static canvas and canvas have both an array of InteractiveObjects + // @ts-ignore this needs to be fixed somehow, or ignored globally canvas._objects = [this]; this.set('canvas', canvas); this.setCoords(); @@ -1776,8 +1729,6 @@ export class FabricObject< canvas._objects = []; // since render has settled it is safe to destroy canvas canvas.destroy(); - canvas = null; - return canvasEl; } @@ -1850,60 +1801,6 @@ export class FabricObject< } } - /** - * Centers object horizontally on canvas to which it was added last. - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - centerH() { - this.canvas && this.canvas.centerObjectH(this); - return this; - } - - /** - * Centers object horizontally on current viewport of canvas to which it was added last. - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - viewportCenterH() { - this.canvas && this.canvas.viewportCenterObjectH(this); - return this; - } - - /** - * Centers object vertically on canvas to which it was added last. - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - centerV() { - this.canvas && this.canvas.centerObjectV(this); - return this; - } - - /** - * Centers object vertically on current viewport of canvas to which it was added last. - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - viewportCenterV() { - this.canvas && this.canvas.viewportCenterObjectV(this); - return this; - } - - /** - * Centers object vertically and horizontally on canvas to which is was added last - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - center() { - this.canvas && this.canvas.centerObject(this); - return this; - } - - /** - * Centers object on current viewport of canvas to which it was added last. - * You might need to call `setCoords` on an object after centering, to update controls area. - */ - viewportCenter() { - this.canvas && this.canvas.viewportCenterObject(this); - return this; - } - /** * This callback function is called by the parent group of an object every * time a non-delegated property changes on the group. It is passed the key @@ -1948,17 +1845,25 @@ export class FabricObject< */ static _fromObject( object: Record, - { extraParam, ...options }: { extraParam?: any; signal?: AbortSignal } = {} - ) { - return enlivenObjectEnlivables>( - clone(object, true), - options - ).then((enlivedMap) => { - // from the resulting enlived options, extract options.extraParam to arg0 - // to avoid accidental overrides later - const { [extraParam]: arg0, ...rest } = { ...options, ...enlivedMap }; - return extraParam ? new this(arg0, rest) : new this(rest); - }); + { + extraParam, + ...options + }: { extraParam?: string; signal?: AbortSignal } = {} + ): Promise { + return enlivenObjectEnlivables(clone(object, true), options).then( + (enlivedMap) => { + const allOptions = { ...options, ...enlivedMap }; + // from the resulting enlived options, extract options.extraParam to arg0 + // to avoid accidental overrides later + if (extraParam) { + const { [extraParam]: arg0, ...rest } = allOptions; + // @ts-ignore; + return new this(arg0, rest); + } else { + return new this(allOptions); + } + } + ); } /** @@ -1971,119 +1876,20 @@ export class FabricObject< static fromObject( object: Record, options?: { signal?: AbortSignal } - ) { + ): Promise { return this._fromObject(object, options); } } -export const fabricObjectDefaultValues = { - type: 'object', - originX: 'left', - originY: 'top', - top: 0, - left: 0, - width: 0, - height: 0, - scaleX: 1, - scaleY: 1, - flipX: false, - flipY: false, - opacity: 1, - angle: 0, - skewX: 0, - skewY: 0, - cornerSize: 13, - touchCornerSize: 24, - transparentCorners: true, - hoverCursor: null, - moveCursor: null, - padding: 0, - borderColor: 'rgb(178,204,255)', - borderDashArray: null, - cornerColor: 'rgb(178,204,255)', - cornerStrokeColor: '', - cornerStyle: 'rect', - cornerDashArray: null, - centeredScaling: false, - centeredRotation: true, - fill: 'rgb(0,0,0)', - fillRule: 'nonzero', - globalCompositeOperation: 'source-over', - backgroundColor: '', - selectionBackgroundColor: '', - stroke: null, - strokeWidth: 1, - strokeDashArray: null, - strokeDashOffset: 0, - strokeLineCap: 'butt', - strokeLineJoin: 'miter', - strokeMiterLimit: 4, - shadow: null, - borderOpacityWhenMoving: 0.4, - borderScaleFactor: 1, - minScaleLimit: 0, - selectable: true, - evented: true, - visible: true, - hasControls: true, - hasBorders: true, - perPixelTargetFind: false, - includeDefaultValues: true, - lockMovementX: false, - lockMovementY: false, - lockRotation: false, - lockScalingX: false, - lockScalingY: false, - lockSkewingX: false, - lockSkewingY: false, - lockScalingFlip: false, - excludeFromExport: false, - objectCaching: !getEnv().isLikelyNode, - noScaleCache: true, - strokeUniform: false, - dirty: true, - __corner: 0, - paintFirst: 'fill', - activeOn: 'down', - stateProperties: [ - 'top', - 'left', - 'scaleX', - 'scaleY', - 'flipX', - 'flipY', - 'originX', - 'originY', - 'angle', - 'opacity', - 'globalCompositeOperation', - 'shadow', - 'visible', - 'skewX', - 'skewY', - ], - cacheProperties: [ - 'fill', - 'stroke', - 'strokeWidth', - 'strokeDashArray', - 'width', - 'height', - 'paintFirst', - 'strokeUniform', - 'strokeLineCap', - 'strokeDashOffset', - 'strokeLineJoin', - 'strokeMiterLimit', - 'backgroundColor', - 'clipPath', - ], - colorProperties: ['fill', 'stroke', 'backgroundColor'], - clipPath: undefined, - inverted: false, - absolutePositioned: false, -}; - -Object.assign(FabricObject.prototype, fabricObjectDefaultValues); +/* + * Properties that at minimum needs to stay on the prototype + * That shouldn't be either on the instance and that can't be used as static + * For inheritance reasons ( used in the superclass but static in the subclass ) + */ +Object.assign(FabricObject.prototype, { + cacheProperties, + stateProperties, + ...fabricObjectDefaultValues, +}); classRegistry.setClass(FabricObject); diff --git a/src/shapes/Object/ObjectGeometry.ts b/src/shapes/Object/ObjectGeometry.ts index 5656c65a373..1d8fadd1a02 100644 --- a/src/shapes/Object/ObjectGeometry.ts +++ b/src/shapes/Object/ObjectGeometry.ts @@ -53,21 +53,21 @@ export class ObjectGeometry< * @type Boolean * @default false */ - flipX: boolean; + declare flipX: boolean; /** * When true, an object is rendered as flipped vertically * @type Boolean * @default false */ - flipY: boolean; + declare flipY: boolean; /** * Padding between object and its controlling borders (in pixels) * @type Number * @default 0 */ - padding: number; + declare padding: number; /** * Describe object's corner position in canvas object absolute coordinates @@ -80,7 +80,7 @@ export class ObjectGeometry< * The coordinates get updated with @method setCoords. * You can calculate them without updating with @method calcACoords(); */ - aCoords: TACoords; + declare aCoords: TACoords; /** * Describe object's corner position in canvas element coordinates. @@ -89,17 +89,17 @@ export class ObjectGeometry< * Those could go away * @todo investigate how to get rid of those */ - lineCoords: TCornerPoint; + declare lineCoords: TCornerPoint; /** * storage cache for object transform matrix */ - ownMatrixCache?: TMatrixCache; + declare ownMatrixCache?: TMatrixCache; /** * storage cache for object full transform matrix */ - matrixCache?: TMatrixCache; + declare matrixCache?: TMatrixCache; /** * A Reference of the Canvas where the object is actually added @@ -107,7 +107,7 @@ export class ObjectGeometry< * @default undefined * @private */ - canvas?: StaticCanvas | Canvas; + declare canvas?: StaticCanvas | Canvas; /** * @returns {number} x position according to object's {@link originX} property in canvas coordinate plane diff --git a/src/shapes/Object/ObjectOrigin.ts b/src/shapes/Object/ObjectOrigin.ts index 4fbd4c7599e..ee082f13cad 100644 --- a/src/shapes/Object/ObjectOrigin.ts +++ b/src/shapes/Object/ObjectOrigin.ts @@ -13,56 +13,56 @@ export class ObjectOrigin extends CommonMethods { * @type Number * @default 0 */ - top: number; + declare top: number; /** * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right} * @type Number * @default 0 */ - left: number; + declare left: number; /** * Object width * @type Number * @default */ - width: number; + declare width: number; /** * Object height * @type Number * @default */ - height: number; + declare height: number; /** * Object scale factor (horizontal) * @type Number * @default 1 */ - scaleX: number; + declare scaleX: number; /** * Object scale factor (vertical) * @type Number * @default 1 */ - scaleY: number; + declare scaleY: number; /** * Angle of skew on x axes of an object (in degrees) * @type Number * @default 0 */ - skewX: number; + declare skewX: number; /** * Angle of skew on y axes of an object (in degrees) * @type Number * @default 0 */ - skewY: number; + declare skewY: number; /** * Horizontal origin of transformation of an object (one of "left", "right", "center") @@ -70,7 +70,7 @@ export class ObjectOrigin extends CommonMethods { * @type String * @default 'left' */ - originX: TOriginX; + declare originX: TOriginX; /** * Vertical origin of transformation of an object (one of "top", "bottom", "center") @@ -78,21 +78,21 @@ export class ObjectOrigin extends CommonMethods { * @type String * @default 'top' */ - originY: TOriginY; + declare originY: TOriginY; /** * Angle of rotation of an object (in degrees) * @type Number * @default 0 */ - angle: TDegree; + declare angle: TDegree; /** * Width of a stroke used to render this object * @type Number * @default 1 */ - strokeWidth: number; + declare strokeWidth: number; /** * When `false`, the stoke width will scale with the object. @@ -105,17 +105,17 @@ export class ObjectOrigin extends CommonMethods { * @type Boolean * @default false */ - strokeUniform: boolean; + declare strokeUniform: boolean; /** * Object containing this object. * can influence its size and position */ - group?: Group; + declare group?: Group; - _originalOriginX?: TOriginX; + declare _originalOriginX?: TOriginX; - _originalOriginY?: TOriginY; + declare _originalOriginY?: TOriginY; /** * Calculate object bounding box dimensions from its properties scale, skew. diff --git a/src/shapes/Object/defaultValues.ts b/src/shapes/Object/defaultValues.ts new file mode 100644 index 00000000000..212e1356317 --- /dev/null +++ b/src/shapes/Object/defaultValues.ts @@ -0,0 +1,112 @@ +import { getEnv } from '../../env'; + +export const stateProperties = [ + 'top', + 'left', + 'scaleX', + 'scaleY', + 'flipX', + 'flipY', + 'originX', + 'originY', + 'angle', + 'opacity', + 'globalCompositeOperation', + 'shadow', + 'visible', + 'skewX', + 'skewY', +]; + +export const cacheProperties = [ + 'fill', + 'stroke', + 'strokeWidth', + 'strokeDashArray', + 'width', + 'height', + 'paintFirst', + 'strokeUniform', + 'strokeLineCap', + 'strokeDashOffset', + 'strokeLineJoin', + 'strokeMiterLimit', + 'backgroundColor', + 'clipPath', +]; + +export const fabricObjectDefaultValues = { + type: 'object', + originX: 'left', + originY: 'top', + top: 0, + left: 0, + width: 0, + height: 0, + scaleX: 1, + scaleY: 1, + flipX: false, + flipY: false, + opacity: 1, + angle: 0, + skewX: 0, + skewY: 0, + cornerSize: 13, + touchCornerSize: 24, + transparentCorners: true, + hoverCursor: null, + moveCursor: null, + padding: 0, + borderColor: 'rgb(178,204,255)', + borderDashArray: null, + cornerColor: 'rgb(178,204,255)', + cornerStrokeColor: '', + cornerStyle: 'rect', + cornerDashArray: null, + centeredScaling: false, + centeredRotation: true, + fill: 'rgb(0,0,0)', + fillRule: 'nonzero', + globalCompositeOperation: 'source-over', + backgroundColor: '', + selectionBackgroundColor: '', + stroke: null, + strokeWidth: 1, + strokeDashArray: null, + strokeDashOffset: 0, + strokeLineCap: 'butt', + strokeLineJoin: 'miter', + strokeMiterLimit: 4, + shadow: null, + borderOpacityWhenMoving: 0.4, + borderScaleFactor: 1, + minScaleLimit: 0, + selectable: true, + evented: true, + visible: true, + hasControls: true, + hasBorders: true, + perPixelTargetFind: false, + includeDefaultValues: true, + lockMovementX: false, + lockMovementY: false, + lockRotation: false, + lockScalingX: false, + lockScalingY: false, + lockSkewingX: false, + lockSkewingY: false, + lockScalingFlip: false, + excludeFromExport: false, + objectCaching: !getEnv().isLikelyNode, + noScaleCache: true, + strokeUniform: false, + dirty: true, + __corner: 0, + paintFirst: 'fill', + activeOn: 'down', + colorProperties: ['fill', 'stroke', 'backgroundColor'], + clipPath: undefined, + inverted: false, + absolutePositioned: false, + FX_DURATION: 500, +}; diff --git a/src/shapes/active_selection.class.ts b/src/shapes/active_selection.class.ts index 993a53ae698..0378c11a2e3 100644 --- a/src/shapes/active_selection.class.ts +++ b/src/shapes/active_selection.class.ts @@ -1,7 +1,7 @@ import { ControlRenderingStyleOverride } from '../controls/controls.render'; import { TClassProperties } from '../typedefs'; import { classRegistry } from '../util/class_registry'; -import { Group, groupDefaultValues } from './group.class'; +import { Group } from './group.class'; import type { FabricObject } from './Object/FabricObject'; export class ActiveSelection extends Group { @@ -147,11 +147,7 @@ export class ActiveSelection extends Group { export const activeSelectionDefaultValues: Partial< TClassProperties > = { - ...groupDefaultValues, type: 'activeSelection', - layout: 'fit-content', - subTargetCheck: false, - interactive: false, }; Object.assign(ActiveSelection.prototype, activeSelectionDefaultValues); diff --git a/src/shapes/circle.class.ts b/src/shapes/circle.class.ts index 6448efa1a1d..89def99132d 100644 --- a/src/shapes/circle.class.ts +++ b/src/shapes/circle.class.ts @@ -1,19 +1,19 @@ import { SHARED_ATTRIBUTES } from '../parser/attributes'; import { parseAttributes } from '../parser/parseAttributes'; -import { TClassProperties } from '../typedefs'; import { cos } from '../util/misc/cos'; import { degreesToRadians } from '../util/misc/radiansDegreesConversion'; import { sin } from '../util/misc/sin'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; +import { TClassProperties } from '../typedefs'; export class Circle extends FabricObject { /** * Radius of this circle * @type Number - * @default + * @default 0 */ - radius: number; + declare radius: number; /** * degrees of start of the circle. @@ -21,7 +21,7 @@ export class Circle extends FabricObject { * @type Number 0 - 359 * @default 0 */ - startAngle: number; + declare startAngle: number; /** * End angle of the circle @@ -29,7 +29,7 @@ export class Circle extends FabricObject { * @type Number 1 - 360 * @default 360 */ - endAngle: number; + declare endAngle: number; /** * @private @@ -92,7 +92,7 @@ export class Circle extends FabricObject { * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} object representation of an instance */ - toObject(propertiesToInclude: (keyof this)[] = []): object { + toObject(propertiesToInclude: string[] = []): object { return super.toObject([ 'radius', 'startAngle', @@ -194,15 +194,12 @@ export const circleDefaultValues: Partial> = { radius: 0, startAngle: 0, endAngle: 360, - cacheProperties: [ - ...fabricObjectDefaultValues.cacheProperties, - 'radius', - 'startAngle', - 'endAngle', - ], }; -Object.assign(Circle.prototype, circleDefaultValues); +Object.assign(Circle.prototype, { + ...circleDefaultValues, + cacheProperties: [...cacheProperties, 'radius', 'startAngle', 'endAngle'], +}); classRegistry.setClass(Circle); classRegistry.setSVGClass(Circle); diff --git a/src/shapes/ellipse.class.ts b/src/shapes/ellipse.class.ts index 0060a5307eb..19f0313a352 100644 --- a/src/shapes/ellipse.class.ts +++ b/src/shapes/ellipse.class.ts @@ -3,7 +3,7 @@ import { SHARED_ATTRIBUTES } from '../parser/attributes'; import { parseAttributes } from '../parser/parseAttributes'; import { TClassProperties } from '../typedefs'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; export class Ellipse extends FabricObject { /** @@ -11,14 +11,14 @@ export class Ellipse extends FabricObject { * @type Number * @default */ - rx: number; + declare rx: number; /** * Vertical radius * @type Number * @default */ - ry: number; + declare ry: number; /** * Constructor @@ -27,8 +27,6 @@ export class Ellipse extends FabricObject { */ constructor(options: Record) { super(options); - this.set('rx', (options && options.rx) || 0); - this.set('ry', (options && options.ry) || 0); } /** @@ -74,7 +72,7 @@ export class Ellipse extends FabricObject { * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} object representation of an instance */ - toObject(propertiesToInclude: (keyof this)[] = []) { + toObject(propertiesToInclude: string[] = []) { return super.toObject(['rx', 'ry', ...propertiesToInclude]); } @@ -145,10 +143,12 @@ export const ellipseDefaultValues: Partial> = { type: 'ellipse', rx: 0, ry: 0, - cacheProperties: [...fabricObjectDefaultValues.cacheProperties, 'rx', 'ry'], }; -Object.assign(Ellipse.prototype, ellipseDefaultValues); +Object.assign(Ellipse.prototype, { + ...ellipseDefaultValues, + cacheProperties: [...cacheProperties, 'rx', 'ry'], +}); classRegistry.setClass(Ellipse); classRegistry.setSVGClass(Ellipse); diff --git a/src/shapes/group.class.ts b/src/shapes/group.class.ts index 596ee2178f2..655d083a042 100644 --- a/src/shapes/group.class.ts +++ b/src/shapes/group.class.ts @@ -17,7 +17,7 @@ import { import { applyTransformToObject } from '../util/misc/objectTransforms'; import { degreesToRadians } from '../util/misc/radiansDegreesConversion'; import { sin } from '../util/misc/sin'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, stateProperties } from './Object/FabricObject'; import { Rect } from './rect.class'; import { classRegistry } from '../util/class_registry'; @@ -90,7 +90,7 @@ export class Group extends createCollectionMixin(FabricObject) { * @type LayoutStrategy * @default */ - layout: LayoutStrategy; + declare layout: LayoutStrategy; /** * Used to optimize performance @@ -98,7 +98,7 @@ export class Group extends createCollectionMixin(FabricObject) { * @default * @type boolean */ - subTargetCheck: boolean; + declare subTargetCheck: boolean; /** * Used to allow targeting of object inside groups. @@ -107,7 +107,7 @@ export class Group extends createCollectionMixin(FabricObject) { * @default * @type boolean */ - interactive: boolean; + declare interactive: boolean; /** * Used internally to optimize performance @@ -130,7 +130,7 @@ export class Group extends createCollectionMixin(FabricObject) { objectsRelativeToGroup?: boolean ) { super(); - this._objects = objects || []; + this._objects = objects; this.__objectMonitor = this.__objectMonitor.bind(this); this.__objectSelectionTracker = this.__objectSelectionMonitor.bind( this, @@ -141,7 +141,7 @@ export class Group extends createCollectionMixin(FabricObject) { false ); this._firstLayoutDone = false; - // setting angle, skewX, skewY must occur after initial layout + // setting angle, skewX, skewY must occur after initial layout this.set({ ...options, angle: 0, skewX: 0, skewY: 0 }); this.forEachObject((object) => { this.enterGroup(object, false); @@ -913,7 +913,7 @@ export class Group extends createCollectionMixin(FabricObject) { */ __serializeObjects( method: 'toObject' | 'toDatalessObject', - propertiesToInclude?: (keyof this)[] + propertiesToInclude?: string[] ) { const _includeDefaultValues = this.includeDefaultValues; return this._objects @@ -1041,10 +1041,13 @@ export const groupDefaultValues: Partial> = { type: 'group', layout: 'fit-content', strokeWidth: 0, - stateProperties: fabricObjectDefaultValues.stateProperties.concat('layout'), subTargetCheck: false, interactive: false, }; -Object.assign(Group.prototype, groupDefaultValues); +Object.assign(Group.prototype, { + ...groupDefaultValues, + stateProperties: [...stateProperties, 'layout'], +}); + classRegistry.setClass(Group); diff --git a/src/shapes/image.class.ts b/src/shapes/image.class.ts index 40e9a1a99e7..346b2eb6b51 100644 --- a/src/shapes/image.class.ts +++ b/src/shapes/image.class.ts @@ -17,7 +17,7 @@ import { } from '../util/misc/objectEnlive'; import { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; export type ImageSource = | HTMLImageElement @@ -33,9 +33,9 @@ export class Image extends FabricObject { * This allows for relative urls as image src. * @since 2.7.0 * @type Boolean - * @default + * @default false */ - srcFromAttribute: boolean; + declare srcFromAttribute: boolean; /** * private @@ -73,7 +73,7 @@ export class Image extends FabricObject { * number bigger than 1 are not implemented yet. * @type Number */ - minimumScaleTrigger: number; + declare minimumScaleTrigger: number; /** * key used to retrieve the texture representing this image @@ -81,7 +81,7 @@ export class Image extends FabricObject { * @type String * @default */ - cacheKey: string; + declare cacheKey: string; /** * Image crop in pixels from original image size. @@ -89,7 +89,7 @@ export class Image extends FabricObject { * @type Number * @default */ - cropX: number; + declare cropX: number; /** * Image crop in pixels from original image size. @@ -97,7 +97,7 @@ export class Image extends FabricObject { * @type Number * @default */ - cropY: number; + declare cropY: number; /** * Indicates whether this canvas will use image smoothing when painting this image. @@ -106,18 +106,18 @@ export class Image extends FabricObject { * @type Boolean * @default */ - imageSmoothing: boolean; + declare imageSmoothing: boolean; - preserveAspectRatio: string; + declare preserveAspectRatio: string; - protected src: string; + protected declare src: string; - filters: BaseFilter[]; - resizeFilter: BaseFilter; + declare filters: BaseFilter[]; + declare resizeFilter: BaseFilter; - protected _element: ImageSource; - protected _originalElement: ImageSource; - protected _filteredEl: ImageSource; + protected declare _element: ImageSource; + protected declare _originalElement: ImageSource; + protected declare _filteredEl: ImageSource; /** * Constructor @@ -131,10 +131,8 @@ export class Image extends FabricObject { constructor(elementId: string, options: any = {}); constructor(element: ImageSource, options: any = {}); constructor(arg0: ImageSource | string, options: any = {}) { - super(); - this.filters = []; + super({ filters: [], ...options }); this.cacheKey = `texture${uid()}`; - this.set(options); this.setElement( (typeof arg0 === 'string' && getEnv().document.getElementById(arg0)) || arg0, @@ -777,17 +775,15 @@ export const imageDefaultValues: Partial> = { strokeWidth: 0, srcFromAttribute: false, minimumScaleTrigger: 0.5, - cacheProperties: [ - ...fabricObjectDefaultValues.cacheProperties, - 'cropX', - 'cropY', - ], cropX: 0, cropY: 0, imageSmoothing: true, }; -Object.assign(Image.prototype, imageDefaultValues); +Object.assign(Image.prototype, { + ...imageDefaultValues, + cacheProperties: [...cacheProperties, 'cropX', 'cropY'], +}); classRegistry.setClass(Image); classRegistry.setSVGClass(Image); diff --git a/src/shapes/itext.class.ts b/src/shapes/itext.class.ts index 6a0b5e63520..09bb0c2082e 100644 --- a/src/shapes/itext.class.ts +++ b/src/shapes/itext.class.ts @@ -67,53 +67,53 @@ export class IText extends ITextClickBehaviorMixin { * @type Number * @default */ - selectionStart: number; + declare selectionStart: number; /** * Index where text selection ends * @type Number * @default */ - selectionEnd: number; + declare selectionEnd: number; - compositionStart: number; + declare compositionStart: number; - compositionEnd: number; + declare compositionEnd: number; /** * Color of text selection * @type String * @default */ - selectionColor: string; + declare selectionColor: string; /** * Indicates whether text is in editing mode * @type Boolean * @default */ - isEditing: boolean; + declare isEditing: boolean; /** * Indicates whether a text can be edited * @type Boolean * @default */ - editable: boolean; + declare editable: boolean; /** * Border color of text object while it's in editing mode * @type String * @default */ - editingBorderColor: string; + declare editingBorderColor: string; /** * Width of cursor (in px) * @type Number * @default */ - cursorWidth: number; + declare cursorWidth: number; /** * Color of text cursor color in editing mode. @@ -123,28 +123,28 @@ export class IText extends ITextClickBehaviorMixin { * @type String * @default */ - cursorColor: string; + declare cursorColor: string; /** * Delay between cursor blink (in ms) * @type Number * @default */ - cursorDelay: number; + declare cursorDelay: number; /** * Duration of cursor fade in (in ms) * @type Number * @default */ - cursorDuration: number; + declare cursorDuration: number; /** * Indicates whether internal text char widths can be cached * @type Boolean * @default */ - caching: boolean; + declare caching: boolean; /** @@ -619,9 +619,9 @@ export const iTextDefaultValues: Partial> = { cursorDuration: 600, caching: true, hiddenTextareaContainer: null, - _reSpace: /\s|\n/, _currentCursorOpacity: 1, _selectionDirection: null, + _reSpace: /\s|\n/, inCompositionMode: false, keysMap, keysMapRtl, diff --git a/src/shapes/line.class.ts b/src/shapes/line.class.ts index 467d9adb5cf..bd1798b9767 100644 --- a/src/shapes/line.class.ts +++ b/src/shapes/line.class.ts @@ -1,12 +1,15 @@ -// @ts-nocheck import { SHARED_ATTRIBUTES } from '../parser/attributes'; import { parseAttributes } from '../parser/parseAttributes'; import { TClassProperties } from '../typedefs'; import { clone } from '../util/lang_object'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; +import { Point } from '../point.class'; +import { isFiller } from '../util/types'; -const coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 }; +// @TODO this code is terrible and Line should be a special case of polyline. + +const coordProps = ['x1', 'x2', 'y1', 'y2']; export class Line extends FabricObject { /** @@ -14,28 +17,28 @@ export class Line extends FabricObject { * @type Number * @default */ - x1: number; + declare x1: number; /** * y value or first line edge * @type Number * @default */ - y1: number; + declare y1: number; /** * x value or second line edge * @type Number * @default */ - x2: number; + declare x2: number; /** * y value or second line edge * @type Number * @default */ - y2: number; + declare y2: number; /** * Constructor @@ -43,11 +46,10 @@ export class Line extends FabricObject { * @param {Object} [options] Options object * @return {Line} thisArg */ - constructor(points, options) { - if (!points) { - points = [0, 0, 0, 0]; - } - + constructor( + points = [0, 0, 0, 0], + options: Partial> = {} + ) { super(options); this.set('x1', points[0]); @@ -62,15 +64,11 @@ export class Line extends FabricObject { * @private * @param {Object} [options] Options */ - _setWidthHeight(options) { - options || (options = {}); - + _setWidthHeight({ left, top }: Partial> = {}) { this.width = Math.abs(this.x2 - this.x1); this.height = Math.abs(this.y2 - this.y1); - - this.left = 'left' in options ? options.left : this._getLeftToOriginX(); - - this.top = 'top' in options ? options.top : this._getTopToOriginY(); + this.left = left ?? this._getLeftToOriginX(); + this.top = top ?? this._getTopToOriginY(); } /** @@ -78,9 +76,9 @@ export class Line extends FabricObject { * @param {String} key * @param {*} value */ - _set(key, value) { + _set(key: string, value: any) { super._set(key, value); - if (typeof coordProps[key] !== 'undefined') { + if (coordProps.includes(key)) { this._setWidthHeight(); } return this; @@ -90,7 +88,7 @@ export class Line extends FabricObject { * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ - _render(ctx) { + _render(ctx: CanvasRenderingContext2D) { ctx.beginPath(); const p = this.calcLinePoints(); @@ -103,7 +101,11 @@ export class Line extends FabricObject { // make sure setting "fill" changes color of a line // (by copying fillStyle to strokeStyle, since line is stroked, not filled) const origStrokeStyle = ctx.strokeStyle; - ctx.strokeStyle = this.stroke || ctx.fillStyle; + if (isFiller(this.stroke)) { + ctx.strokeStyle = this.stroke.toLive(ctx); + } else { + ctx.strokeStyle = this.stroke ?? ctx.fillStyle; + } this.stroke && this._renderStroke(ctx); ctx.strokeStyle = origStrokeStyle; } @@ -112,13 +114,10 @@ export class Line extends FabricObject { * This function is an helper for svg import. it returns the center of the object in the svg * untransformed coordinates * @private - * @return {Object} center point from element coordinates + * @return {Point} center point from element coordinates */ - _findCenterFromElement() { - return { - x: (this.x1 + this.x2) / 2, - y: (this.y1 + this.y2) / 2, - }; + _findCenterFromElement(): Point { + return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2); } /** @@ -127,7 +126,7 @@ export class Line extends FabricObject { * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} object representation of an instance */ - toObject(propertiesToInclude) { + toObject(propertiesToInclude: string[]) { return { ...super.toObject(propertiesToInclude), ...this.calcLinePoints() }; } @@ -135,7 +134,7 @@ export class Line extends FabricObject { * Calculate object dimensions from its properties * @private */ - _getNonTransformedDimensions() { + _getNonTransformedDimensions(): Point { const dim = super._getNonTransformedDimensions(); if (this.strokeLineCap === 'butt') { if (this.width === 0) { @@ -152,7 +151,7 @@ export class Line extends FabricObject { * Recalculates line points given width and height * @private */ - calcLinePoints() { + calcLinePoints(): Record { const xMult = this.x1 <= this.x2 ? -1 : 1, yMult = this.y1 <= this.y2 ? -1 : 1, x1 = xMult * this.width * 0.5, @@ -168,7 +167,10 @@ export class Line extends FabricObject { }; } - private makeEdgeToOriginGetter(propertyNames, originValues) { + private makeEdgeToOriginGetter( + propertyNames: any, + originValues: any + ): number { const origin = propertyNames.origin, axis1 = propertyNames.axis1, axis2 = propertyNames.axis2, @@ -186,6 +188,9 @@ export class Line extends FabricObject { ); case farthest: return Math.max(this.get(axis1), this.get(axis2)); + // this should never occurr, since origin is always either one of the 3 above + default: + return 0; } } @@ -193,7 +198,7 @@ export class Line extends FabricObject { * @private * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line. */ - _getLeftToOriginX() { + _getLeftToOriginX(): number { return this.makeEdgeToOriginGetter( { // property names @@ -215,7 +220,7 @@ export class Line extends FabricObject { * @private * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line. */ - _getTopToOriginY() { + _getTopToOriginY(): number { return this.makeEdgeToOriginGetter( { // property names @@ -273,8 +278,7 @@ export class Line extends FabricObject { * @param {Object} [options] Options object * @param {Function} [callback] callback function invoked after parsing */ - static fromElement(element, callback, options) { - options = options || {}; + static fromElement(element: SVGElement, callback: (line: Line) => any) { const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES), points = [ parsedAttributes.x1 || 0, @@ -282,7 +286,7 @@ export class Line extends FabricObject { parsedAttributes.x2 || 0, parsedAttributes.y2 || 0, ]; - callback(new this(points, { ...parsedAttributes, ...options })); + callback(new this(points, parsedAttributes)); } /* _FROM_SVG_END_ */ @@ -294,13 +298,12 @@ export class Line extends FabricObject { * @param {Object} object Object to create an instance from * @returns {Promise} */ - static fromObject(object) { + static fromObject(object: Record) { const options = clone(object, true); options.points = [object.x1, object.y1, object.x2, object.y2]; return this._fromObject(options, { extraParam: 'points', }).then((fabricLine) => { - delete fabricLine.points; return fabricLine; }); } @@ -312,16 +315,12 @@ export const lineDefaultValues: Partial> = { y1: 0, x2: 0, y2: 0, - cacheProperties: [ - ...fabricObjectDefaultValues.cacheProperties, - 'x1', - 'x2', - 'y1', - 'y2', - ], }; -Object.assign(Line.prototype, lineDefaultValues); +Object.assign(Line.prototype, { + ...lineDefaultValues, + cacheProperties: [...cacheProperties, 'x1', 'x2', 'y1', 'y2'], +}); classRegistry.setClass(Line); classRegistry.setSVGClass(Line); diff --git a/src/shapes/path.class.ts b/src/shapes/path.class.ts index adaca3913d6..7832834b464 100644 --- a/src/shapes/path.class.ts +++ b/src/shapes/path.class.ts @@ -14,7 +14,7 @@ import { type TPathSegmentsInfo, } from '../util/path'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; export class Path extends FabricObject { /** @@ -22,15 +22,15 @@ export class Path extends FabricObject { * @type Array * @default */ - path: PathData; + declare path: PathData; - pathOffset: Point; + declare pathOffset: Point; - fromSVG?: boolean; + declare fromSVG?: boolean; - sourcePath?: string; + declare sourcePath?: string; - segmentsInfo?: TPathSegmentsInfo[]; + declare segmentsInfo?: TPathSegmentsInfo[]; /** * Constructor @@ -43,7 +43,6 @@ export class Path extends FabricObject { { path: _, left, top, ...options }: any = {} ) { super(options); - const pathTL = this._setPath(path || []); const origin = this.translateToGivenOrigin( new Point(left ?? pathTL.x, top ?? pathTL.y), @@ -383,15 +382,12 @@ export class Path extends FabricObject { export const pathDefaultValues: Partial> = { type: 'path', - path: null, - cacheProperties: [ - ...fabricObjectDefaultValues.cacheProperties, - 'path', - 'fillRule', - ], }; -Object.assign(Path.prototype, pathDefaultValues); +Object.assign(Path.prototype, { + ...pathDefaultValues, + cacheProperties: [...cacheProperties, 'path', 'fillRule'], +}); classRegistry.setClass(Path); classRegistry.setSVGClass(Path); diff --git a/src/shapes/polyline.class.ts b/src/shapes/polyline.class.ts index c4a223e2dd2..941dde47719 100644 --- a/src/shapes/polyline.class.ts +++ b/src/shapes/polyline.class.ts @@ -9,7 +9,7 @@ import { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints'; import { projectStrokeOnPoints } from '../util/misc/projectStroke'; import { degreesToRadians } from '../util/misc/radiansDegreesConversion'; import { toFixed } from '../util/misc/toFixed'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; export class Polyline extends FabricObject { /** @@ -17,7 +17,7 @@ export class Polyline extends FabricObject { * @type Array * @default */ - points: IPoint[]; + declare points: IPoint[]; /** * WARNING: Feature in progress @@ -27,23 +27,22 @@ export class Polyline extends FabricObject { * @deprecated * @type Boolean * @default false - * @todo set default to true and remove flag and related logic */ - exactBoundingBox: boolean; + declare exactBoundingBox: boolean; - private initialized: true | undefined; + private declare initialized: true | undefined; /** * A list of properties that if changed trigger a recalculation of dimensions * @todo check if you really need to recalculate for all cases */ - strokeBBoxAffectingProperties: (keyof this)[]; + declare strokeBBoxAffectingProperties: (keyof this)[]; - fromSVG: boolean; + declare fromSVG: boolean; - pathOffset: Point; + declare pathOffset: Point; - strokeOffset: Point; + declare strokeOffset: Point; /** * Constructor @@ -187,7 +186,7 @@ export class Polyline extends FabricObject { * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} Object representation of an instance */ - toObject(propertiesToInclude?: (keyof this)[]): object { + toObject(propertiesToInclude?: string[]): object { return { ...super.toObject(propertiesToInclude), points: this.points.concat(), @@ -313,7 +312,11 @@ export class Polyline extends FabricObject { export const polylineDefaultValues: Partial> = { type: 'polyline', exactBoundingBox: false, - cacheProperties: [...fabricObjectDefaultValues.cacheProperties, 'points'], +}; + +Object.assign(Polyline.prototype, { + ...polylineDefaultValues, + cacheProperties: [...cacheProperties, 'points'], strokeBBoxAffectingProperties: [ 'skewX', 'skewY', @@ -324,9 +327,7 @@ export const polylineDefaultValues: Partial> = { 'strokeUniform', 'points', ], -}; - -Object.assign(Polyline.prototype, polylineDefaultValues); +}); classRegistry.setClass(Polyline); classRegistry.setSVGClass(Polyline); diff --git a/src/shapes/rect.class.ts b/src/shapes/rect.class.ts index 0316d934958..38e71a43d7c 100644 --- a/src/shapes/rect.class.ts +++ b/src/shapes/rect.class.ts @@ -3,7 +3,7 @@ import { SHARED_ATTRIBUTES } from '../parser/attributes'; import { parseAttributes } from '../parser/parseAttributes'; import { TClassProperties } from '../typedefs'; import { classRegistry } from '../util/class_registry'; -import { FabricObject, fabricObjectDefaultValues } from './Object/FabricObject'; +import { FabricObject, cacheProperties } from './Object/FabricObject'; export class Rect extends FabricObject { /** @@ -11,14 +11,14 @@ export class Rect extends FabricObject { * @type Number * @default */ - rx: number; + declare rx: number; /** * Vertical border radius * @type Number * @default */ - ry: number; + declare ry: number; /** * Constructor @@ -106,7 +106,7 @@ export class Rect extends FabricObject { * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} object representation of an instance */ - toObject(propertiesToInclude: (keyof this)[] = []) { + toObject(propertiesToInclude: string[] = []) { return super.toObject(['rx', 'ry', ...propertiesToInclude]); } @@ -188,10 +188,12 @@ export const rectDefaultValues: Partial> = { type: 'rect', rx: 0, ry: 0, - cacheProperties: [...fabricObjectDefaultValues.cacheProperties, 'rx', 'ry'], }; -Object.assign(Rect.prototype, rectDefaultValues); +Object.assign(Rect.prototype, { + ...rectDefaultValues, + cacheProperties: [...cacheProperties, 'rx', 'ry'], +}); classRegistry.setClass(Rect); classRegistry.setSVGClass(Rect); diff --git a/src/shapes/text.class.ts b/src/shapes/text.class.ts index 9635d3a0b75..8533ef6f81d 100644 --- a/src/shapes/text.class.ts +++ b/src/shapes/text.class.ts @@ -1,5 +1,4 @@ // @ts-nocheck -import { getEnv } from '../env'; import { cache } from '../cache'; import { DEFAULT_SVG_FONT_SIZE } from '../constants'; import { ObjectEvents } from '../EventTypeDefs'; @@ -25,7 +24,7 @@ import { stylesToArray, } from '../util/misc/textStyles'; import { getPathSegmentsInfo, getPointOnPath } from '../util/path'; -import { fabricObjectDefaultValues } from './Object/FabricObject'; +import { cacheProperties } from './Object/FabricObject'; import { Path } from './path.class'; import { TextSVGExportMixin } from '../mixins/text.svg_export'; import { applyMixins } from '../util/applyMixins'; @@ -96,77 +95,77 @@ export class Text< * @type Array * @private */ - _dimensionAffectingProps: (keyof this)[]; + declare _dimensionAffectingProps: (keyof this)[]; /** * @private */ - _reNewline: RegExp; + declare _reNewline: RegExp; /** * Use this regular expression to filter for whitespaces that is not a new line. * Mostly used when text is 'justify' aligned. * @private */ - _reSpacesAndTabs: RegExp; + declare _reSpacesAndTabs: RegExp; /** * Use this regular expression to filter for whitespace that is not a new line. * Mostly used when text is 'justify' aligned. * @private */ - _reSpaceAndTab: RegExp; + declare _reSpaceAndTab: RegExp; /** * Use this regular expression to filter consecutive groups of non spaces. * Mostly used when text is 'justify' aligned. * @private */ - _reWords: RegExp; + declare _reWords: RegExp; - text: string; + declare text: string; /** * Font size (in pixels) * @type Number * @default */ - fontSize: number; + declare fontSize: number; /** * Font weight (e.g. bold, normal, 400, 600, 800) * @type {(Number|String)} * @default */ - fontWeight: string; + declare fontWeight: string; /** * Font family * @type String * @default */ - fontFamily: string; + declare fontFamily: string; /** * Text decoration underline. * @type Boolean * @default */ - underline: boolean; + declare underline: boolean; /** * Text decoration overline. * @type Boolean * @default */ - overline: boolean; + declare overline: boolean; /** * Text decoration linethrough. * @type Boolean * @default */ - linethrough: boolean; + declare linethrough: boolean; /** * Text alignment. Possible values: "left", "center", "right", "justify", @@ -174,26 +173,26 @@ export class Text< * @type String * @default */ - textAlign: string; + declare textAlign: string; /** * Font style . Possible values: "", "normal", "italic" or "oblique". * @type String * @default */ - fontStyle: string; + declare fontStyle: string; /** * Line height * @type Number * @default */ - lineHeight: number; + declare lineHeight: number; /** * Superscript schema object (minimum overlap) */ - superscript: { + declare superscript: { /** * fontSize factor * @default 0.6 @@ -209,7 +208,7 @@ export class Text< /** * Subscript schema object (minimum overlap) */ - subscript: { + declare subscript: { /** * fontSize factor * @default 0.6 @@ -227,11 +226,11 @@ export class Text< * @type String * @default */ - textBackgroundColor: string; + declare textBackgroundColor: string; - protected _styleProperties: string[]; + protected declare _styleProperties: string[]; - styles: TextStyle; + declare styles: TextStyle; /** * Path that the text should follow. @@ -255,7 +254,7 @@ export class Text< * }); * @default */ - path: Path; + declare path: Path; /** * Offset amount for text path starting position @@ -263,7 +262,7 @@ export class Text< * @type Number * @default */ - pathStartOffset: number; + declare pathStartOffset: number; /** * Which side of the path the text should be drawn on. @@ -271,7 +270,7 @@ export class Text< * @type {String} 'left|right' * @default */ - pathSide: string; + declare pathSide: string; /** * How text is aligned to the path. This property determines @@ -281,24 +280,24 @@ export class Text< * @type String * @default */ - pathAlign: string; + declare pathAlign: string; /** * @private */ - _fontSizeFraction: number; + declare _fontSizeFraction: number; /** * @private */ - offsets: { underline: number; linethrough: number; overline: number }; + declare offsets: { underline: number; linethrough: number; overline: number }; /** * Text Line proportion to font Size (in pixels) * @type Number * @default */ - _fontSizeMult: number; + declare _fontSizeMult: number; /** * additional space between characters @@ -306,14 +305,14 @@ export class Text< * @type Number * @default */ - charSpacing: number; + declare charSpacing: number; /** * Baseline shift, styles only, keep at 0 for the main text object * @type {Number} * @default */ - deltaY: number; + declare deltaY: number; /** * WARNING: EXPERIMENTAL. NOT SUPPORTED YET @@ -326,7 +325,7 @@ export class Text< * @type {String} 'ltr|rtl' * @default */ - direction: string; + declare direction: string; /** * contains characters bounding boxes @@ -340,14 +339,14 @@ export class Text< * @readonly * @private */ - CACHE_FONT_SIZE: number; + declare CACHE_FONT_SIZE: number; /** * contains the min text width to avoid getting 0 * @type {Number} * @default */ - MIN_TEXT_WIDTH: number; + declare MIN_TEXT_WIDTH: number; /** * contains the the text of the object, divided in lines as they are displayed @@ -355,23 +354,23 @@ export class Text< * @type {string[]} * @default */ - textLines: string[]; + declare textLines: string[]; /** * same as textlines, but each line is an array of graphemes as split by splitByGrapheme * @type {string[]} * @default */ - _textLines: string[][]; + declare _textLines: string[][]; - _unwrappedTextLines: string[][]; - _text: string[]; - cursorWidth: number; - __lineHeights: number[]; - __lineWidths: number[]; - _forceClearCache: boolean; + declare _unwrappedTextLines: string[][]; + declare _text: string[]; + declare cursorWidth: number; + declare __lineHeights: number[]; + declare __lineWidths: number[]; + declare _forceClearCache: boolean; - initialized?: true; + declare initialized?: true; constructor(text: string, options: any) { super({ ...options, text, styles: options?.styles || {} }); @@ -1869,6 +1868,9 @@ export class Text< } } +// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype +// regexes, list of properties that are not suppose to change by instances, magic consts. +// this will be a separated effort export const textDefaultValues: Partial> = { _dimensionAffectingProps: [ 'fontSize', @@ -1922,10 +1924,7 @@ export const textDefaultValues: Partial> = { baseline: 0.11, // baseline-shift factor (downwards) }, textBackgroundColor: '', - cacheProperties: [ - ...fabricObjectDefaultValues.cacheProperties, - ...additionalProps, - ], + cacheProperties: [...cacheProperties, ...additionalProps], stroke: null, shadow: null, path: null, diff --git a/src/shapes/textbox.class.ts b/src/shapes/textbox.class.ts index d7c9f4aac73..5ff59c1787e 100644 --- a/src/shapes/textbox.class.ts +++ b/src/shapes/textbox.class.ts @@ -16,7 +16,7 @@ export class Textbox extends IText { * @type Number * @default */ - minWidth: number; + declare minWidth: number; /** * Minimum calculated width of a textbox, in pixels. @@ -25,13 +25,13 @@ export class Textbox extends IText { * @type Number * @default */ - dynamicMinWidth: number; + declare dynamicMinWidth: number; /** * Cached array of text wrapping. * @type Array */ - __cachedLines: Array | null = null; + declare __cachedLines: Array | null; /** * Use this boolean property in order to split strings that have no white space concept. @@ -39,7 +39,7 @@ export class Textbox extends IText { * @type Boolean * @since 2.6.0 */ - splitByGrapheme: boolean; + declare splitByGrapheme: boolean; /** * Unlike superclass's version of this function, Textbox does not update @@ -457,6 +457,9 @@ export class Textbox extends IText { } } +// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype +// regexes, list of properties that are not suppose to change by instances, magic consts. +// this will be a separated effort export const textboxDefaultValues: Partial> = { type: 'textbox', minWidth: 20, diff --git a/src/util/class_registry.ts b/src/util/class_registry.ts index eac00402234..808d1b1a33f 100644 --- a/src/util/class_registry.ts +++ b/src/util/class_registry.ts @@ -14,8 +14,8 @@ export const JSON = 'json'; export const SVG = 'svg'; export class ClassRegistry { - [JSON]: Map; - [SVG]: Map; + declare [JSON]: Map; + declare [SVG]: Map; constructor() { this[JSON] = new Map(); diff --git a/src/util/transform_matrix_removal.ts b/src/util/transform_matrix_removal.ts new file mode 100644 index 00000000000..a560726788b --- /dev/null +++ b/src/util/transform_matrix_removal.ts @@ -0,0 +1,60 @@ +import { Image } from '../shapes/image.class'; +import type { FabricObject } from '../shapes/Object/FabricObject'; +import { TMat2D } from '../typedefs'; +import { qrDecompose } from './misc/matrix'; + +type FabricObjectWithTransformMatrix = FabricObject & { + transformMatrix?: TMat2D; +}; + +/** + * This function is an helper for svg import. it decompose the transformMatrix + * and assign properties to object. + * untransformed coordinates + * @private + */ +const _assignTransformMatrixProps = ( + object: FabricObjectWithTransformMatrix +) => { + if (object.transformMatrix) { + const { scaleX, scaleY, angle, skewX } = qrDecompose( + object.transformMatrix + ); + object.flipX = false; + object.flipY = false; + object.set('scaleX', scaleX); + object.set('scaleY', scaleY); + object.angle = angle; + object.skewX = skewX; + object.skewY = 0; + } +}; + +/** + * This function is an helper for svg import. it removes the transform matrix + * and set to object properties that fabricjs can handle + * @private + * @param {Object} preserveAspectRatioOptions + */ +export const removeTransformMatrixForSvgParsing = ( + object: FabricObjectWithTransformMatrix, + preserveAspectRatioOptions?: any +) => { + let center = object._findCenterFromElement(); + if (object.transformMatrix) { + _assignTransformMatrixProps(object); + center = center.transform(object.transformMatrix); + } + delete object.transformMatrix; + if (preserveAspectRatioOptions) { + object.scaleX *= preserveAspectRatioOptions.scaleX; + object.scaleY *= preserveAspectRatioOptions.scaleY; + (object as Image).cropX = preserveAspectRatioOptions.cropX; + (object as Image).cropY = preserveAspectRatioOptions.cropY; + center.x += preserveAspectRatioOptions.offsetLeft; + center.y += preserveAspectRatioOptions.offsetTop; + object.width = preserveAspectRatioOptions.width; + object.height = preserveAspectRatioOptions.height; + } + object.setPositionByOrigin(center, 'center', 'center'); +}; diff --git a/src/util/types.ts b/src/util/types.ts index a75d6313f85..8d88fc1120d 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -10,11 +10,20 @@ import type { Text } from '../shapes/text.class'; import type { Pattern } from '../pattern.class'; import type { IText } from '../shapes/itext.class'; import type { Textbox } from '../shapes/textbox.class'; +import type { Gradient } from '../gradient/gradient.class'; -export const isFiller = (filler: TFiller | string): filler is TFiller => { +export const isFiller = ( + filler: TFiller | string | null +): filler is TFiller => { return !!filler && (filler as TFiller).toLive !== undefined; }; +export const isSerializableFiller = ( + filler: TFiller | string | null +): filler is TFiller => { + return !!filler && typeof (filler as TFiller).toObject === 'function'; +}; + export const isPattern = (filler: TFiller): filler is Pattern => { return ( !!filler && diff --git a/test/unit/image.js b/test/unit/image.js index 8dc21f65594..21013ce67c8 100644 --- a/test/unit/image.js +++ b/test/unit/image.js @@ -613,7 +613,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.ok(imgObject instanceof fabric.Image); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); @@ -641,7 +641,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 0, 'left'); @@ -670,7 +670,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 0, 'left'); @@ -699,7 +699,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 0, 'left'); @@ -728,7 +728,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 0, 'left'); @@ -757,7 +757,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 35, 'left'); @@ -786,7 +786,7 @@ }); fabric.Image.fromElement(imageEl, function(imgObject) { - imgObject._removeTransformMatrix(imgObject.parsePreserveAspectRatioAttribute()); + fabric.util.removeTransformMatrixForSvgParsing(imgObject, imgObject.parsePreserveAspectRatioAttribute()); assert.deepEqual(imgObject.get('width'), 14, 'width of an object'); assert.deepEqual(imgObject.get('height'), 17, 'height of an object'); assert.deepEqual(imgObject.get('left'), 70, 'left'); diff --git a/test/unit/object.js b/test/unit/object.js index f079ee380b9..cc0bdce8b6d 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -630,112 +630,6 @@ assert.ok(removedEventFired); }); - QUnit.test('center', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.center === 'function'); - - canvas.add(object); - assert.equal(object.center(), object, 'should be chainable'); - - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2); - - canvas.setZoom(2); - object.center(); - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2, 'object center.x is in canvas center when the canvas is transformed'); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2, 'object center.y is in canvas center when the canvas is transformed'); - - }); - - QUnit.test('centerH', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.centerH === 'function'); - var oldY = object.top; - - canvas.add(object); - assert.equal(object.centerH(), object, 'should be chainable'); - - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2); - assert.equal(object.top, oldY, 'object top did not change'); - canvas.setZoom(2); - object.centerH(); - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2, 'object center.x is in canvas center when the canvas is transformed'); - }); - - QUnit.test('centerV', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.centerV === 'function'); - var oldX = object.left; - - canvas.add(object); - assert.equal(object.centerV(), object, 'should be chainable'); - assert.equal(object.left, oldX, 'object top did not change'); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2); - - canvas.setZoom(2); - object.centerV(); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2, 'object center.y is in canvas center when the canvas is transformed'); - }); - - QUnit.test('viewportCenter', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.viewportCenter === 'function'); - - canvas.add(object); - assert.equal(object.viewportCenter(), object, 'should be chainable'); - - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2); - - canvas.setZoom(2); - object.viewportCenter(); - assert.equal(object.getCenterPoint().x, canvas.getWidth() / (2 * canvas.getZoom())); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / (2 * canvas.getZoom())); - }); - - QUnit.test('viewportCenterH', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.viewportCenterH === 'function'); - - var oldY = object.top; - canvas.add(object); - assert.equal(object.viewportCenterH(), object, 'should be chainable'); - assert.equal(object.getCenterPoint().x, canvas.getWidth() / 2); - assert.equal(object.top, oldY, 'object top did not change'); - canvas.setZoom(2); - object.viewportCenterH(); - assert.equal(object.getCenterPoint().x, canvas.getWidth() / (2 * canvas.getZoom())); - assert.equal(object.top, oldY, 'object top did not change'); - }); - - QUnit.test('viewportCenterV', function(assert) { - var object = new fabric.Object(); - object.strokeWidth = 0; - canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; - assert.ok(typeof object.viewportCenterV === 'function'); - - var oldX = object.left; - - canvas.add(object); - assert.equal(object.viewportCenterV(), object, 'should be chainable'); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / 2); - assert.equal(object.left, oldX, 'object left did not change'); - canvas.setZoom(2); - object.viewportCenterV(); - assert.equal(object.getCenterPoint().y, canvas.getHeight() / (2 * canvas.getZoom())); - assert.equal(object.left, oldX, 'object left did not change'); - }); - QUnit.test('isDescendantOf', function (assert) { var object = new fabric.Object(); var parent = new fabric.Object(); diff --git a/test/unit/path.js b/test/unit/path.js index 4db3b630b57..d4ed9f8c67a 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -127,11 +127,6 @@ updatePath(path, REFERENCE_PATH_OBJECT.path, true); assert.deepEqual(path.toObject(), REFERENCE_PATH_OBJECT); updatePath(path, REFERENCE_PATH_OBJECT.path, false); - var left = path.left; - var top = path.top; - path.center(); - assert.equal(left, path.left); - assert.equal(top, path.top); var opts = fabric.util.object.clone(REFERENCE_PATH_OBJECT); delete opts.path; path.set(opts); From 0b9eb8c3225303bfc55362b575887c3aa1786a83 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Thu, 12 Jan 2023 01:40:27 +0100 Subject: [PATCH 6/9] chore(TS) use export to get type definitions (#8585) --- .babelrc | 11 + CHANGELOG.md | 3 +- index.js => index.ts | 11 +- package-lock.json | 13979 ++++++++++------------------------ package.json | 16 +- rollup.config.js | 42 - rollup.config.mjs | 47 + src/shapes/textbox.class.ts | 6 - test/node_test_setup.js | 2 +- tsconfig.json | 5 +- 10 files changed, 3925 insertions(+), 10197 deletions(-) create mode 100644 .babelrc rename index.js => index.ts (97%) delete mode 100644 rollup.config.js create mode 100644 rollup.config.mjs diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000000..db6eed3a90c --- /dev/null +++ b/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + "@babel/env", + [ + "@babel/typescript", + { + "allowDeclareFields": true + } + ] + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 14c4a7934a7..706670a2c61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## [next] -\- chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) +- chore(TS): move to export, babel, new rollup, change import statement for fabric. [#8585](https://github.com/fabricjs/fabric.js/pull/8585); +- chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) - refactor(Animation): BREAKING: Animation api reduction and semplification (byValue is removed, '+=' syntax is removed, callbacks fired 100%) [#8547](https://github.com/fabricjs/fabric.js/pull/8547) - feat(PolyControl): modify the shape of a poly with control points [#8556](https://github.com/fabricjs/fabric.js/pull/8556) - BREAKING: remove Object.stateful and Object.statefulCache [#8573](https://github.com/fabricjs/fabric.js/pull/8573) diff --git a/index.js b/index.ts similarity index 97% rename from index.js rename to index.ts index eadcb2f05a5..7098a3b748c 100644 --- a/index.js +++ b/index.ts @@ -431,13 +431,4 @@ const fabric = { getCSSRules, }; -if (typeof exports !== 'undefined') { - exports.fabric = fabric; -} else if (typeof define === 'function' && define.amd) { - /* _AMD_START_ */ - define([], function () { - return fabric; - }); -} else if (typeof window !== 'undefined') { - window.fabric = fabric; -} +export default fabric; diff --git a/package-lock.json b/package-lock.json index ee41470c2eb..961f3f91b2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,12 @@ "version": "5.1.0", "license": "MIT", "devDependencies": { - "@rollup/plugin-commonjs": "^22.0.2", - "@rollup/plugin-json": "^4.1.0", + "@babel/preset-env": "^7.20.2", + "@babel/preset-typescript": "^7.18.6", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-terser": "^0.3.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/fs-extra": "^9.0.13", "@types/lodash": "^4.14.180", "@types/node": "^17.0.21", @@ -36,13 +40,11 @@ "prettier": "2.7.1", "ps-list": "^8.1.0", "qunit": "^2.17.2", - "rollup": "^2.75.6", - "rollup-plugin-size-snapshot": "^0.12.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-ts": "^3.0.2", + "rollup": "^3.9.1", "source-map-support": "^0.5.21", "testem": "^3.8.0", - "typescript": "^4.7.4" + "tslib": "^2.4.1", + "typescript": "^4.9.4" }, "engines": { "node": ">=14.0.0" @@ -79,21 +81,21 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -139,28 +141,54 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -170,6 +198,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -179,109 +216,301 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", + "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, "engines": { "node": ">=6.9.0" } @@ -301,12 +530,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -314,16 +543,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -332,1623 +555,2286 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, "engines": { - "node": ">=12.22" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", + "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { - "node": ">= 10.14.2" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", - "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", - "optional": true, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.5", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "@babel/helper-plugin-utils": "^7.10.4" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mdn/browser-compat-data": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", - "integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==", - "dev": true + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", - "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^2.68.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.0.8" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-replace/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", + "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", + "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "optional": true, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "dependencies": { - "@types/node": "*" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, - "node_modules/@types/object-path": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.1.tgz", - "integrity": "sha512-219LSCO9HPcoXcRTC6DbCs0FRhZgBnEMzf16RRqkT40WbkKx3mOeQuz3e2XqbfhOz/AHfbru0kzB1n1RCAsIIg==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.10", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.10.tgz", - "integrity": "sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw==", - "dev": true - }, - "node_modules/@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", - "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/type-utils": "5.29.0", - "@typescript-eslint/utils": "5.29.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", - "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", - "debug": "^4.3.4" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", - "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", - "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.29.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", - "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", - "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "eslint-visitor-keys": "^3.3.0" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", + "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@wessberg/stringutil": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz", - "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.2.tgz", - "integrity": "sha512-+R0juSseERyoPvnBQ/cZih6bpF7IpCXlWbHRoCRzYzqpz6gWHOgf8o4MOEf6KBVuOyqU+gCNLkCWVIJAro8XyQ==", - "dev": true, + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "optional": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@babel/runtime": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dev": true, "dependencies": { - "event-target-shim": "^5.0.0" + "regenerator-runtime": "^0.13.11" }, "engines": { - "node": ">=6.5" + "node": ">=6.9.0" } }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/@babel/traverse": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "optional": true, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "optional": true, - "bin": { - "acorn": "bin/acorn" + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "optional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "optional": true, "dependencies": { - "debug": "4" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true, - "optional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "devOptional": true + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", + "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "optional": true, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.5", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" }, - "engines": { - "node": ">=10" + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "node_modules/@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, "engines": { - "node": ">=8" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "node_modules/@rollup/plugin-terser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.3.0.tgz", + "integrity": "sha512-mYTkNW9KjOscS/3QWU5LfOKsR3/fAAVDaqcAe2TZ7ng6pN46f+C7FOZbITuIW/neA+PhcjoKl7yMyB3XcmA4gw==", "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", "dev": true, "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true }, - "node_modules/assign-symbols": { + "node_modules/@types/estree": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true + "node_modules/@types/lodash": { + "version": "4.14.180", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", + "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", + "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", + "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", "dev": true, - "bin": { - "atob": "bin/atob.js" + "dependencies": { + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/type-utils": "5.29.0", + "@typescript-eslint/utils": "5.29.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/auto-changelog": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", - "integrity": "sha512-S2B+RtTgytsa7l5iFGBoWT9W9ylITT5JJ8OaMJ7nrwvnlRm1dSS2tghaYueDeInZZafOE+1llH3tUQjMDRVS1g==", - "dev": true, - "dependencies": { - "commander": "^5.0.0", - "handlebars": "^4.7.3", - "node-fetch": "^2.6.0", - "parse-github-url": "^1.0.2", - "semver": "^6.3.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "bin": { - "auto-changelog": "src/index.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=8.3" + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/auto-changelog/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/auto-changelog/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" - } - }, - "node_modules/backbone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", - "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", - "dev": true, - "dependencies": { - "underscore": ">=1.8.3" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/@typescript-eslint/parser": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", + "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", + "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", + "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@typescript-eslint/utils": "5.29.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", + "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", + "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", + "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", + "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.29.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.2.tgz", + "integrity": "sha512-+R0juSseERyoPvnBQ/cZih6bpF7IpCXlWbHRoCRzYzqpz6gWHOgf8o4MOEf6KBVuOyqU+gCNLkCWVIJAro8XyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "optional": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "optional": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "devOptional": true + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "node_modules/auto-changelog": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", + "integrity": "sha512-S2B+RtTgytsa7l5iFGBoWT9W9ylITT5JJ8OaMJ7nrwvnlRm1dSS2tghaYueDeInZZafOE+1llH3tUQjMDRVS1g==", + "dev": true, + "dependencies": { + "commander": "^5.0.0", + "handlebars": "^4.7.3", + "node-fetch": "^2.6.0", + "parse-github-url": "^1.0.2", + "semver": "^6.3.0" + }, + "bin": { + "auto-changelog": "src/index.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/auto-changelog/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/auto-changelog/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/backbone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "underscore": ">=1.8.3" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true + }, "node_modules/base64-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", @@ -1987,35 +2873,6 @@ "node": "^4.5.0 || >= 5.9" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -2033,12 +2890,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, "node_modules/body-parser": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", @@ -2118,148 +2969,16 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "optional": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/browserslist-generator": { - "version": "1.0.66", - "resolved": "https://registry.npmjs.org/browserslist-generator/-/browserslist-generator-1.0.66.tgz", - "integrity": "sha512-aFDax4Qzh29DdyhHQBD2Yu2L5OvaDnvYFMbmpLrLwwaNK4H6dHEhC/Nxv93/+mfAA+a/t94ln0P2JZvHO6LZDA==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^4.1.16", - "@types/object-path": "^0.11.1", - "@types/semver": "^7.3.9", - "@types/ua-parser-js": "^0.7.36", - "browserslist": "4.20.2", - "caniuse-lite": "^1.0.30001328", - "isbot": "3.4.5", - "object-path": "^0.11.8", - "semver": "^7.3.7", - "ua-parser-js": "^1.0.2" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/browserslist-generator?sponsor=1" - } - }, - "node_modules/browserslist-generator/node_modules/browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "funding": [ { @@ -2272,11 +2991,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -2285,21 +3003,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/browserslist-generator/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2330,18 +3033,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -2363,94 +3054,6 @@ "node": ">= 0.8" } }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/cacache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -2485,9 +3088,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true, "funding": [ { @@ -2544,34 +3147,6 @@ "inherits": "^2.0.1" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -2581,40 +3156,6 @@ "node": ">=10" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2677,19 +3218,6 @@ "node": ">=0.8" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2741,21 +3269,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/compatfactory": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-1.0.1.tgz", - "integrity": "sha512-hR9u0HSZTKDNNchPtMHg6myeNx0XO+av7UZIJPsi4rPALJBHi/W5Mbwi19hC/xm6y3JkYpxVYjTqnSGsU5X/iw==", - "dev": true, - "dependencies": { - "helpertypes": "^0.0.18" - }, - "engines": { - "node": ">=14.9.0" - }, - "peerDependencies": { - "typescript": ">=3.x || >= 4.x" - } - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -2809,67 +3322,16 @@ }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "devOptional": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "devOptional": true + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2888,12 +3350,6 @@ "node": ">= 0.10.0" } }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -2945,57 +3401,17 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/core-js-compat": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", + "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "browserslist": "^4.21.4" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, "node_modules/core-util-is": { @@ -3017,49 +3433,6 @@ "node": ">= 0.10" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3110,46 +3483,6 @@ "node": ">= 8" } }, - "node_modules/crosspath": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz", - "integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==", - "dev": true, - "dependencies": { - "@types/node": "^17.0.36" - }, - "engines": { - "node": ">=14.9.0" - } - }, - "node_modules/crosspath/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -3174,12 +3507,6 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "optional": true }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, "node_modules/data-urls": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", @@ -3260,15 +3587,6 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "optional": true }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -3314,18 +3632,6 @@ "clone": "^1.0.2" } }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3350,16 +3656,6 @@ "node": ">= 0.6" } }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -3378,32 +3674,6 @@ "node": ">=0.10" } }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3428,16 +3698,6 @@ "node": ">=6.0.0" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -3459,54 +3719,6 @@ "node": ">=12" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3514,30 +3726,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.165.tgz", - "integrity": "sha512-DKQW1lqUSAYQvn9dnpK7mWaDpWbNOXQLXhfCi7Iwx0BKxdZOxkKcCyKw1l3ihWWW5iWSxKKbhEUoNRoHvl/hbA==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, "node_modules/emoji-regex": { @@ -3546,15 +3737,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "devOptional": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -3627,32 +3809,6 @@ } } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -4197,31 +4353,12 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -4283,39 +4420,6 @@ "semver": "bin/semver" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/express": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", @@ -4359,131 +4463,41 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "2.0.0" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extglob/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { "node": ">=0.10.0" } @@ -4531,12 +4545,6 @@ "reusify": "^1.0.4" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4564,13 +4572,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4678,46 +4679,6 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/follow-redirects": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", @@ -4738,15 +4699,6 @@ } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -4833,18 +4785,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -4854,46 +4794,6 @@ "node": ">= 0.6" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -4949,48 +4849,6 @@ "node": ">= 8" } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5097,15 +4955,6 @@ "integrity": "sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==", "dev": true }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5197,19 +5046,6 @@ "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", "dev": true }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -5258,81 +5094,6 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "devOptional": true }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -5349,26 +5110,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/helpertypes": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/helpertypes/-/helpertypes-0.0.18.tgz", - "integrity": "sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5431,12 +5172,6 @@ "node": ">= 6" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -5482,12 +5217,6 @@ } ] }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -5531,12 +5260,6 @@ "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5859,53 +5582,10 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -5914,53 +5594,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -5976,15 +5609,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6025,24 +5649,12 @@ } }, "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-potential-custom-element-name": { @@ -6051,15 +5663,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "optional": true }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6120,36 +5723,12 @@ "node": ">=8" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbot": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.4.5.tgz", - "integrity": "sha512-+KD6q1BBtw0iK9aGBGSfxJ31/ZgizKRjhm8ebgJUBMx0aeeQuIJ1I72beCoIrltIZGrSm4vmrxRxrG5n1aUTtw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -6325,141 +5904,18 @@ "node": ">=8" } }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", "dev": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -6565,12 +6021,6 @@ "node": ">=4" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6629,18 +6079,6 @@ "kill-port": "cli.js" } }, - "node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -6654,41 +6092,6 @@ "node": ">= 0.8.0" } }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6900,18 +6303,6 @@ "node": ">=10" } }, - "node_modules/magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6936,38 +6327,6 @@ "semver": "bin/semver.js" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6977,61 +6336,12 @@ "node": ">= 0.6" } }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7063,25 +6373,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -7136,18 +6427,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7182,62 +6461,16 @@ } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, "dependencies": { - "is-plain-object": "^2.0.4" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/mkdirp": { @@ -7261,50 +6494,6 @@ "node": "*" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7332,113 +6521,6 @@ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7486,84 +6568,6 @@ } } }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", @@ -7615,9 +6619,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node_modules/node-watch": { @@ -7644,16 +6648,6 @@ "node": ">=6" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7752,65 +6746,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "dev": true, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -7966,12 +6901,6 @@ "node": ">=8" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -8053,53 +6982,6 @@ "node": ">=8" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8112,19 +6994,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse-github-url": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", @@ -8152,28 +7021,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8222,22 +7069,6 @@ "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8256,15 +7087,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/pixelmatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", @@ -8298,15 +7120,6 @@ "node": ">=4.0.0" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -8320,65 +7133,17 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/printf": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/printf/-/printf-0.6.1.tgz", @@ -8388,21 +7153,6 @@ "node": ">= 0.9.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -8415,12 +7165,6 @@ "node": ">=8" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8434,12 +7178,6 @@ "node": ">= 0.10" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, "node_modules/ps-list": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz", @@ -8458,26 +7196,6 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "optional": true }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -8488,27 +7206,6 @@ "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -8530,25 +7227,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8604,16 +7282,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8659,12 +7327,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -8679,55 +7341,37 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "@babel/runtime": "^7.8.4" } }, "node_modules/regexpp": { @@ -8742,404 +7386,163 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "jsesc": "~0.5.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "2.75.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", - "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", - "dev": true, "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-size-snapshot": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.12.0.tgz", - "integrity": "sha512-3DrZdAUqRWgD7ZW7sMLtHqRfUqTnWZhP2CHsz/3RdyAL36uw/WQQBaKCmisntMRO9QPDno2USmUXSxS2U9NJcw==", - "dev": true, - "dependencies": { - "@rollup/plugin-replace": "^2.3.2", - "acorn": "^7.2.0", - "bytes": "^3.1.0", - "chalk": "^4.0.0", - "gzip-size": "^5.1.1", - "jest-diff": "^26.0.1", - "memory-fs": "^0.5.0", - "terser": "^4.7.0", - "webpack": "^4.43.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "rollup": "^2.0.0" + "regjsparser": "bin/parser" } }, - "node_modules/rollup-plugin-size-snapshot/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/rollup-plugin-size-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/rollup-plugin-size-snapshot/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rollup-plugin-size-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "jsesc": "bin/jsesc" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "es6-error": "^4.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/rollup-plugin-size-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-size-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/rollup-plugin-size-snapshot/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "node_modules/rollup-plugin-size-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rollup-plugin-size-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/rollup-plugin-size-snapshot/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-ts": { + "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-ts/-/rollup-plugin-ts-3.0.2.tgz", - "integrity": "sha512-67qi2QTHewhLyKDG6fX3jpohWpmUPPIT/xJ7rsYK46X6MqmoWy64Ti0y8ygPfLv8mXDCdRZUofM3mTxDfCswRA==", - "dev": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "@wessberg/stringutil": "^1.0.19", - "ansi-colors": "^4.1.3", - "browserslist": "^4.20.4", - "browserslist-generator": "^1.0.66", - "compatfactory": "^1.0.1", - "crosspath": "^2.0.0", - "magic-string": "^0.26.2", - "ts-clone-node": "^1.0.0", - "tslib": "^2.4.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=14.9.0", - "npm": ">=7.0.0", - "pnpm": ">=3.2.0", - "yarn": ">=1.13" + "bin": { + "rimraf": "bin.js" }, "funding": { - "type": "github", - "url": "https://github.com/wessberg/rollup-plugin-ts?sponsor=1" - }, - "peerDependencies": { - "@babel/core": ">=6.x || >=7.x", - "@babel/plugin-transform-runtime": ">=6.x || >=7.x", - "@babel/preset-env": ">=6.x || >=7.x", - "@babel/preset-typescript": ">=6.x || >=7.x", - "@babel/runtime": ">=6.x || >=7.x", - "@swc/core": ">=1.x", - "@swc/helpers": ">=0.2", - "rollup": ">=1.x || >=2.x", - "typescript": ">=3.2.x || >= 4.x" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@babel/plugin-transform-runtime": { - "optional": true - }, - "@babel/preset-env": { - "optional": true - }, - "@babel/preset-typescript": { - "optional": true - }, - "@babel/runtime": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/helpers": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup-plugin-ts/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/rollup": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-ts/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -9172,21 +7575,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/run-queue/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "node_modules/rxjs": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", @@ -9216,15 +7604,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9243,20 +7622,6 @@ "node": ">=10" } }, - "node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -9318,9 +7683,9 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -9347,46 +7712,12 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "devOptional": true }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -9444,168 +7775,34 @@ "url": "https://feross.org/support" } ], - "optional": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", "dev": true }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/socket.io": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", @@ -9643,12 +7840,6 @@ "node": ">=10.0.0" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9658,20 +7849,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -9682,19 +7859,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, "node_modules/spawn-args": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", @@ -9733,71 +7897,12 @@ "node": ">= 8" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -9807,105 +7912,6 @@ "node": ">= 0.6" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -10055,15 +8061,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -10082,9 +8079,9 @@ } }, "node_modules/terser": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", - "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -10099,155 +8096,6 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser-webpack-plugin/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10372,61 +8220,9 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "node_modules/tiny-glob": { "version": "0.2.9", @@ -10450,12 +8246,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -10465,45 +8255,6 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10516,91 +8267,6 @@ "node": ">=8.0" } }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -10630,29 +8296,10 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "devOptional": true }, - "node_modules/ts-clone-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ts-clone-node/-/ts-clone-node-1.0.0.tgz", - "integrity": "sha512-/cDYbr2HAXxFNeTT41c/xs/2bhLJjqnYheHsmA3AoHSt+n4JA4t0FL9Lk5O8kWnJ6jeB3kPcUoXIFtwERNzv6Q==", - "dev": true, - "dependencies": { - "compatfactory": "^1.0.1" - }, - "engines": { - "node": ">=14.9.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/ts-clone-node?sponsor=1" - }, - "peerDependencies": { - "typescript": "^3.x || ^4.x" - } - }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "node_modules/tsutils": { @@ -10676,12 +8323,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -10716,12 +8357,6 @@ "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -10732,9 +8367,9 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10744,25 +8379,6 @@ "node": ">=4.2.0" } }, - "node_modules/ua-parser-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", - "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, "node_modules/uglify-js": { "version": "3.15.5", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz", @@ -10782,37 +8398,44 @@ "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", "dev": true }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" + "engines": { + "node": ">=4" } }, "node_modules/universalify": { @@ -10833,1465 +8456,1538 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "devOptional": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4.0" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "optional": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "optional": true, "dependencies": { - "isarray": "1.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "devOptional": true + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "optional": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "optional": true, "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "devOptional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz", - "integrity": "sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ==", + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "isexe": "^2.0.0" }, "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "which": "bin/which" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "devOptional": true, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "devOptional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "devOptional": true - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 0.4.0" + "node": ">=8" } }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 0.8" + "node": ">=7.0.0" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/w3c-hr-time": { + "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "optional": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "devOptional": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { - "browser-process-hrtime": "^1.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "node_modules/ws": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz", + "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==", "optional": true, - "dependencies": { - "xml-name-validator": "^4.0.0" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "optional": true, "engines": { "node": ">=12" } }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "optional": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "devOptional": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "optional": true, "dependencies": { - "chokidar": "^2.1.8" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/highlight": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "@babel/compat-data": { + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "dev": true + }, + "@babel/core": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "@babel/generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" } }, - "node_modules/watchpack-chokidar2/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" }, - "engines": { - "node": ">= 4.0" + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "@babel/helper-create-class-features-plugin": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", + "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" } }, - "node_modules/watchpack-chokidar2/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/watchpack-chokidar2/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, - "node_modules/watchpack-chokidar2/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "@babel/helper-member-expression-to-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.20.7" } }, - "node_modules/watchpack-chokidar2/node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.20.2" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.20.0" } }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, - "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "@babel/helpers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, - "optional": true + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "@babel/parser": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, - "dependencies": { - "defaults": "^1.0.3" + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "devOptional": true - }, - "node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "node_modules/webpack/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dev": true, - "engines": { - "node": ">=4.0" + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "node_modules/webpack/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "node_modules/webpack/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" } }, - "node_modules/webpack/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", + "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "node_modules/webpack/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack/node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/webpack/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/webpack/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" } }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "optional": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "optional": true, - "engines": { - "node": ">=12" + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "devOptional": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "devOptional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, - "dependencies": { - "errno": "~0.1.7" + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" } }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", + "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "@babel/plugin-transform-classes": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", + "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "devOptional": true + "@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "@babel/plugin-transform-destructuring": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" } }, - "node_modules/ws": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz", - "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==", - "optional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "optional": true, - "engines": { - "node": ">=12" + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "optional": true + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, - "engines": { - "node": ">=0.4" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" } }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", - "dev": true + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } }, - "@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "@babel/plugin-transform-parameters": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.20.2" } }, - "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", - "dev": true + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" } }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" } }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "requires": { - "@babel/types": "^7.18.2" + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true + "@babel/plugin-transform-typescript": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", + "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } }, - "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" }, "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", - "dev": true + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -12400,77 +10096,13 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } @@ -12530,12 +10162,6 @@ "tar": "^6.1.11" } }, - "@mdn/browser-compat-data": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", - "integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==", - "dev": true - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -12562,79 +10188,55 @@ "fastq": "^1.6.0" } }, - "@rollup/plugin-commonjs": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", - "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", + "@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" } }, "@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.8" + "@rollup/pluginutils": "^5.0.1" } }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "@rollup/plugin-terser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.3.0.tgz", + "integrity": "sha512-mYTkNW9KjOscS/3QWU5LfOKsR3/fAAVDaqcAe2TZ7ng6pN46f+C7FOZbITuIW/neA+PhcjoKl7yMyB3XcmA4gw==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + } + }, + "@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" } }, "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" } }, "@tootallnate/once": { @@ -12662,9 +10264,9 @@ "dev": true }, "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "@types/fs-extra": { @@ -12676,30 +10278,6 @@ "@types/node": "*" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -12718,39 +10296,6 @@ "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, - "@types/object-path": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.1.tgz", - "integrity": "sha512-219LSCO9HPcoXcRTC6DbCs0FRhZgBnEMzf16RRqkT40WbkKx3mOeQuz3e2XqbfhOz/AHfbru0kzB1n1RCAsIIg==", - "dev": true - }, - "@types/semver": { - "version": "7.3.10", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.10.tgz", - "integrity": "sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw==", - "dev": true - }, - "@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, "@typescript-eslint/eslint-plugin": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", @@ -12908,205 +10453,12 @@ "eslint-visitor-keys": "^3.3.0" } }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@wessberg/stringutil": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz", - "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==", - "dev": true - }, "@xmldom/xmldom": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.2.tgz", "integrity": "sha512-+R0juSseERyoPvnBQ/cZih6bpF7IpCXlWbHRoCRzYzqpz6gWHOgf8o4MOEf6KBVuOyqU+gCNLkCWVIJAro8XyQ==", "dev": true }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -13206,26 +10558,6 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -13258,17 +10590,6 @@ "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", @@ -13309,93 +10630,16 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "async": { @@ -13404,25 +10648,12 @@ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "optional": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "auto-changelog": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", @@ -13450,6 +10681,44 @@ } } }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, "backbone": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", @@ -13465,67 +10734,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "devOptional": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, "base64-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", @@ -13544,29 +10752,6 @@ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -13584,12 +10769,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, "body-parser": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", @@ -13659,143 +10838,22 @@ "fill-range": "^7.0.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "optional": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, "browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" - } - }, - "browserslist-generator": { - "version": "1.0.66", - "resolved": "https://registry.npmjs.org/browserslist-generator/-/browserslist-generator-1.0.66.tgz", - "integrity": "sha512-aFDax4Qzh29DdyhHQBD2Yu2L5OvaDnvYFMbmpLrLwwaNK4H6dHEhC/Nxv93/+mfAA+a/t94ln0P2JZvHO6LZDA==", - "dev": true, - "requires": { - "@mdn/browser-compat-data": "^4.1.16", - "@types/object-path": "^0.11.1", - "@types/semver": "^7.3.9", - "@types/ua-parser-js": "^0.7.36", - "browserslist": "4.20.2", - "caniuse-lite": "^1.0.30001328", - "isbot": "3.4.5", - "object-path": "^0.11.8", - "semver": "^7.3.7", - "ua-parser-js": "^1.0.2" - }, - "dependencies": { - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "buffer": { @@ -13814,18 +10872,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -13841,87 +10887,6 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -13947,9 +10912,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true }, "canvas": { @@ -13989,57 +10954,12 @@ "inherits": "^2.0.1" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "optional": true }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -14084,16 +11004,6 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -14136,15 +11046,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compatfactory": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-1.0.1.tgz", - "integrity": "sha512-hR9u0HSZTKDNNchPtMHg6myeNx0XO+av7UZIJPsi4rPALJBHi/W5Mbwi19hC/xm6y3JkYpxVYjTqnSGsU5X/iw==", - "dev": true, - "requires": { - "helpertypes": "^0.0.18" - } - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -14204,56 +11105,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "devOptional": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -14269,12 +11120,6 @@ "bluebird": "^3.7.2" } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -14315,56 +11160,19 @@ }, "cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "core-js-compat": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", + "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -14381,51 +11189,6 @@ "vary": "^1" } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -14463,42 +11226,6 @@ } } }, - "crosspath": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz", - "integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==", - "dev": true, - "requires": { - "@types/node": "^17.0.36" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -14522,12 +11249,6 @@ } } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, "data-urls": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", @@ -14587,12 +11308,6 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "optional": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, "decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -14632,15 +11347,6 @@ "clone": "^1.0.2" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -14659,16 +11365,6 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -14681,31 +11377,6 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -14724,12 +11395,6 @@ "esutils": "^2.0.2" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -14747,56 +11412,6 @@ } } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -14804,46 +11419,17 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.165.tgz", - "integrity": "sha512-DKQW1lqUSAYQvn9dnpK7mWaDpWbNOXQLXhfCi7Iwx0BKxdZOxkKcCyKw1l3ihWWW5iWSxKKbhEUoNRoHvl/hbA==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "devOptional": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -14895,26 +11481,6 @@ "base64-arraybuffer": "~1.0.1" } }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -15300,28 +11866,12 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, "events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -15370,38 +11920,6 @@ } } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, "express": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", @@ -15457,15 +11975,6 @@ } } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -15488,68 +11997,6 @@ } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -15590,12 +12037,6 @@ "reusify": "^1.0.4" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -15614,13 +12055,6 @@ "flat-cache": "^3.0.4" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15712,60 +12146,12 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "follow-redirects": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -15830,63 +12216,12 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -15921,50 +12256,6 @@ "minipass": "^3.0.0" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -16046,12 +12337,6 @@ "integrity": "sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -16123,17 +12408,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } + "dev": true }, "handlebars": { "version": "4.7.7", @@ -16169,70 +12444,6 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "devOptional": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -16243,23 +12454,6 @@ "type-fest": "^0.8.0" } }, - "helpertypes": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/helpertypes/-/helpertypes-0.0.18.tgz", - "integrity": "sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -16310,12 +12504,6 @@ "debug": "4" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -16341,12 +12529,6 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -16375,12 +12557,6 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -16638,102 +12814,21 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -16767,30 +12862,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "optional": true }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -16833,30 +12910,12 @@ "is-docker": "^2.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbot": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.4.5.tgz", - "integrity": "sha512-+KD6q1BBtw0iK9aGBGSfxJ31/ZgizKRjhm8ebgJUBMx0aeeQuIJ1I72beCoIrltIZGrSm4vmrxRxrG5n1aUTtw==", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -16993,109 +13052,18 @@ "istanbul-lib-report": "^3.0.0" } }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -17174,12 +13142,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -17226,15 +13188,6 @@ "shell-exec": "1.0.2" } }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -17245,34 +13198,6 @@ "type-check": "~0.3.2" } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -17453,15 +13378,6 @@ "yallist": "^4.0.0" } }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17475,96 +13391,22 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "devOptional": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "devOptional": true } } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -17587,24 +13429,6 @@ "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -17638,18 +13462,6 @@ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "optional": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -17684,45 +13496,6 @@ "yallist": "^4.0.0" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -17735,46 +13508,6 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", "dev": true }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -17799,91 +13532,6 @@ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -17917,86 +13565,6 @@ "whatwg-url": "^5.0.0" } }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", @@ -18038,9 +13606,9 @@ } }, "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node-watch": { @@ -18058,13 +13626,6 @@ "abbrev": "1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -18149,52 +13710,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "devOptional": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -18310,12 +13825,6 @@ } } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -18373,55 +13882,6 @@ "release-zalgo": "^1.0.0" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -18431,19 +13891,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-github-url": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", @@ -18462,25 +13909,6 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -18517,19 +13945,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -18542,108 +13957,46 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, "pixelmatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", "dev": true, "requires": { - "pngjs": "^3.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "optional": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "pngjs": "^3.0.0" } }, - "printf": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/printf/-/printf-0.6.1.tgz", - "integrity": "sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "optional": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "printf": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/printf/-/printf-0.6.1.tgz", + "integrity": "sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==", "dev": true }, "process-on-spawn": { @@ -18655,12 +14008,6 @@ "fromentries": "^1.2.0" } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -18671,12 +14018,6 @@ "ipaddr.js": "1.9.1" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, "ps-list": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz", @@ -18689,28 +14030,6 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "optional": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -18721,29 +14040,6 @@ "once": "^1.3.1" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -18756,18 +14052,6 @@ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -18802,16 +14086,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -18847,12 +14121,6 @@ } } }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -18864,45 +14132,34 @@ "util-deprecate": "^1.0.1" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "optional": true, "requires": { - "picomatch": "^2.2.1" + "regenerate": "^1.4.2" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "@babel/runtime": "^7.8.4" } }, "regexpp": { @@ -18911,6 +14168,43 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -18920,25 +14214,6 @@ "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -18950,229 +14225,62 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rollup": { - "version": "2.75.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", - "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-size-snapshot": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.12.0.tgz", - "integrity": "sha512-3DrZdAUqRWgD7ZW7sMLtHqRfUqTnWZhP2CHsz/3RdyAL36uw/WQQBaKCmisntMRO9QPDno2USmUXSxS2U9NJcw==", - "dev": true, - "requires": { - "@rollup/plugin-replace": "^2.3.2", - "acorn": "^7.2.0", - "bytes": "^3.1.0", - "chalk": "^4.0.0", - "gzip-size": "^5.1.1", - "jest-diff": "^26.0.1", - "memory-fs": "^0.5.0", - "terser": "^4.7.0", - "webpack": "^4.43.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "rollup-plugin-ts": { + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-ts/-/rollup-plugin-ts-3.0.2.tgz", - "integrity": "sha512-67qi2QTHewhLyKDG6fX3jpohWpmUPPIT/xJ7rsYK46X6MqmoWy64Ti0y8ygPfLv8mXDCdRZUofM3mTxDfCswRA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "@wessberg/stringutil": "^1.0.19", - "ansi-colors": "^4.1.3", - "browserslist": "^4.20.4", - "browserslist-generator": "^1.0.66", - "compatfactory": "^1.0.1", - "crosspath": "^2.0.0", - "magic-string": "^0.26.2", - "ts-clone-node": "^1.0.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" } }, "run-async": { @@ -19190,23 +14298,6 @@ "queue-microtask": "^1.2.2" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - } - } - }, "rxjs": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", @@ -19222,15 +14313,6 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "devOptional": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -19246,17 +14328,6 @@ "xmlchars": "^2.2.0" } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -19313,9 +14384,9 @@ } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -19339,40 +14410,12 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "devOptional": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -19429,121 +14472,11 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true }, "socket.io": { "version": "4.4.1", @@ -19576,246 +14509,63 @@ "debug": "~4.3.1" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "devOptional": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-args": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", - "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", - "dev": true - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "spawn-args": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", + "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", + "dev": true + }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "isexe": "^2.0.0" } } } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "streamsearch": { @@ -19933,12 +14683,6 @@ } } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -19954,9 +14698,9 @@ } }, "terser": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", - "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -19973,118 +14717,6 @@ } } }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -20191,57 +14823,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, "tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -20261,116 +14842,12 @@ "os-tmpdir": "~1.0.2" } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -20403,19 +14880,10 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "devOptional": true }, - "ts-clone-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ts-clone-node/-/ts-clone-node-1.0.0.tgz", - "integrity": "sha512-/cDYbr2HAXxFNeTT41c/xs/2bhLJjqnYheHsmA3AoHSt+n4JA4t0FL9Lk5O8kWnJ6jeB3kPcUoXIFtwERNzv6Q==", - "dev": true, - "requires": { - "compatfactory": "^1.0.1" - } - }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "tsutils": { @@ -20435,12 +14903,6 @@ } } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -20466,12 +14928,6 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -20482,15 +14938,9 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "ua-parser-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", - "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, "uglify-js": { @@ -20506,35 +14956,33 @@ "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", "dev": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true }, "universalify": { "version": "0.1.2", @@ -20548,57 +14996,10 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, "update-browserslist-db": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz", - "integrity": "sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -20611,54 +15012,7 @@ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } + "punycode": "^2.1.0" } }, "util-deprecate": { @@ -20685,12 +15039,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -20709,355 +15057,6 @@ "xml-name-validator": "^4.0.0" } }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - } - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -21073,267 +15072,6 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", "devOptional": true }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -21395,15 +15133,6 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -21478,12 +15207,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "optional": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", diff --git a/package.json b/package.json index b8a04e06c0d..d68cc30bc05 100644 --- a/package.json +++ b/package.json @@ -76,8 +76,12 @@ "jsdom": "^19.0.0" }, "devDependencies": { - "@rollup/plugin-commonjs": "^22.0.2", - "@rollup/plugin-json": "^4.1.0", + "@babel/preset-env": "^7.20.2", + "@babel/preset-typescript": "^7.18.6", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-terser": "^0.3.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/fs-extra": "^9.0.13", "@types/lodash": "^4.14.180", "@types/node": "^17.0.21", @@ -103,13 +107,11 @@ "prettier": "2.7.1", "ps-list": "^8.1.0", "qunit": "^2.17.2", - "rollup": "^2.75.6", - "rollup-plugin-size-snapshot": "^0.12.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-ts": "^3.0.2", + "rollup": "^3.9.1", "source-map-support": "^0.5.21", "testem": "^3.8.0", - "typescript": "^4.7.4" + "tslib": "^2.4.1", + "typescript": "^4.9.4" }, "engines": { "node": ">=14.0.0" diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 5e7ba64c7fb..00000000000 --- a/rollup.config.js +++ /dev/null @@ -1,42 +0,0 @@ -import json from '@rollup/plugin-json'; -import { sizeSnapshot } from 'rollup-plugin-size-snapshot'; -import { terser } from 'rollup-plugin-terser'; -import ts from 'rollup-plugin-ts'; - -const runStats = Number(process.env.BUILD_STATS); - -const splitter = /\n|\s|,/g; - -// https://rollupjs.org/guide/en/#configuration-files -export default { - input: process.env.BUILD_INPUT?.split(splitter) || ['./index.js'], - output: [ - { - file: process.env.BUILD_OUTPUT || './dist/fabric.js', - name: 'fabric', - format: 'cjs', - sourcemap: true, - }, - Number(process.env.MINIFY) - ? { - file: process.env.BUILD_MIN_OUTPUT || './dist/fabric.min.js', - name: 'fabric', - format: 'cjs', - plugins: [ - runStats && - sizeSnapshot({ - snapshotPath: 'cli_output/build_size.json', - }), - terser(), - ], - } - : null, - ], - // see list of plugins (not comprehensive): https://github.com/rollup/awesome - plugins: [ - json(), - ts({ - /* Plugin options */ - }), - ], -}; diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 00000000000..f2f597a73ba --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,47 @@ +import json from '@rollup/plugin-json'; +import terser from '@rollup/plugin-terser'; +import ts from '@rollup/plugin-typescript'; +import { babel } from '@rollup/plugin-babel'; +// import dts from "rollup-plugin-dts"; + +const splitter = /\n|\s|,/g; + +// https://rollupjs.org/guide/en/#configuration-files +export default [ + { + input: process.env.BUILD_INPUT?.split(splitter) || ['./index.ts'], + output: [ + { + file: process.env.BUILD_OUTPUT || './dist/fabric.js', + name: 'fabric', + format: 'umd', + sourcemap: true, + }, + Number(process.env.MINIFY) + ? { + file: process.env.BUILD_MIN_OUTPUT || './dist/fabric.min.js', + name: 'fabric', + format: 'umd', + plugins: [terser()], + } + : null, + ], + // see list of plugins (not comprehensive): https://github.com/rollup/awesome + plugins: [ + json(), + ts({ + noForceEmit: true, + tsconfig: './tsconfig.json', + }), + babel({ + extensions: ['.ts', '.js'], + babelHelpers: 'bundled', + }), + ], + }, + // { + // input: "./my-input/index.d.ts", + // output: [{ file: "dist/my-library.d.ts", format: "es" }], + // plugins: [dts()], + // }, +]; diff --git a/src/shapes/textbox.class.ts b/src/shapes/textbox.class.ts index 5ff59c1787e..181d3ddf133 100644 --- a/src/shapes/textbox.class.ts +++ b/src/shapes/textbox.class.ts @@ -27,12 +27,6 @@ export class Textbox extends IText { */ declare dynamicMinWidth: number; - /** - * Cached array of text wrapping. - * @type Array - */ - declare __cachedLines: Array | null; - /** * Use this boolean property in order to split strings that have no white space concept. * this is a cheap way to help with chinese/japanese diff --git a/test/node_test_setup.js b/test/node_test_setup.js index 582660766cb..247911693b7 100644 --- a/test/node_test_setup.js +++ b/test/node_test_setup.js @@ -25,7 +25,7 @@ QUnit.recreateVisualRefs = Number(process.env.QUNIT_RECREATE_VISUAL_REFS); QUnit.config.filter = process.env.QUNIT_FILTER; -global.fabric = require('../dist/fabric').fabric; +global.fabric = require('../dist/fabric'); global.pixelmatch = require('pixelmatch'); global.fs = require('fs'); global.visualCallback = { diff --git a/tsconfig.json b/tsconfig.json index e093f847558..17617639996 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -44,7 +44,7 @@ /* Emit */ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, "declarationMap": true /* Create sourcemaps for d.ts files. */, - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "emitDeclarationOnly": true /* Only output d.ts files and not JavaScript files. */, "sourceMap": true /* Create source map files for emitted JavaScript files. */, // "outFile": "", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */, @@ -98,5 +98,6 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "include": ["src"] + "exclude": ["dist"], + "include": ["./", "index.ts", "src"] } From 8b102b7b1bfb6c3532d83256029df190e8c34ff8 Mon Sep 17 00:00:00 2001 From: Shachar <34343793+ShaMan123@users.noreply.github.com> Date: Thu, 12 Jan 2023 02:54:31 +0200 Subject: [PATCH 7/9] refactor(Text): canvas text editing manager (#8543) --- CHANGELOG.md | 1 + src/canvas/TextEditingManager.ts | 49 ++++++++++ src/canvas/canvas.class.ts | 9 -- src/canvas/canvas_events.ts | 25 +++++- src/mixins/itext_behavior.mixin.ts | 110 +++-------------------- src/mixins/itext_click_behavior.mixin.ts | 24 ++--- src/shapes/itext.class.ts | 13 ++- src/shapes/text.class.ts | 2 +- test/unit/canvas_events.js | 76 ++++++++++++++++ test/unit/itext.js | 52 ----------- 10 files changed, 183 insertions(+), 178 deletions(-) create mode 100644 src/canvas/TextEditingManager.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 706670a2c61..ac6aed2311c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- refactor(Canvas, IText): Handle cross instance text editing states to an EditingManager class [#8543](https://github.com/fabricjs/fabric.js/pull/8543) - chore(TS): move to export, babel, new rollup, change import statement for fabric. [#8585](https://github.com/fabricjs/fabric.js/pull/8585); - chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) - refactor(Animation): BREAKING: Animation api reduction and semplification (byValue is removed, '+=' syntax is removed, callbacks fired 100%) [#8547](https://github.com/fabricjs/fabric.js/pull/8547) diff --git a/src/canvas/TextEditingManager.ts b/src/canvas/TextEditingManager.ts new file mode 100644 index 00000000000..332c3a700c9 --- /dev/null +++ b/src/canvas/TextEditingManager.ts @@ -0,0 +1,49 @@ +import { TPointerEvent } from '../EventTypeDefs'; +import type { IText } from '../shapes/itext.class'; +import type { Textbox } from '../shapes/textbox.class'; +import { removeFromArray } from '../util/internals'; + +/** + * In charge of synchronizing all interactive text instances of a canvas + */ +export class TextEditingManager { + private targets: (IText | Textbox)[] = []; + private target?: IText | Textbox; + + exitTextEditing() { + this.target = undefined; + this.targets.forEach((target) => { + if (target.isEditing) { + target.exitEditing(); + } + }); + } + + add(target: IText | Textbox) { + this.targets.push(target); + } + + remove(target: IText | Textbox) { + this.unregister(target); + removeFromArray(this.targets, target); + } + + register(target: IText | Textbox) { + this.target = target; + } + + unregister(target: IText | Textbox) { + if (target === this.target) { + this.target = undefined; + } + } + + onMouseMove(e: TPointerEvent) { + this.target?.isEditing && this.target.updateSelectionOnMouseMove(e); + } + + dispose() { + this.targets = []; + this.target = undefined; + } +} diff --git a/src/canvas/canvas.class.ts b/src/canvas/canvas.class.ts index aa9d7790e1c..c649e3f8fc2 100644 --- a/src/canvas/canvas.class.ts +++ b/src/canvas/canvas.class.ts @@ -494,8 +494,6 @@ export class SelectableCanvas< protected declare _isCurrentlyDrawing: boolean; declare freeDrawingBrush?: BaseBrush; declare _activeObject?: FabricObject; - declare _hasITextHandlers?: boolean; - declare _iTextInstances: (IText | Textbox)[]; /** * Constructor * @param {HTMLCanvasElement | String} el canvas element to initialize instance on @@ -1523,7 +1521,6 @@ export class SelectableCanvas< super.destroy(); wrapperEl.removeChild(upperCanvasEl); wrapperEl.removeChild(lowerCanvasEl); - this._iTextInstances = []; this.contextCache = null; this.contextTop = null; cleanUpJsdomNode(upperCanvasEl); @@ -1543,12 +1540,6 @@ export class SelectableCanvas< // this.discardActiveGroup(); this.discardActiveObject(); this.clearContext(this.contextTop); - if (this._hasITextHandlers) { - // @ts-ignore - this.off('mouse:up', this._mouseUpITextHandler); - this._iTextInstances = []; - this._hasITextHandlers = false; - } super.clear(); } diff --git a/src/canvas/canvas_events.ts b/src/canvas/canvas_events.ts index 1c2e5806b6c..253abf4a70f 100644 --- a/src/canvas/canvas_events.ts +++ b/src/canvas/canvas_events.ts @@ -22,6 +22,7 @@ import { isInteractiveTextObject, } from '../util/types'; import { SelectableCanvas } from './canvas.class'; +import { TextEditingManager } from './TextEditingManager'; const RIGHT_CLICK = 3, MIDDLE_CLICK = 2, @@ -123,6 +124,8 @@ export class Canvas extends SelectableCanvas { */ declare _previousPointer: Point; + textEditingManager = new TextEditingManager(); + /** * Adds mouse listeners to canvas * @private @@ -133,7 +136,6 @@ export class Canvas extends SelectableCanvas { // this is a workaround to having double listeners. this.removeListeners(); this._bindEvents(); - // @ts-ginore this.addOrRemove(addListener, 'add'); } @@ -1225,6 +1227,7 @@ export class Canvas extends SelectableCanvas { } else { this._transformObject(e); } + this.textEditingManager.onMouseMove(e); this._handleEvent(e, 'move'); this._resetTransformEventData(); } @@ -1640,6 +1643,26 @@ export class Canvas extends SelectableCanvas { this._groupSelector = null; } + exitTextEditing() { + this.textEditingManager.exitTextEditing(); + } + + /** + * @override clear {@link textEditingManager} + */ + clear() { + this.textEditingManager.dispose(); + super.clear(); + } + + /** + * @override clear {@link textEditingManager} + */ + destroy() { + super.destroy(); + this.textEditingManager.dispose(); + } + /** * Clones canvas instance without cloning existing data. * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size. diff --git a/src/mixins/itext_behavior.mixin.ts b/src/mixins/itext_behavior.mixin.ts index 328f188eaba..642178d151d 100644 --- a/src/mixins/itext_behavior.mixin.ts +++ b/src/mixins/itext_behavior.mixin.ts @@ -1,15 +1,12 @@ // @ts-nocheck import { getEnv } from '../env'; -import { ObjectEvents, TEvent } from '../EventTypeDefs'; +import { ObjectEvents, TEvent, TPointerEvent } from '../EventTypeDefs'; import { Point } from '../point.class'; import { Text } from '../shapes/text.class'; -import { TPointerEvent } from '../typedefs'; import { setStyle } from '../util/dom_style'; -import { removeFromArray } from '../util/internals'; import { createCanvasElement } from '../util/misc/dom'; import { transformPoint } from '../util/misc/matrix'; -import type { Canvas } from '../canvas/canvas_events'; import { TextStyleDeclaration } from './text_style.mixin'; // extend this regex to support non english languages @@ -47,7 +44,6 @@ export abstract class ITextBehaviorMixin< }; protected declare _currentCursorOpacity: number; private declare _textBeforeEdit: string; - protected declare __isMousedown: boolean; protected declare __selectionStartOnMouseDown: number; private declare __dragImageDisposer: VoidFunction; private declare __dragStartFired: boolean; @@ -92,11 +88,10 @@ export abstract class ITextBehaviorMixin< * Initializes all the interactive behavior of IText */ initBehavior() { - this.initAddedHandler(); - this.initRemovedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); - this.mouseMoveHandler = this.mouseMoveHandler.bind(this); + this.updateSelectionOnMouseMove = + this.updateSelectionOnMouseMove.bind(this); this.dragEnterHandler = this.dragEnterHandler.bind(this); this.dragOverHandler = this.dragOverHandler.bind(this); this.dragLeaveHandler = this.dragLeaveHandler.bind(this); @@ -114,62 +109,6 @@ export abstract class ITextBehaviorMixin< this.selected = false; } - /** - * Initializes "added" event handler - */ - initAddedHandler() { - this.on('added', (opt) => { - // make sure we listen to the canvas added event - const canvas = opt.target; - if (canvas) { - if (!canvas._hasITextHandlers) { - canvas._hasITextHandlers = true; - this._initCanvasHandlers(canvas); - } - canvas._iTextInstances = canvas._iTextInstances || []; - canvas._iTextInstances.push(this); - } - }); - } - - initRemovedHandler() { - this.on('removed', (opt) => { - // make sure we listen to the canvas removed event - const canvas = opt.target; - if (canvas) { - canvas._iTextInstances = canvas._iTextInstances || []; - removeFromArray(canvas._iTextInstances, this); - if (canvas._iTextInstances.length === 0) { - canvas._hasITextHandlers = false; - this._removeCanvasHandlers(canvas); - } - } - }); - } - - /** - * register canvas event to manage exiting on other instances - * @private - */ - _initCanvasHandlers(canvas: Canvas) { - canvas._mouseUpITextHandler = function () { - if (canvas._iTextInstances) { - canvas._iTextInstances.forEach((tObj) => { - tObj.__isMousedown = false; - }); - } - }; - canvas.on('mouse:up', canvas._mouseUpITextHandler); - } - - /** - * remove canvas event to manage exiting on other instances - * @private - */ - _removeCanvasHandlers(canvas: Canvas) { - canvas.off('mouse:up', canvas._mouseUpITextHandler); - } - /** * @private */ @@ -193,7 +132,7 @@ export abstract class ITextBehaviorMixin< }, }; - obj.animate('_currentCursorOpacity', targetOpacity, { + obj._animate('_currentCursorOpacity', targetOpacity, { duration: duration, onComplete: function () { if (!tickState.isAborted) { @@ -448,7 +387,7 @@ export abstract class ITextBehaviorMixin< } if (this.canvas) { this.canvas.calcOffset(); - this.exitEditingOnOthers(this.canvas); + this.canvas.textEditingManager.exitTextEditing(); } this.isEditing = true; @@ -464,46 +403,21 @@ export abstract class ITextBehaviorMixin< this._tick(); this.fire('editing:entered'); this._fireSelectionChanged(); - if (!this.canvas) { - return this; - } - this.canvas.fire('text:editing:entered', { target: this }); - this.initMouseMoveHandler(); - this.canvas.requestRenderAll(); - return this; - } - - exitEditingOnOthers(canvas: Canvas) { - if (canvas._iTextInstances) { - canvas._iTextInstances.forEach((obj) => { - obj.selected = false; - if (obj.isEditing) { - obj.exitEditing(); - } - }); + if (this.canvas) { + this.canvas.fire('text:editing:entered', { target: this }); + this.canvas.requestRenderAll(); } } /** - * Initializes "mousemove" event handler - */ - initMouseMoveHandler() { - this.canvas.on('mouse:move', this.mouseMoveHandler); - } - - /** - * @private + * called by {@link canvas#textEditingManager} */ - mouseMoveHandler(options) { - if (!this.__isMousedown || !this.isEditing) { - return; - } - + updateSelectionOnMouseMove(e: TPointerEvent) { // regain focus getEnv().document.activeElement !== this.hiddenTextarea && this.hiddenTextarea.focus(); - const newSelectionStart = this.getSelectionStartFromPointer(options.e), + const newSelectionStart = this.getSelectionStartFromPointer(e), currentStart = this.selectionStart, currentEnd = this.selectionEnd; if ( @@ -524,7 +438,6 @@ export abstract class ITextBehaviorMixin< this.selectionStart !== currentStart || this.selectionEnd !== currentEnd ) { - this.restartCursorIfNeeded(); this._fireSelectionChanged(); this._updateTextarea(); this.renderCursorOrSelection(); @@ -1065,7 +978,6 @@ export abstract class ITextBehaviorMixin< this.fire('editing:exited'); isTextChanged && this.fire('modified'); if (this.canvas) { - this.canvas.off('mouse:move', this.mouseMoveHandler); this.canvas.fire('text:editing:exited', { target: this }); isTextChanged && this.canvas.fire('object:modified', { target: this }); } diff --git a/src/mixins/itext_click_behavior.mixin.ts b/src/mixins/itext_click_behavior.mixin.ts index c23ef4cae5c..0dfe22a4323 100644 --- a/src/mixins/itext_click_behavior.mixin.ts +++ b/src/mixins/itext_click_behavior.mixin.ts @@ -111,7 +111,7 @@ export abstract class ITextClickBehaviorMixin< return; } - this.__isMousedown = true; + this.canvas.textEditingManager.register(this); if (this.selected) { this.inCompositionMode = false; @@ -172,7 +172,17 @@ export abstract class ITextClickBehaviorMixin< * @private */ mouseUpHandler(options: TransformEvent) { - this.__isMousedown = false; + if (this.canvas) { + this.canvas.textEditingManager.unregister(this); + + const activeObject = this.canvas._activeObject; + if (activeObject && activeObject !== this) { + // avoid running this logic when there is an active object + // this because is possible with shift click and fast clicks, + // to rapidly deselect and reselect this object and trigger an enterEdit + return; + } + } if ( !this.editable || (this.group && !this.group.interactive) || @@ -182,16 +192,6 @@ export abstract class ITextClickBehaviorMixin< return; } - if (this.canvas) { - const currentActive = this.canvas._activeObject; - if (currentActive && currentActive !== this) { - // avoid running this logic when there is an active object - // this because is possible with shift click and fast clicks, - // to rapidly deselect and reselect this object and trigger an enterEdit - return; - } - } - if (this.__lastSelected && !this.__corner) { this.selected = false; this.__lastSelected = false; diff --git a/src/shapes/itext.class.ts b/src/shapes/itext.class.ts index 09bb0c2082e..261bdb46e3b 100644 --- a/src/shapes/itext.class.ts +++ b/src/shapes/itext.class.ts @@ -9,6 +9,7 @@ import { } from '../mixins/itext_key_const'; import { classRegistry } from '../util/class_registry'; import { TClassProperties, TFiller } from '../typedefs'; +import { Canvas } from '../canvas/canvas_events'; export type ITextEvents = ObjectEvents & { 'selection:changed': never; @@ -166,10 +167,14 @@ export class IText extends ITextClickBehaviorMixin { _set(key: string, value: any) { if (this.isEditing && this._savedProps && key in this._savedProps) { this._savedProps[key] = value; - } else { - super._set(key, value); + return this; + } + if (key === 'canvas') { + this.canvas instanceof Canvas && + this.canvas.textEditingManager.remove(this); + value instanceof Canvas && value.textEditingManager.add(this); } - return this; + return super._set(key, value); } /** @@ -429,7 +434,7 @@ export class IText extends ITextClickBehaviorMixin { ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill'); - ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; + ctx.globalAlpha = this._currentCursorOpacity; ctx.fillRect( boundaries.left + boundaries.leftOffset - cursorWidth / 2, topOffset + boundaries.top + dy, diff --git a/src/shapes/text.class.ts b/src/shapes/text.class.ts index 8533ef6f81d..2bc8e4a3ea2 100644 --- a/src/shapes/text.class.ts +++ b/src/shapes/text.class.ts @@ -95,7 +95,7 @@ export class Text< * @type Array * @private */ - declare _dimensionAffectingProps: (keyof this)[]; + declare _dimensionAffectingProps: string[]; /** * @private diff --git a/test/unit/canvas_events.js b/test/unit/canvas_events.js index c64aaee12a4..47c29275d4d 100644 --- a/test/unit/canvas_events.js +++ b/test/unit/canvas_events.js @@ -1258,4 +1258,80 @@ assert.equal(canvas.upperCanvasEl.style.cursor, expectedLockSkewingX[corner], `${corner} is ${expectedLockSkewingX[corner]} for lockSkewingX`); }); }); + + QUnit.test('text editing manager', async function (assert) { + const canvas = new fabric.Canvas(); + const manager = canvas.textEditingManager; + assert.ok(manager, 'should exist'); + assert.deepEqual(manager.targets, [], 'should be empty'); + + const a = new fabric.IText('test'); + const b = new fabric.IText('test'); + const e = { clientX: 30, clientY: 40, which: 1, target: canvas.upperCanvasEl }; + + canvas.add(a); + assert.deepEqual(manager.targets, [a]); + canvas.remove(a); + assert.deepEqual(manager.targets, []); + canvas.add(a); + assert.deepEqual(manager.targets, [a]); + canvas.add(b); + assert.deepEqual(manager.targets, [a, b]); + a.enterEditing(); + assert.ok(a.isEditing); + b.enterEditing(); + assert.ok(b.isEditing); + assert.ok(!a.isEditing, 'should have called exit editing'); + manager.register(b); + manager.exitTextEditing(); + assert.ok(!manager.target, 'should unregister b'); + assert.ok(!b.isEditing, 'b should exit editing'); + b.enterEditing(); + b.fire('mousedown', { e, pointer: new fabric.Point(30, 40) }); + assert.ok(manager.target === b, 'should register b'); + const called = []; + a.updateSelectionOnMouseMove = () => called.push(a); + b.updateSelectionOnMouseMove = () => called.push(b); + canvas.__onMouseMove(e); + assert.deepEqual(called, [b], 'manager is called from mouse move'); + manager.unregister(a); + assert.ok(manager.target === b, 'should not unregister b'); + a.fire('mouseup', { e, pointer: new fabric.Point(30, 40) }); + assert.ok(manager.target === b, 'should not unregister b'); + canvas.__onMouseUp(e); + assert.ok(!manager.target, 'should unregister b'); + manager.register(a); + assert.ok(manager.target === a, 'should register a'); + canvas.remove(a); + assert.ok(!manager.target, 'should unregister a'); + manager.dispose(); + assert.ok(!manager.target, 'should have disposed ref'); + assert.deepEqual(manager.targets, [], 'should have disposed refs'); + const g = new fabric.Group([a]); + canvas.add(g); + assert.deepEqual(manager.targets, [a], 'should register an existing nested instance'); + g.add(b); + assert.deepEqual(manager.targets, [a, b], 'should register an added nested instance'); + manager.register(b); + assert.ok(manager.target === b, 'should register b'); + g.remove(b); + assert.ok(!manager.target, 'should unregister b'); + assert.deepEqual(manager.targets, [a], 'should unregister a nested instance upon removal'); + manager.register(a); + assert.ok(manager.target === a, 'should register a'); + canvas.remove(g); + assert.ok(!manager.target, 'should unregister a'); + assert.deepEqual(manager.targets, [], 'should unregister nested instances upon group removal'); + canvas.add(b); + assert.deepEqual(manager.targets, [b], 'should register instance'); + canvas.clear(); + assert.deepEqual(manager.targets, [], 'clear should clear instances'); + canvas.add(b); + assert.deepEqual(manager.targets, [b], 'should register instance'); + manager.register(b); + assert.ok(manager.target === b, 'should register b'); + await canvas.dispose(); + assert.deepEqual(manager.targets, [], 'dispose should clear instances'); + assert.ok(!manager.target, 'should unregister b'); + }); })(); diff --git a/test/unit/itext.js b/test/unit/itext.js index 310c863d788..eb0bba67fa6 100644 --- a/test/unit/itext.js +++ b/test/unit/itext.js @@ -77,30 +77,6 @@ assert.deepEqual(iText.styles, { }); }); - QUnit.test('instances', function(assert) { - var iText = new fabric.IText('test'); - - // Not on a sketchpad; storing it in instances array already would leak it forever. - var instances = canvas._iTextInstances && canvas._iTextInstances; - var lastInstance = instances && instances[instances.length - 1]; - assert.equal(lastInstance, undefined); - - canvas.add(iText); - instances = canvas._iTextInstances && canvas._iTextInstances; - lastInstance = instances && instances[instances.length - 1]; - assert.equal(lastInstance, iText); - - canvas.remove(iText); - instances = canvas._iTextInstances && canvas._iTextInstances; - lastInstance = instances && instances[instances.length - 1]; - assert.equal(lastInstance, undefined); - - // Should survive being added again after removal. - canvas.add(iText); - lastInstance = canvas._iTextInstances && canvas._iTextInstances[canvas._iTextInstances.length - 1]; - assert.equal(lastInstance, iText); - }); - QUnit.test('fromObject', function(assert) { var done = assert.async(); assert.ok(typeof fabric.IText.fromObject === 'function'); @@ -636,34 +612,6 @@ assert.equal(iText.getCurrentCharFontSize(), 40); }); - QUnit.test('object removal from canvas', function(assert) { - canvas.clear(); - canvas._iTextInstances = null; - var text1 = new fabric.IText('Text Will be here'); - var text2 = new fabric.IText('Text Will be here'); - assert.ok(!canvas._iTextInstances, 'canvas has no iText instances'); - assert.ok(!canvas._hasITextHandlers, 'canvas has no handlers'); - - canvas.add(text1); - assert.deepEqual(canvas._iTextInstances, [text1], 'canvas has 1 text instance'); - assert.ok(canvas._hasITextHandlers, 'canvas has handlers'); - assert.equal(canvas._iTextInstances.length, 1, 'just one itext object should be on canvas'); - - canvas.add(text2); - assert.deepEqual(canvas._iTextInstances, [text1, text2], 'canvas has 2 text instance'); - assert.ok(canvas._hasITextHandlers, 'canvas has handlers'); - assert.equal(canvas._iTextInstances.length, 2, 'just two itext object should be on canvas'); - - canvas.remove(text1); - assert.deepEqual(canvas._iTextInstances, [text2], 'canvas has 1 text instance'); - assert.ok(canvas._hasITextHandlers, 'canvas has handlers'); - assert.equal(canvas._iTextInstances.length, 1, 'just two itext object should be on canvas'); - - canvas.remove(text2); - assert.deepEqual(canvas._iTextInstances, [], 'canvas has 0 text instance'); - assert.ok(!canvas._hasITextHandlers, 'canvas has no handlers'); - }); - QUnit.test('getCurrentCharColor', function(assert) { var iText = new fabric.IText('test foo bar-baz\nqux', { styles: { From ef40c0b05ecab4521ad7db7aac88c35c1d25edd5 Mon Sep 17 00:00:00 2001 From: Shachar <34343793+ShaMan123@users.noreply.github.com> Date: Thu, 12 Jan 2023 03:22:32 +0200 Subject: [PATCH 8/9] refactor(IText): modernize cursor animation (#8583) --- CHANGELOG.md | 1 + src/mixins/itext_behavior.mixin.ts | 161 +++++---- src/shapes/Object/AnimatableObject.ts | 60 ++-- src/shapes/itext.class.ts | 5 + src/util/animation/AnimationBase.ts | 4 + src/util/animation/animate.ts | 13 + src/util/animation/types.ts | 7 + test/unit/animation.js | 10 +- test/unit/itext.js | 123 +++---- test/unit/itext_click_behaviour.js | 247 ++++++------- test/unit/itext_key_behaviour.js | 478 +++++++++++++------------- 11 files changed, 566 insertions(+), 543 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac6aed2311c..6f889702711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- refactor(Animation): modernize IText cursor animation based on animation API changes (and fix minor regression) plus leftovers from #8547 [#8583](https://github.com/fabricjs/fabric.js/pull/8583) - refactor(Canvas, IText): Handle cross instance text editing states to an EditingManager class [#8543](https://github.com/fabricjs/fabric.js/pull/8543) - chore(TS): move to export, babel, new rollup, change import statement for fabric. [#8585](https://github.com/fabricjs/fabric.js/pull/8585); - chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) diff --git a/src/mixins/itext_behavior.mixin.ts b/src/mixins/itext_behavior.mixin.ts index 642178d151d..d1f9b9666e0 100644 --- a/src/mixins/itext_behavior.mixin.ts +++ b/src/mixins/itext_behavior.mixin.ts @@ -1,9 +1,14 @@ // @ts-nocheck +import type { Canvas } from '../canvas/canvas_events'; import { getEnv } from '../env'; import { ObjectEvents, TEvent, TPointerEvent } from '../EventTypeDefs'; import { Point } from '../point.class'; +import type { FabricObject } from '../shapes/Object/Object'; import { Text } from '../shapes/text.class'; +import { animate } from '../util/animation/animate'; +import { TOnAnimationChangeCallback } from '../util/animation/types'; +import type { ValueAnimation } from '../util/animation/ValueAnimation'; import { setStyle } from '../util/dom_style'; import { createCanvasElement } from '../util/misc/dom'; import { transformPoint } from '../util/misc/matrix'; @@ -35,13 +40,8 @@ export abstract class ITextBehaviorMixin< protected declare inCompositionMode: boolean; protected declare _reSpace: RegExp; - private declare _currentTickState: { isAborted: boolean; abort: () => void }; - private declare _cursorTimeout1: number; - private declare _cursorTimeout2: number; - private declare _currentTickCompleteState: { - isAborted: boolean; - abort: () => void; - }; + private declare _currentTickState?: ValueAnimation; + private declare _currentTickCompleteState?: ValueAnimation; protected declare _currentCursorOpacity: number; private declare _textBeforeEdit: string; protected declare __selectionStartOnMouseDown: number; @@ -90,6 +90,8 @@ export abstract class ITextBehaviorMixin< initBehavior() { this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); + this._tick = this._tick.bind(this); + this._onTickComplete = this._onTickComplete.bind(this); this.updateSelectionOnMouseMove = this.updateSelectionOnMouseMove.bind(this); this.dragEnterHandler = this.dragEnterHandler.bind(this); @@ -104,98 +106,86 @@ export abstract class ITextBehaviorMixin< this.on('drop', this.dropHandler); } - onDeselect() { + onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }) { this.isEditing && this.exitEditing(); this.selected = false; + return super.onDeselect(options); } /** * @private */ - _tick() { - this._currentTickState = this._animateCursor( - this, - 1, - this.cursorDuration, - '_onTickComplete' - ); - } - - /** - * @private - */ - _animateCursor(obj, targetOpacity, duration, completeMethod) { - const tickState = { - isAborted: false, - abort: function () { - this.isAborted = true; - }, - }; - - obj._animate('_currentCursorOpacity', targetOpacity, { - duration: duration, - onComplete: function () { - if (!tickState.isAborted) { - obj[completeMethod](); - } - }, - onChange: function () { - // we do not want to animate a selection, only cursor - if (obj.canvas && obj.selectionStart === obj.selectionEnd) { - obj.renderCursorOrSelection(); - } + _animateCursor({ + toValue, + duration, + delay, + onComplete, + }: { + toValue: number; + duration: number; + delay?: number; + onComplete?: TOnAnimationChangeCallback; + }) { + return animate({ + startValue: this._currentCursorOpacity, + endValue: toValue, + duration, + delay, + onComplete, + abort: () => { + return ( + !this.canvas || + // we do not want to animate a selection, only cursor + this.selectionStart !== this.selectionEnd + ); }, - abort: function () { - return tickState.isAborted; + onChange: (value) => { + this._currentCursorOpacity = value; + this.renderCursorOrSelection(); }, }); - return tickState; } - /** - * @private - */ - _onTickComplete() { - if (this._cursorTimeout1) { - clearTimeout(this._cursorTimeout1); - } - this._cursorTimeout1 = setTimeout(() => { - this._currentTickCompleteState = this._animateCursor( - this, - 0, - this.cursorDuration / 2, - '_tick' - ); - }, 100); + private _tick(delay?: number) { + this._currentTickState = this._animateCursor({ + toValue: 1, + duration: this.cursorDuration, + delay, + onComplete: this._onTickComplete, + }); + } + + private _onTickComplete() { + this._currentTickCompleteState?.abort(); + this._currentTickCompleteState = this._animateCursor({ + toValue: 0, + duration: this.cursorDuration / 2, + delay: 100, + onComplete: this._tick, + }); } /** * Initializes delayed cursor */ initDelayedCursor(restart?: boolean) { - const delay = restart ? 0 : this.cursorDelay; - this.abortCursorAnimation(); - if (delay) { - this._cursorTimeout2 = setTimeout(() => { - this._tick(); - }, delay); - } else { - this._tick(); - } + this._tick(restart ? 0 : this.cursorDelay); } /** * Aborts cursor animation, clears all timeouts and clear textarea context if necessary */ abortCursorAnimation() { - const shouldClear = - this._currentTickState || this._currentTickCompleteState; - this._currentTickState && this._currentTickState.abort(); - this._currentTickCompleteState && this._currentTickCompleteState.abort(); - - clearTimeout(this._cursorTimeout1); - clearTimeout(this._cursorTimeout2); + let shouldClear = false; + [this._currentTickState, this._currentTickCompleteState].forEach( + (cursorAnimation) => { + if (cursorAnimation && !cursorAnimation.isDone()) { + shouldClear = true; + cursorAnimation.abort(); + } + } + ); this._currentCursorOpacity = 1; @@ -207,10 +197,9 @@ export abstract class ITextBehaviorMixin< restartCursorIfNeeded() { if ( - !this._currentTickState || - this._currentTickState.isAborted || - !this._currentTickCompleteState || - this._currentTickCompleteState.isAborted + [this._currentTickState, this._currentTickCompleteState].some( + (cursorAnimation) => !cursorAnimation || cursorAnimation.isDone() + ) ) { this.initDelayedCursor(); } @@ -953,16 +942,13 @@ export abstract class ITextBehaviorMixin< } /** - * Exits from editing state + * runs the actual logic that exits from editing state, see {@link exitEditing} */ - exitEditing() { - const isTextChanged = this._textBeforeEdit !== this.text; + protected _exitEditing() { const hiddenTextarea = this.hiddenTextarea; this.selected = false; this.isEditing = false; - this.selectionEnd = this.selectionStart; - if (hiddenTextarea) { hiddenTextarea.blur && hiddenTextarea.blur(); hiddenTextarea.parentNode && @@ -970,6 +956,15 @@ export abstract class ITextBehaviorMixin< } this.hiddenTextarea = null; this.abortCursorAnimation(); + } + + /** + * Exits from editing state and fires relevant events + */ + exitEditing() { + const isTextChanged = this._textBeforeEdit !== this.text; + this.selectionEnd = this.selectionStart; + this._exitEditing(); this._restoreEditingProps(); if (this._shouldClearDimensionCache()) { this.initDimensions(); diff --git a/src/shapes/Object/AnimatableObject.ts b/src/shapes/Object/AnimatableObject.ts index 9d8d5f44eae..f2c30127829 100644 --- a/src/shapes/Object/AnimatableObject.ts +++ b/src/shapes/Object/AnimatableObject.ts @@ -1,19 +1,18 @@ import { TColorArg } from '../../color/color.class'; import { ObjectEvents } from '../../EventTypeDefs'; -import { animate, animateColor } from '../../util/animation/animate'; +import { + animate, + animateColor, + TAnimation, +} from '../../util/animation/animate'; import type { - ValueAnimationOptions, + AnimationOptions, + ArrayAnimationOptions, ColorAnimationOptions, + ValueAnimationOptions, } from '../../util/animation/types'; -import { ArrayAnimation } from '../../util/animation/ArrayAnimation'; -import type { ColorAnimation } from '../../util/animation/ColorAnimation'; -import type { ValueAnimation } from '../../util/animation/ValueAnimation'; import { StackedObject } from './StackedObject'; -type TAnimationOptions = T extends number - ? ValueAnimationOptions - : ColorAnimationOptions; - export abstract class AnimatableObject< EventSpec extends ObjectEvents = ObjectEvents > extends StackedObject { @@ -25,23 +24,24 @@ export abstract class AnimatableObject< /** * Animates object's properties - * @param {String|Object} property Property to animate (if string) or properties to animate (if object) - * @param {Number|Object} value Value to animate property to (if string was given first) or options object + * @param {Record} animatable map of keys and end values + * @param {Partial>} options * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation} - * @return {(ColorAnimation | ValueAnimation)[]} animation context (or an array if passed multiple properties) + * @return {Record>} map of animation contexts * * As object — multiple properties * * object.animate({ left: ..., top: ... }); * object.animate({ left: ..., top: ... }, { duration: ... }); */ - animate( + animate( animatable: Record, - options?: Partial> - ): (ColorAnimation | ValueAnimation | ArrayAnimation)[] { - return Object.entries(animatable).map(([key, endValue]) => - this._animate(key, endValue, options) - ); + options?: Partial> + ): Record> { + return Object.entries(animatable).reduce((acc, [key, endValue]) => { + acc[key] = this._animate(key, endValue, options); + return acc; + }, {} as Record>); } /** @@ -50,11 +50,11 @@ export abstract class AnimatableObject< * @param {String} to Value to animate to * @param {Object} [options] Options object */ - _animate( + _animate( key: string, endValue: T, - options: Partial> = {} - ) { + options: Partial> = {} + ): TAnimation { const path = key.split('.'); const propIsColor = this.colorProperties.includes(path[path.length - 1]); const { easing, duration, abort, startValue, onChange, onComplete } = @@ -69,7 +69,7 @@ export abstract class AnimatableObject< duration, abort: abort?.bind(this), onChange: ( - value: string | number, + value: number | number[] | string, valueProgress: number, durationProgress: number ) => { @@ -84,7 +84,7 @@ export abstract class AnimatableObject< onChange(value, valueProgress, durationProgress); }, onComplete: ( - value: string | number, + value: number | number[] | string, valueProgress: number, durationProgress: number ) => { @@ -93,12 +93,14 @@ export abstract class AnimatableObject< // @ts-expect-error generic callback arg0 is wrong onComplete(value, valueProgress, durationProgress); }, - } as TAnimationOptions; + } as AnimationOptions; - if (propIsColor) { - return animateColor(animationOptions as ColorAnimationOptions); - } else { - return animate(animationOptions as ValueAnimationOptions); - } + return ( + propIsColor + ? animateColor(animationOptions as ColorAnimationOptions) + : animate( + animationOptions as ValueAnimationOptions | ArrayAnimationOptions + ) + ) as TAnimation; } } diff --git a/src/shapes/itext.class.ts b/src/shapes/itext.class.ts index 261bdb46e3b..07767a0dd78 100644 --- a/src/shapes/itext.class.ts +++ b/src/shapes/itext.class.ts @@ -608,6 +608,11 @@ export class IText extends ITextClickBehaviorMixin { cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0; return { l: cursorPosition.lineIndex, c: charIndex }; } + + dispose() { + this._exitEditing(); + super.dispose(); + } } export const iTextDefaultValues: Partial> = { diff --git a/src/util/animation/AnimationBase.ts b/src/util/animation/AnimationBase.ts index c83ea2615ef..64920c44a11 100644 --- a/src/util/animation/AnimationBase.ts +++ b/src/util/animation/AnimationBase.ts @@ -86,6 +86,10 @@ export abstract class AnimationBase< return this._state; } + isDone() { + return this._state === 'aborted' || this._state === 'completed'; + } + /** * Calculate the current value based on the easing parameters * @param timeElapsed in ms diff --git a/src/util/animation/animate.ts b/src/util/animation/animate.ts index 27be4466537..eb552826b2e 100644 --- a/src/util/animation/animate.ts +++ b/src/util/animation/animate.ts @@ -6,6 +6,14 @@ import { ArrayAnimationOptions, ColorAnimationOptions, } from './types'; +import { TColorArg } from '../../color/color.class'; + +export type TAnimation = + T extends TColorArg + ? ColorAnimation + : T extends number[] + ? ArrayAnimation + : ValueAnimation; const isArrayAnimation = ( options: ArrayAnimationOptions | ValueAnimationOptions @@ -41,6 +49,11 @@ const isArrayAnimation = ( */ export function animate(options: ArrayAnimationOptions): ArrayAnimation; export function animate(options: ValueAnimationOptions): ValueAnimation; +export function animate< + T extends ValueAnimationOptions | ArrayAnimationOptions +>( + options: T +): T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation; export function animate< T extends ValueAnimationOptions | ArrayAnimationOptions, R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation diff --git a/src/util/animation/types.ts b/src/util/animation/types.ts index b3e88245d59..0d4cec868db 100644 --- a/src/util/animation/types.ts +++ b/src/util/animation/types.ts @@ -127,3 +127,10 @@ export type ColorAnimationOptions = TAnimationOptions< string, number[] >; + +export type AnimationOptions = + T extends TColorArg + ? ColorAnimationOptions + : T extends number[] + ? ArrayAnimationOptions + : ValueAnimationOptions; diff --git a/test/unit/animation.js b/test/unit/animation.js index e2f1a534f5f..968f3dc4b8c 100644 --- a/test/unit/animation.js +++ b/test/unit/animation.js @@ -269,8 +269,9 @@ assert.ok(typeof object.animate === 'function'); - object.animate({ left: 40 }); - assert.ok(true, 'animate without options does not crash'); + const context = object.animate({ left: 40 }); + assert.deepEqual(Object.keys(context), ['left'], 'should return a map of animation classes'); + assert.equal(context.left.constructor.name, 'ValueAnimation', 'should be instance of ValueAnimation'); assert.equal(fabric.runningAnimations.length, 1, 'should have 1 registered animation'); assert.equal(fabric.runningAnimations[0].target, object, 'animation.target should be set'); @@ -347,7 +348,10 @@ QUnit.test('animate multiple properties', function(assert) { var done = assert.async(); var object = new fabric.Object({ left: 123, top: 124 }); - object.animate({ left: 223, top: 224 }); + const context = object.animate({ left: 223, top: 224 }); + assert.deepEqual(Object.keys(context), ['left', 'top'], 'should return a map of animation classes'); + assert.equal(context.left.constructor.name, 'ValueAnimation', 'should be instance of ValueAnimation'); + assert.equal(context.top.constructor.name, 'ValueAnimation', 'should be instance of ValueAnimation'); setTimeout(function() { assert.equal(223, Math.round(object.get('left'))); assert.equal(224, Math.round(object.get('top'))); diff --git a/test/unit/itext.js b/test/unit/itext.js index eb0bba67fa6..de5cf353788 100644 --- a/test/unit/itext.js +++ b/test/unit/itext.js @@ -722,88 +722,61 @@ assert.equal(iText.styles[4], undefined, 'style line 4 has been removed'); }); - - QUnit.module('fabric.IText with canvas.enableRetinaScaling = false', function() { - QUnit.test('hiddenTextarea does not move DOM', function(assert) { - var iText = new fabric.IText('a', { fill: '#ffffff', fontSize: 50 }); - var canvas2 = new fabric.Canvas(null, { width: 800, height: 800, renderOnAddRemove: false, enableRetinaScaling: false }); - canvas2.setDimensions({ width: 100, height: 100 }, { cssOnly: true }); - canvas2.cancelRequestedRender(); - iText.set({ - top: 400, - left: 400, - }); - canvas2.add(iText); - Object.defineProperty(canvas2.upperCanvasEl, 'clientWidth', { - get: function() { return this._clientWidth; }, - set: function(value) { return this._clientWidth = value; }, - }); - Object.defineProperty(canvas2.upperCanvasEl, 'clientHeight', { - get: function() { return this._clientHeight; }, - set: function(value) { return this._clientHeight = value; }, - }); - canvas2.upperCanvasEl._clientWidth = 100; - canvas2.upperCanvasEl._clientHeight = 100; - iText.enterEditing(); - canvas2.cancelRequestedRender(); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 57, 'top is scaled with CSS'); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 50, 'left is scaled with CSS'); - iText.exitEditing(); - canvas2.cancelRequestedRender(); - canvas2.upperCanvasEl._clientWidth = 200; - canvas2.upperCanvasEl._clientHeight = 200; - iText.enterEditing(); - canvas2.cancelRequestedRender(); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 114, 'top is scaled with CSS'); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 100, 'left is scaled with CSS'); - iText.exitEditing(); - canvas2.cancelRequestedRender(); - }); + QUnit.test('dispose', function (assert) { + const iText = new fabric.IText('a'); + const cursorState = () => [iText._currentTickState, iText._currentTickCompleteState].some( + (cursorAnimation) => cursorAnimation && !cursorAnimation.isDone() + ); + iText.enterEditing(); + assert.equal(cursorState(), true, 'should have been started'); + iText.dispose(); + assert.equal(iText.isEditing, false, 'should have been aborted'); + assert.equal(cursorState(), false, 'should have been aborted'); }); - QUnit.module('fabric.IText with canvas.enableRetinaScaling = true', function (hooks) { - let DPR; + QUnit.module('fabric.IText and retina scaling', function (hooks) { hooks.before(function () { - DPR = fabric.config.devicePixelRatio; fabric.config.configure({ devicePixelRatio: 2 }); }); hooks.after(function () { - fabric.config.configure({ devicePixelRatio: DPR }); + fabric.config.restoreDefaults(); }); - QUnit.test('hiddenTextarea does not move DOM', function(assert) { - var iText = new fabric.IText('a', { fill: '#ffffff', fontSize: 50 }); - var canvas2 = new fabric.Canvas(null, { width: 800, height: 800, renderOnAddRemove: false, enableRetinaScaling: true }); - canvas2.setDimensions({ width: 100, height: 100 }, { cssOnly: true }); - canvas2.cancelRequestedRender(); - iText.set({ - top: 400, - left: 400, - }); - canvas2.add(iText); - Object.defineProperty(canvas2.upperCanvasEl, 'clientWidth', { - get: function() { return this._clientWidth; }, - set: function(value) { return this._clientWidth = value; }, - }); - Object.defineProperty(canvas2.upperCanvasEl, 'clientHeight', { - get: function() { return this._clientHeight; }, - set: function(value) { return this._clientHeight = value; }, - }); - canvas2.upperCanvasEl._clientWidth = 100; - canvas2.upperCanvasEl._clientHeight = 100; - iText.enterEditing(); - canvas2.cancelRequestedRender(); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 57, 'top is scaled with CSS'); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 50, 'left is scaled with CSS'); - iText.exitEditing(); - canvas2.cancelRequestedRender(); - canvas2.upperCanvasEl._clientWidth = 200; - canvas2.upperCanvasEl._clientHeight = 200; - iText.enterEditing(); - canvas2.cancelRequestedRender(); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 114, 'top is scaled with CSS'); - assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 100, 'left is scaled with CSS'); - iText.exitEditing(); - canvas2.cancelRequestedRender(); + [true, false].forEach(enableRetinaScaling => { + QUnit.test(`hiddenTextarea does not move DOM, enableRetinaScaling ${enableRetinaScaling}`, function (assert) { + var iText = new fabric.IText('a', { fill: '#ffffff', fontSize: 50 }); + var canvas2 = new fabric.Canvas(null, { width: 800, height: 800, renderOnAddRemove: false, enableRetinaScaling }); + canvas2.setDimensions({ width: 100, height: 100 }, { cssOnly: true }); + canvas2.cancelRequestedRender(); + iText.set({ + top: 400, + left: 400, + }); + canvas2.add(iText); + Object.defineProperty(canvas2.upperCanvasEl, 'clientWidth', { + get: function () { return this._clientWidth; }, + set: function (value) { return this._clientWidth = value; }, + }); + Object.defineProperty(canvas2.upperCanvasEl, 'clientHeight', { + get: function () { return this._clientHeight; }, + set: function (value) { return this._clientHeight = value; }, + }); + canvas2.upperCanvasEl._clientWidth = 100; + canvas2.upperCanvasEl._clientHeight = 100; + iText.enterEditing(); + canvas2.cancelRequestedRender(); + assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 57, 'top is scaled with CSS'); + assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 50, 'left is scaled with CSS'); + iText.exitEditing(); + canvas2.cancelRequestedRender(); + canvas2.upperCanvasEl._clientWidth = 200; + canvas2.upperCanvasEl._clientHeight = 200; + iText.enterEditing(); + canvas2.cancelRequestedRender(); + assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.top)), 114, 'top is scaled with CSS'); + assert.equal(Math.round(parseInt(iText.hiddenTextarea.style.left)), 100, 'left is scaled with CSS'); + iText.exitEditing(); + canvas2.cancelRequestedRender(); + }); }); }); }); diff --git a/test/unit/itext_click_behaviour.js b/test/unit/itext_click_behaviour.js index c3fdc8405fe..d3e244b5a76 100644 --- a/test/unit/itext_click_behaviour.js +++ b/test/unit/itext_click_behaviour.js @@ -1,16 +1,29 @@ (function(){ var canvas; - QUnit.module('iText click interaction', function(hooks) { - hooks.beforeEach(function() { + QUnit.module('iText click interaction', function (hooks) { + hooks.beforeEach(function () { canvas = new fabric.Canvas(null, { enableRetinaScaling: false }); }); - hooks.afterEach(function() { + hooks.afterEach(function () { canvas.clear(); canvas.cancelRequestedRender(); }); - QUnit.test('doubleClickHandler', function(assert) { + + function assertCursorAnimation(assert, text, active = false) { + const cursorState = [text._currentTickState, text._currentTickCompleteState].some( + (cursorAnimation) => cursorAnimation && !cursorAnimation.isDone() + ); + assert.equal(cursorState, active, `cursor animation state should be ${active}`); + } + + function wait(ms = 16) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + QUnit.test('doubleClickHandler', async function (assert) { + var done = assert.async(); var iText = new fabric.IText('test need some word\nsecond line'); iText.canvas = canvas; var eventData = { @@ -20,12 +33,16 @@ clientY: 10 }; iText.enterEditing(); + assertCursorAnimation(assert, iText, true); iText.doubleClickHandler({ e: eventData }); assert.equal(iText.selectionStart, 0, 'dblClick selection start is'); assert.equal(iText.selectionEnd, 4, 'dblClick selection end is'); - var eventData = { + // wait for cursor animation tick to run + await wait(); + assertCursorAnimation(assert, iText); + eventData = { which: 1, target: canvas.upperCanvasEl, clientX: 40, @@ -36,9 +53,11 @@ }); assert.equal(iText.selectionStart, 20, 'second dblClick selection start is'); assert.equal(iText.selectionEnd, 26, 'second dblClick selection end is'); + assertCursorAnimation(assert, iText); iText.exitEditing(); + done(); }); - QUnit.test('doubleClickHandler no editing', function(assert) { + QUnit.test('doubleClickHandler no editing', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); iText.canvas = canvas; var eventData = { @@ -52,8 +71,10 @@ }); assert.equal(iText.selectionStart, 0, 'dblClick selection start is'); assert.equal(iText.selectionEnd, 0, 'dblClick selection end is'); + assertCursorAnimation(assert, iText); }); - QUnit.test('tripleClickHandler', function(assert) { + QUnit.test('tripleClickHandler', async function (assert) { + var done = assert.async(); var iText = new fabric.IText('test need some word\nsecond line'); iText.canvas = canvas; var eventData = { @@ -63,12 +84,16 @@ clientY: 10 }; iText.enterEditing(); + assertCursorAnimation(assert, iText, true); iText.tripleClickHandler({ e: eventData }); assert.equal(iText.selectionStart, 0, 'tripleClick selection start is'); assert.equal(iText.selectionEnd, 19, 'tripleClick selection end is'); - var eventData = { + // wait for cursor animation tick to run + await wait(); + assertCursorAnimation(assert, iText); + eventData = { which: 1, target: canvas.upperCanvasEl, clientX: 40, @@ -79,9 +104,11 @@ }); assert.equal(iText.selectionStart, 20, 'second tripleClick selection start is'); assert.equal(iText.selectionEnd, 31, 'second tripleClick selection end is'); + assertCursorAnimation(assert, iText); iText.exitEditing(); + done(); }); - QUnit.test('tripleClickHandler', function(assert) { + QUnit.test('tripleClickHandler', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); iText.canvas = canvas; var eventData = { @@ -96,28 +123,28 @@ assert.equal(iText.selectionStart, 0, 'tripleClick selection start is'); assert.equal(iText.selectionEnd, 0, 'tripleClick selection end is'); }); - QUnit.test('_getNewSelectionStartFromOffset end of line', function(assert) { + QUnit.test('_getNewSelectionStartFromOffset end of line', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); var index = 10; var jlen = 20; var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 1000 }, 500, 520, index, jlen); assert.equal(selection, index, 'index value did not change'); }); - QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) { + QUnit.test('_getNewSelectionStartFromOffset middle of line', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); var index = 10; var jlen = 20; var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 519 }, 500, 520, index, jlen); assert.equal(selection, index + 1, 'index value was moved to next char, since is very near'); }); - QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) { + QUnit.test('_getNewSelectionStartFromOffset middle of line', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); var index = 10; var jlen = 20; var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 502 }, 500, 520, index, jlen); assert.equal(selection, index, 'index value was NOT moved to next char, since is very near to first one'); }); - QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) { + QUnit.test('_getNewSelectionStartFromOffset middle of line', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); var index = 10; var jlen = 10; @@ -141,7 +168,7 @@ assert.equal(iText.getSelectionStartFromPointer(eventData), 5, 'index'); assert.equal(iText.getSelectionStartFromPointer({ ...eventData, clientY: 20 }), 5, 'index'); }); - QUnit.test('_mouseDownHandlerBefore set up selected property', function(assert) { + QUnit.test('_mouseDownHandlerBefore set up selected property', function (assert) { var iText = new fabric.IText('test need some word\nsecond line'); assert.equal(iText.selected, undefined, 'iText has no selected property'); canvas.setActiveObject(iText); @@ -150,10 +177,22 @@ assert.equal(iText.selected, true, 'iText has selected property'); assert.equal(iText.__lastSelected, undefined, 'iText has no __lastSelected property'); }); - QUnit.test('_mouseUpHandler set selected as true', function(assert) { + QUnit.test('mouse down aborts cursor animation', function (assert) { + var iText = new fabric.IText('test need some word\nsecond line', { canvas }); + assert.ok(typeof iText._animateCursor === 'function', 'method is defined'); + let animate = 0, aborted = 0; + iText._animateCursor = () => animate++; + iText.abortCursorAnimation = () => aborted++; + canvas.setActiveObject(iText); + iText.enterEditing(); + iText._mouseDownHandler({ e: {} }); + assert.equal(animate, 1, 'called from enterEditing'); + assert.equal(aborted, 1, 'called from render'); + }); + QUnit.test('_mouseUpHandler set selected as true', function (assert) { var iText = new fabric.IText('test'); - iText.initDelayedCursor = function() {}; - iText.renderCursorOrSelection = function() {}; + iText.initDelayedCursor = function () { }; + iText.renderCursorOrSelection = function () { }; assert.equal(iText.selected, undefined, 'iText has no selected property'); assert.equal(iText.__lastSelected, undefined, 'iText has no __lastSelected property'); canvas.setActiveObject(iText); @@ -161,10 +200,10 @@ iText.mouseUpHandler({ e: {} }); assert.equal(iText.selected, true, 'iText has selected property'); }); - QUnit.test('_mouseUpHandler on a selected object enter edit', function(assert) { + QUnit.test('_mouseUpHandler on a selected object enter edit', function (assert) { var iText = new fabric.IText('test'); - iText.initDelayedCursor = function() {}; - iText.renderCursorOrSelection = function() {}; + iText.initDelayedCursor = function () { }; + iText.renderCursorOrSelection = function () { }; assert.equal(iText.isEditing, false, 'iText not editing'); iText.canvas = canvas; canvas._activeObject = null; @@ -172,12 +211,13 @@ iText.__lastSelected = true; iText.mouseUpHandler({ e: {} }); assert.equal(iText.isEditing, true, 'iText entered editing'); + assertCursorAnimation(assert, iText, true); iText.exitEditing(); }); - QUnit.test('_mouseUpHandler on a selected object does enter edit if there is an activeObject', function(assert) { + QUnit.test('_mouseUpHandler on a selected object does enter edit if there is an activeObject', function (assert) { var iText = new fabric.IText('test'); - iText.initDelayedCursor = function() {}; - iText.renderCursorOrSelection = function() {}; + iText.initDelayedCursor = function () { }; + iText.renderCursorOrSelection = function () { }; assert.equal(iText.isEditing, false, 'iText not editing'); iText.canvas = canvas; canvas._activeObject = new fabric.IText('test2'); @@ -185,12 +225,13 @@ iText.__lastSelected = true; iText.mouseUpHandler({ e: {} }); assert.equal(iText.isEditing, false, 'iText should not enter editing'); + assertCursorAnimation(assert, iText); iText.exitEditing(); }); - QUnit.test('_mouseUpHandler on a selected text in a group does NOT enter editing', function(assert) { + QUnit.test('_mouseUpHandler on a selected text in a group does NOT enter editing', function (assert) { var iText = new fabric.IText('test'); - iText.initDelayedCursor = function() {}; - iText.renderCursorOrSelection = function() {}; + iText.initDelayedCursor = function () { }; + iText.renderCursorOrSelection = function () { }; assert.equal(iText.isEditing, false, 'iText not editing'); var group = new fabric.Group([iText], { subTargetCheck: false }); canvas.add(group); @@ -212,6 +253,7 @@ iText.__lastSelected = true; canvas.__onMouseUp({ clientX: 1, clientY: 1 }); assert.equal(iText.isEditing, true, 'iText should enter editing'); + assertCursorAnimation(assert, iText, true); iText.exitEditing(); group.interactive = false; iText.selected = true; @@ -219,10 +261,10 @@ canvas.__onMouseUp({ clientX: 1, clientY: 1 }); assert.equal(iText.isEditing, false, 'iText should not enter editing'); }); - QUnit.test('_mouseUpHandler on a corner of selected text DOES NOT enter edit', function(assert) { + QUnit.test('_mouseUpHandler on a corner of selected text DOES NOT enter edit', function (assert) { var iText = new fabric.IText('test'); - iText.initDelayedCursor = function() {}; - iText.renderCursorOrSelection = function() {}; + iText.initDelayedCursor = function () { }; + iText.renderCursorOrSelection = function () { }; assert.equal(iText.isEditing, false, 'iText not editing'); iText.canvas = canvas; iText.selected = true; @@ -234,108 +276,71 @@ canvas.renderAll(); }); - QUnit.module('iText click interaction with canvas.enableRetinaScaling = false', function(hooks) { - hooks.beforeEach(function() { - canvas.enableRetinaScaling = false; + QUnit.module('iText click interaction', function (hooks) { + let enableRetinaScaling = false, canvas, eventData; + hooks.before(function () { + fabric.config.configure({ devicePixelRatio: 2 }); }); - QUnit.test('click on editing itext make selection:changed fire', function(assert) { - var done = assert.async(); - var eventData = { - which: 1, - target: canvas.upperCanvasEl, - clientX: 30, - clientY: 10 - }; - var count = 0; - var countCanvas = 0; - var iText = new fabric.IText('test test'); - canvas.on('text:selection:changed', function() { - countCanvas++; - }); - iText.on('selection:changed', function() { - count++; - }); - canvas.add(iText); - assert.equal(canvas.getActiveObject(), null, 'no active object exist'); - assert.equal(count, 0, 'no selection:changed fired yet'); - assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); - canvas._onMouseDown(eventData); - canvas._onMouseUp(eventData); - assert.equal(canvas.getActiveObject(), iText, 'Itext got selected'); - assert.equal(iText.isEditing, false, 'Itext is not editing yet'); - assert.equal(count, 0, 'no selection:changed fired yet'); - assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); - assert.equal(iText.selectionStart, 0, 'Itext did not set the selectionStart'); - assert.equal(iText.selectionEnd, 0, 'Itext did not set the selectionend'); - // make a little delay or it will act as double click and select everything - setTimeout(function() { - canvas._onMouseDown(eventData); - canvas._onMouseUp(eventData); - assert.equal(iText.isEditing, true, 'Itext entered editing'); - assert.equal(iText.selectionStart, 2, 'Itext set the selectionStart'); - assert.equal(iText.selectionEnd, 2, 'Itext set the selectionend'); - assert.equal(count, 1, 'no selection:changed fired yet'); - assert.equal(countCanvas, 1, 'no text:selection:changed fired yet'); - done(); - }, 500); + hooks.after(function () { + fabric.config.restoreDefaults(); }); - }); - - QUnit.module('iText click interaction with canvas.enableRetinaScaling = true', function (hooks) { - let DPR; hooks.beforeEach(function () { - DPR = fabric.config.devicePixelRatio; - fabric.config.configure({ devicePixelRatio: 2 }); canvas = new fabric.Canvas(null, { - enableRetinaScaling: true, + enableRetinaScaling, }); - }); - hooks.afterEach(function () { - fabric.config.configure({ devicePixelRatio: DPR }); - canvas = new fabric.Canvas(null, { - enableRetinaScaling: true, - }); - }); - QUnit.test('click on editing itext make selection:changed fire', function(assert) { - var done = assert.async(); - var eventData = { + eventData = { which: 1, target: canvas.upperCanvasEl, - clientX: 60, - clientY: 30 + ...(enableRetinaScaling ? { + clientX: 60, + clientY: 30 + } : { + clientX: 30, + clientY: 10 + }) }; - var count = 0; - var countCanvas = 0; - var iText = new fabric.IText('test test'); - canvas.on('text:selection:changed', function() { - countCanvas++; - }); - iText.on('selection:changed', function() { - count++; - }); - canvas.add(iText); - assert.equal(canvas.getActiveObject(), null, 'no active object exist'); - assert.equal(count, 0, 'no selection:changed fired yet'); - assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); - canvas._onMouseDown(eventData); - canvas._onMouseUp(eventData); - assert.equal(canvas.getActiveObject(), iText, 'Itext got selected'); - assert.equal(iText.isEditing, false, 'Itext is not editing yet'); - assert.equal(count, 0, 'no selection:changed fired yet'); - assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); - assert.equal(iText.selectionStart, 0, 'Itext did not set the selectionStart'); - assert.equal(iText.selectionEnd, 0, 'Itext did not set the selectionend'); - // make a little delay or it will act as double click and select everything - setTimeout(function() { + }); + hooks.afterEach(() => canvas.dispose()); + + [true, false].forEach(shouldScale => { + enableRetinaScaling = shouldScale; + QUnit.test(`click on editing itext make selection:changed fire (enableRetinaScaling = ${enableRetinaScaling})`, function (assert) { + var done = assert.async(); + var count = 0; + var countCanvas = 0; + var iText = new fabric.IText('test test'); + canvas.on('text:selection:changed', function () { + countCanvas++; + }); + iText.on('selection:changed', function () { + count++; + }); + assert.equal(canvas._isRetinaScaling(), enableRetinaScaling, 'test state is correct'); + canvas.add(iText); + assert.equal(canvas.getActiveObject(), null, 'no active object exist'); + assert.equal(count, 0, 'no selection:changed fired yet'); + assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); canvas._onMouseDown(eventData); canvas._onMouseUp(eventData); - assert.equal(iText.isEditing, true, 'Itext entered editing'); - assert.equal(iText.selectionStart, 2, 'Itext set the selectionStart'); - assert.equal(iText.selectionEnd, 2, 'Itext set the selectionend'); - assert.equal(count, 1, 'no selection:changed fired yet'); - assert.equal(countCanvas, 1, 'no text:selection:changed fired yet'); - done(); - }, 500); + assert.equal(canvas.getActiveObject(), iText, 'Itext got selected'); + assert.equal(iText.isEditing, false, 'Itext is not editing yet'); + assert.equal(count, 0, 'no selection:changed fired yet'); + assert.equal(countCanvas, 0, 'no text:selection:changed fired yet'); + assert.equal(iText.selectionStart, 0, 'Itext did not set the selectionStart'); + assert.equal(iText.selectionEnd, 0, 'Itext did not set the selectionend'); + // make a little delay or it will act as double click and select everything + setTimeout(function () { + canvas._onMouseDown(eventData); + canvas._onMouseUp(eventData); + assert.equal(iText.isEditing, true, 'Itext entered editing'); + assert.equal(iText.selectionStart, 2, 'Itext set the selectionStart'); + assert.equal(iText.selectionEnd, 2, 'Itext set the selectionend'); + assertCursorAnimation(assert, iText, true); + assert.equal(count, 1, 'no selection:changed fired yet'); + assert.equal(countCanvas, 1, 'no text:selection:changed fired yet'); + done(); + }, 500); + }); }); }); }); diff --git a/test/unit/itext_key_behaviour.js b/test/unit/itext_key_behaviour.js index e4117535f5e..905389660a7 100644 --- a/test/unit/itext_key_behaviour.js +++ b/test/unit/itext_key_behaviour.js @@ -1,132 +1,251 @@ (function(){ var canvas = fabric.getDocument().createElement('canvas'), - ctx = canvas.getContext('2d'); - - QUnit.test('event selection:changed firing', function(assert) { - var iText = new fabric.IText('test neei some word\nsecond line'), - selection = 0; - iText.ctx = ctx; - function countSelectionChange() { - selection++; - } - - iText.on('selection:changed', countSelectionChange); - - iText.enterEditing(); - assert.equal(selection, 1, 'will fire on enter edit since the cursor is changing for the first time'); - selection = 0; - - iText.selectAll(); - assert.equal(selection, 1, 'should fire once on selectAll'); - assert.equal(iText.selectionStart, 0, 'should start from 0'); - assert.equal(iText.selectionEnd, 31, 'should end at end of text'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.selectWord(); - assert.equal(selection, 1, 'should fire once on selectWord'); - assert.equal(iText.selectionStart, 0, 'should start at word start'); - assert.equal(iText.selectionEnd, 4, 'should end at word end'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.selectLine(); - assert.equal(selection, 1, 'should fire once on selectLine'); - assert.equal(iText.selectionStart, 0, 'should start at line start'); - assert.equal(iText.selectionEnd, 19, 'should end at line end'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorLeft({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorLeft'); - assert.equal(iText.selectionStart, 1, 'should be 1 less than 2'); - assert.equal(iText.selectionEnd, 1, 'should be 1 less than 2'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorRight({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorRight'); - assert.equal(iText.selectionStart, 3, 'should be 1 more than 2'); - assert.equal(iText.selectionEnd, 3, 'should be 1 more than 2'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorDown({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorDown'); - assert.equal(iText.selectionStart, 22, 'should be on second line'); - assert.equal(iText.selectionEnd, 22, 'should be on second line'); - iText.moveCursorDown({ shiftKey: false}); - assert.equal(selection, 2, 'should fire once on moveCursorDown'); - assert.equal(iText.selectionStart, 31, 'should be at end of text'); - assert.equal(iText.selectionEnd, 31, 'should be at end of text'); - selection = 0; - - iText.selectionStart = 22; - iText.selectionEnd = 22; - iText.moveCursorUp({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorUp'); - assert.equal(iText.selectionStart, 2, 'should be back to first line'); - assert.equal(iText.selectionEnd, 2, 'should be back on first line'); - iText.moveCursorUp({ shiftKey: false}); - assert.equal(selection, 2, 'should fire once on moveCursorUp'); - assert.equal(iText.selectionStart, 0, 'should be back to first line'); - assert.equal(iText.selectionEnd, 0, 'should be back on first line'); - selection = 0; - - iText.selectionStart = 0; - iText.selectionEnd = 0; - iText.moveCursorLeft({ shiftKey: false}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 0, 'should not move'); - assert.equal(iText.selectionEnd, 0, 'should not move'); - iText.moveCursorUp({ shiftKey: false}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 0, 'should not move'); - assert.equal(iText.selectionEnd, 0, 'should not move'); - selection = 0; - - iText.selectionStart = 31; - iText.selectionEnd = 31; - iText.moveCursorRight({ shiftKey: false}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 31, 'should not move'); - assert.equal(iText.selectionEnd, 31, 'should not move'); - iText.moveCursorDown({ shiftKey: false}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 31, 'should not move'); - assert.equal(iText.selectionEnd, 31, 'should not move'); - selection = 0; - - iText.selectionStart = 28; - iText.selectionEnd = 31; - iText.moveCursorUp({ shiftKey: false }); - assert.equal(selection, 1, 'should fire'); - assert.equal(iText.selectionStart, 9, 'should move to upper line start'); - assert.equal(iText.selectionEnd, 9, 'should move to upper line end'); - selection = 0; - - iText.selectionStart = 1; - iText.selectionEnd = 4; - iText.moveCursorDown({ shiftKey: false }); - assert.equal(selection, 1, 'should fire'); - assert.equal(iText.selectionStart, 24, 'should move to down line'); - assert.equal(iText.selectionEnd, 24, 'should move to down line'); - selection = 0; - - iText.selectionStart = 28; - iText.selectionEnd = 31; - iText.moveCursorLeft({ shiftKey: false }); - assert.equal(selection, 1, 'should fire'); - assert.equal(iText.selectionStart, 28, 'should move to selection Start'); - assert.equal(iText.selectionEnd, 28, 'should move to selection Start'); - selection = 0; - // needed or test hangs - iText.abortCursorAnimation(); + ctx = canvas.getContext('2d'); + + async function assertCursorAnimation(assert, text, active = false, delay = false) { + delay && await wait(typeof delay === 'number' ? delay : undefined); + const cursorState = [text._currentTickState, text._currentTickCompleteState].some( + (cursorAnimation) => cursorAnimation && !cursorAnimation.isDone() + ); + assert.equal(cursorState, active, `cursor animation state should be ${active}`); + // must return for await + return true; + } + + function wait(ms = 16) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + function setSelection(assert, iText, start, end) { + iText.selectionStart = start; + iText.selectionEnd = end; + iText.initDelayedCursor(true); + return assertCursorAnimation(assert, iText, true); + } + + QUnit.module('selection changes', function (hooks) { + let iText, selection = 0, _assertCursorAnimation, _setSelection; + hooks.before(() => { + iText = new fabric.IText('test need some word\nsecond line'); + iText.ctx = ctx; + iText.on('selection:changed', () => selection++); + _assertCursorAnimation = assertCursorAnimation.bind(null, QUnit.assert, iText); + _setSelection = setSelection.bind(null, QUnit.assert, iText); + }); + hooks.after(() => { + // needed or test hangs + iText.dispose(); + }); + hooks.beforeEach(() => { + selection = 0; + }); + + QUnit.test('enterEditing', async function (assert) { + iText.enterEditing(); + await _assertCursorAnimation(true); + assert.equal(selection, 1, 'will fire on enter edit since the cursor is changing for the first time'); + }); + + QUnit.test('selectAll', async function (assert) { + const done = assert.async(); + iText.selectAll(); + assert.equal(selection, 1, 'should fire once on selectAll'); + assert.equal(iText.selectionStart, 0, 'should start from 0'); + assert.equal(iText.selectionEnd, 31, 'should end at end of text'); + await _assertCursorAnimation(false, true); + done(); + }); + + QUnit.test('selectWord', async function (assert) { + const done = assert.async(); + await _setSelection(2, 2); + iText.selectWord(); + assert.equal(selection, 1, 'should fire once on selectWord'); + assert.equal(iText.selectionStart, 0, 'should start at word start'); + assert.equal(iText.selectionEnd, 4, 'should end at word end'); + await _assertCursorAnimation(false, true); + done(); + }); + + QUnit.test('selectLine', async function (assert) { + const done = assert.async(); + await _setSelection(2, 2); + iText.selectLine(); + assert.equal(selection, 1, 'should fire once on selectLine'); + assert.equal(iText.selectionStart, 0, 'should start at line start'); + assert.equal(iText.selectionEnd, 19, 'should end at line end'); + await _assertCursorAnimation(false, true); + done(); + }); + + QUnit.test('moveCursorLeft', async function (assert) { + const done = assert.async(); + await _setSelection(2, 2); + iText.moveCursorLeft({ shiftKey: false }); + assert.equal(selection, 1, 'should fire once on moveCursorLeft'); + assert.equal(iText.selectionStart, 1, 'should be 1 less than 2'); + assert.equal(iText.selectionEnd, 1, 'should be 1 less than 2'); + await _assertCursorAnimation(true, true); + done(); + }); + + QUnit.test('moveCursorRight', async function (assert) { + const done = assert.async(); + await _setSelection(2, 2); + iText.moveCursorRight({ shiftKey: false }); + assert.equal(selection, 1, 'should fire once on moveCursorRight'); + assert.equal(iText.selectionStart, 3, 'should be 1 more than 2'); + assert.equal(iText.selectionEnd, 3, 'should be 1 more than 2'); + await _assertCursorAnimation(true, true); + done(); + }); + + QUnit.test('moveCursorDown', async function (assert) { + const done = assert.async(); + await _setSelection(2, 2); + iText.moveCursorDown({ shiftKey: false }); + assert.equal(selection, 1, 'should fire once on moveCursorDown'); + assert.equal(iText.selectionStart, 22, 'should be on second line'); + assert.equal(iText.selectionEnd, 22, 'should be on second line'); + await _assertCursorAnimation(true, true); + iText.moveCursorDown({ shiftKey: false }); + assert.equal(selection, 2, 'should fire once on moveCursorDown'); + assert.equal(iText.selectionStart, 31, 'should be at end of text'); + assert.equal(iText.selectionEnd, 31, 'should be at end of text'); + await _assertCursorAnimation(true, true); + done(); + }); + + QUnit.test('moveCursorUp', async function (assert) { + const done = assert.async(); + await _setSelection(22, 22); + iText.moveCursorUp({ shiftKey: false }); + assert.equal(selection, 1, 'should fire once on moveCursorUp'); + assert.equal(iText.selectionStart, 2, 'should be back to first line'); + assert.equal(iText.selectionEnd, 2, 'should be back on first line'); + await _assertCursorAnimation(true, true); + iText.moveCursorUp({ shiftKey: false }); + assert.equal(selection, 2, 'should fire once on moveCursorUp'); + assert.equal(iText.selectionStart, 0, 'should be back to first line'); + assert.equal(iText.selectionEnd, 0, 'should be back on first line'); + await _assertCursorAnimation(true, true); + done(); + }); + + QUnit.test('moveCursorLeft', async function (assert) { + const done = assert.async(); + await _setSelection(0, 0); + iText.moveCursorLeft({ shiftKey: false }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 0, 'should not move'); + assert.equal(iText.selectionEnd, 0, 'should not move'); + await _assertCursorAnimation(false, true); + iText.moveCursorUp({ shiftKey: false }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 0, 'should not move'); + assert.equal(iText.selectionEnd, 0, 'should not move'); + await _assertCursorAnimation(false, true); + done(); + }); + + QUnit.test('moveCursorRight', async function (assert) { + const done = assert.async(); + await _setSelection(31, 31); + iText.moveCursorRight({ shiftKey: false }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 31, 'should not move'); + assert.equal(iText.selectionEnd, 31, 'should not move'); + await _assertCursorAnimation(true); + iText.moveCursorDown({ shiftKey: false }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 31, 'should not move'); + assert.equal(iText.selectionEnd, 31, 'should not move'); + await _assertCursorAnimation(true); + done(); + }); + + QUnit.test('moveCursorUp', async function (assert) { + const done = assert.async(); + await _setSelection(28, 31); + await _assertCursorAnimation(false, true); + iText.moveCursorUp({ shiftKey: false }); + assert.equal(selection, 1, 'should fire'); + assert.equal(iText.selectionStart, 9, 'should move to upper line start'); + assert.equal(iText.selectionEnd, 9, 'should move to upper line end'); + await _assertCursorAnimation(true); + done(); + }); + + QUnit.test('moveCursorDown', async function (assert) { + const done = assert.async(); + await _setSelection(1, 4); + await _assertCursorAnimation(false, true); + iText.moveCursorDown({ shiftKey: false }); + assert.equal(selection, 1, 'should fire'); + assert.equal(iText.selectionStart, 24, 'should move to down line'); + assert.equal(iText.selectionEnd, 24, 'should move to down line'); + await _assertCursorAnimation(true); + done(); + }); + + QUnit.test('moveCursorLeft', async function (assert) { + const done = assert.async(); + await _setSelection(28, 31); + await _assertCursorAnimation(false, true); + iText.moveCursorLeft({ shiftKey: false }); + assert.equal(selection, 1, 'should fire'); + assert.equal(iText.selectionStart, 28, 'should move to selection Start'); + assert.equal(iText.selectionEnd, 28, 'should move to selection Start'); + await _assertCursorAnimation(true); + done(); + }); + + QUnit.test('moveCursor at start with shift', async function (assert) { + const done = assert.async(); + await _setSelection(0, 1); + await _assertCursorAnimation(false, true); + iText._selectionDirection = 'left'; + iText.moveCursorLeft({ shiftKey: true }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 0, 'should not move'); + assert.equal(iText.selectionEnd, 1, 'should not move'); + await _assertCursorAnimation(false, true); + iText.moveCursorUp({ shiftKey: true }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 0, 'should not move'); + assert.equal(iText.selectionEnd, 1, 'should not move'); + await _assertCursorAnimation(false, true); + iText.moveCursorRight({ shiftKey: true }); + assert.equal(selection, 1, 'should not fire with no change'); + assert.equal(iText.selectionStart, 1, 'should not move'); + assert.equal(iText.selectionEnd, 1, 'should not move'); + await _assertCursorAnimation(true, true); + done(); + }); + + QUnit.test('moveCursor at end with shift', async function (assert) { + const done = assert.async(); + await _setSelection(30, 31); + await _assertCursorAnimation(false, true); + iText._selectionDirection = 'right'; + iText.moveCursorRight({ shiftKey: true }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 30, 'should not move'); + assert.equal(iText.selectionEnd, 31, 'should not move'); + await _assertCursorAnimation(false, true); + iText.moveCursorDown({ shiftKey: true }); + assert.equal(selection, 0, 'should not fire with no change'); + assert.equal(iText.selectionStart, 30, 'should not move'); + assert.equal(iText.selectionEnd, 31, 'should not move'); + await _assertCursorAnimation(false, true); + iText.moveCursorLeft({ shiftKey: true }); + assert.equal(selection, 1, 'should not fire with no change'); + assert.equal(iText.selectionStart, 30, 'should not move'); + assert.equal(iText.selectionEnd, 30, 'should not move'); + await _assertCursorAnimation(true, true); + done(); + }); + // TODO verify and dp // iText.selectionStart = 0; // iText.selectionEnd = 0; @@ -134,112 +253,7 @@ // assert.equal(selection, 1, 'should fire once on insert multiple chars'); // assert.equal(iText.selectionStart, 5, 'should be at end of text inserted'); // assert.equal(iText.selectionEnd, 5, 'should be at end of text inserted'); - }); - - QUnit.test('moving cursor with shift', function(assert) { - var iText = new fabric.IText('test need some word\nsecond line'), - selection = 0; - iText.ctx = ctx; - function countSelectionChange() { - selection++; - } - - iText.on('selection:changed', countSelectionChange); - - iText.enterEditing(); - assert.equal(selection, 1, 'should fire on enter edit'); - selection = 0; - - iText.selectAll(); - assert.equal(selection, 1, 'should fire once on selectAll'); - assert.equal(iText.selectionStart, 0, 'should start from 0'); - assert.equal(iText.selectionEnd, 31, 'should end at end of text'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.selectWord(); - assert.equal(selection, 1, 'should fire once on selectWord'); - assert.equal(iText.selectionStart, 0, 'should start at word start'); - assert.equal(iText.selectionEnd, 4, 'should end at word end'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.selectLine(); - assert.equal(selection, 1, 'should fire once on selectLine'); - assert.equal(iText.selectionStart, 0, 'should start at line start'); - assert.equal(iText.selectionEnd, 19, 'should end at line end'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorLeft({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorLeft'); - assert.equal(iText.selectionStart, 1, 'should be 1 less than 2'); - assert.equal(iText.selectionEnd, 1, 'should be 1 less than 2'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorRight({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorRight'); - assert.equal(iText.selectionStart, 3, 'should be 1 more than 2'); - assert.equal(iText.selectionEnd, 3, 'should be 1 more than 2'); - selection = 0; - - iText.selectionStart = 2; - iText.selectionEnd = 2; - iText.moveCursorDown({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorDown'); - assert.equal(iText.selectionStart, 22, 'should be on second line'); - assert.equal(iText.selectionEnd, 22, 'should be on second line'); - iText.moveCursorDown({ shiftKey: false}); - assert.equal(selection, 2, 'should fire once on moveCursorDown'); - assert.equal(iText.selectionStart, 31, 'should be at end of text'); - assert.equal(iText.selectionEnd, 31, 'should be at end of text'); - selection = 0; - - iText.selectionStart = 22; - iText.selectionEnd = 22; - iText.moveCursorUp({ shiftKey: false}); - assert.equal(selection, 1, 'should fire once on moveCursorUp'); - assert.equal(iText.selectionStart, 2, 'should be back to first line'); - assert.equal(iText.selectionEnd, 2, 'should be back on first line'); - iText.moveCursorUp({ shiftKey: false}); - assert.equal(selection, 2, 'should fire once on moveCursorUp'); - assert.equal(iText.selectionStart, 0, 'should be back to first line'); - assert.equal(iText.selectionEnd, 0, 'should be back on first line'); - selection = 0; - - iText.selectionStart = 0; - iText.selectionEnd = 1; - iText._selectionDirection = 'left'; - iText.moveCursorLeft({ shiftKey: true}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 0, 'should not move'); - assert.equal(iText.selectionEnd, 1, 'should not move'); - iText.moveCursorUp({ shiftKey: true}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 0, 'should not move'); - assert.equal(iText.selectionEnd, 1, 'should not move'); - selection = 0; - - iText.selectionStart = 30; - iText.selectionEnd = 31; - iText._selectionDirection = 'right'; - iText.moveCursorRight({ shiftKey: true}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 30, 'should not move'); - assert.equal(iText.selectionEnd, 31, 'should not move'); - iText.moveCursorDown({ shiftKey: true}); - assert.equal(selection, 0, 'should not fire with no change'); - assert.equal(iText.selectionStart, 30, 'should not move'); - assert.equal(iText.selectionEnd, 31, 'should not move'); - selection = 0; - // needed or test hangs - iText.abortCursorAnimation(); }); QUnit.test('mousedown calls key maps', function (assert) { From c9763026ea0fd6cef9ca11b1a31dafce1f6293fe Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Thu, 12 Jan 2023 14:15:00 +0100 Subject: [PATCH 9/9] chore(TS) Remove more empty declarations (#8593) --- .github/workflows/build.yml | 2 +- CHANGELOG.md | 3 ++- src/brushes/base_brush.class.ts | 2 +- src/brushes/circle_brush.class.ts | 2 +- src/brushes/pattern_brush.class.ts | 2 +- src/brushes/pencil_brush.class.ts | 6 ++--- src/brushes/spray_brush.class.ts | 4 +-- src/canvas/TextEditingManager.ts | 2 +- src/color/color.class.ts | 2 +- src/controls/control.class.ts | 6 ++--- src/util/animation/AnimationBase.ts | 26 +++++++++---------- .../projectStroke/StrokeLineCapProjections.ts | 4 +-- .../StrokeLineJoinProjections.ts | 8 +++--- .../projectStroke/StrokeProjectionsBase.ts | 8 +++--- 14 files changed, 39 insertions(+), 38 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e299c387ab6..3fd3348d521 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,7 +39,7 @@ jobs: size: { fabric: { minified: fs.statSync('dist/fabric.min.js').size, bundled: fs.statSync('dist/fabric.js').size } } }); - name: checkout src files - run: git checkout origin/master -- src index.js + run: git checkout origin/master -- src index.ts - name: upstream build stats run: npm run build -- -s - name: persist diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f889702711..9f293a66626 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## [next] -- refactor(Animation): modernize IText cursor animation based on animation API changes (and fix minor regression) plus leftovers from #8547 [#8583](https://github.com/fabricjs/fabric.js/pull/8583) +- chore(TS): remove all remaining empty declarations [#8593](https://github.com/fabricjs/fabric.js/pull/8593) +- refactor(IText): modernize IText cursor animation based on animation API changes (and fix minor regression) plus leftovers from #8547 [#8583](https://github.com/fabricjs/fabric.js/pull/8583) - refactor(Canvas, IText): Handle cross instance text editing states to an EditingManager class [#8543](https://github.com/fabricjs/fabric.js/pull/8543) - chore(TS): move to export, babel, new rollup, change import statement for fabric. [#8585](https://github.com/fabricjs/fabric.js/pull/8585); - chore(TS): Add declare in front of properties that are type definitions. [#8574](https://github.com/fabricjs/fabric.js/pull/8574) diff --git a/src/brushes/base_brush.class.ts b/src/brushes/base_brush.class.ts index 073de8220c9..10fe73c24f5 100644 --- a/src/brushes/base_brush.class.ts +++ b/src/brushes/base_brush.class.ts @@ -72,7 +72,7 @@ export abstract class BaseBrush { /** * @todo add type */ - canvas: Canvas; + declare canvas: Canvas; constructor(canvas: Canvas) { this.canvas = canvas; diff --git a/src/brushes/circle_brush.class.ts b/src/brushes/circle_brush.class.ts index cce7655a41b..038eed1a091 100644 --- a/src/brushes/circle_brush.class.ts +++ b/src/brushes/circle_brush.class.ts @@ -22,7 +22,7 @@ export class CircleBrush extends BaseBrush { */ width = 10; - points: CircleBrushPoint[]; + declare points: CircleBrushPoint[]; constructor(canvas: Canvas) { super(canvas); diff --git a/src/brushes/pattern_brush.class.ts b/src/brushes/pattern_brush.class.ts index 5901455974d..ceeeea556ca 100644 --- a/src/brushes/pattern_brush.class.ts +++ b/src/brushes/pattern_brush.class.ts @@ -5,7 +5,7 @@ import type { Canvas } from '../canvas/canvas_events'; import { PencilBrush } from './pencil_brush.class'; export class PatternBrush extends PencilBrush { - source?: CanvasImageSource; + declare source?: CanvasImageSource; constructor(canvas: Canvas) { super(canvas); diff --git a/src/brushes/pencil_brush.class.ts b/src/brushes/pencil_brush.class.ts index 446437b3439..a02141c5e9a 100644 --- a/src/brushes/pencil_brush.class.ts +++ b/src/brushes/pencil_brush.class.ts @@ -40,9 +40,9 @@ export class PencilBrush extends BaseBrush { */ straightLineKey: ModifierKey | undefined | null = 'shiftKey'; - private _points: Point[]; - private _hasStraightLine: boolean; - private oldEnd?: Point; + private declare _points: Point[]; + private declare _hasStraightLine: boolean; + private declare oldEnd?: Point; constructor(canvas: Canvas) { super(canvas); diff --git a/src/brushes/spray_brush.class.ts b/src/brushes/spray_brush.class.ts index bf7ebeb68aa..89f97e61f54 100644 --- a/src/brushes/spray_brush.class.ts +++ b/src/brushes/spray_brush.class.ts @@ -76,9 +76,9 @@ export class SprayBrush extends BaseBrush { */ optimizeOverlapping = true; - private sprayChunks: SprayBrushPoint[][]; + private declare sprayChunks: SprayBrushPoint[][]; - private sprayChunk: SprayBrushPoint[]; + private declare sprayChunk: SprayBrushPoint[]; /** * Constructor diff --git a/src/canvas/TextEditingManager.ts b/src/canvas/TextEditingManager.ts index 332c3a700c9..606d581b70f 100644 --- a/src/canvas/TextEditingManager.ts +++ b/src/canvas/TextEditingManager.ts @@ -8,7 +8,7 @@ import { removeFromArray } from '../util/internals'; */ export class TextEditingManager { private targets: (IText | Textbox)[] = []; - private target?: IText | Textbox; + private declare target?: IText | Textbox; exitTextEditing() { this.target = undefined; diff --git a/src/color/color.class.ts b/src/color/color.class.ts index 1109606a1b8..c24cfdce4b9 100644 --- a/src/color/color.class.ts +++ b/src/color/color.class.ts @@ -24,7 +24,7 @@ export type TColorArg = string | TRGBColorSource | TRGBAColorSource | Color; * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors} */ export class Color { - private _source: TRGBAColorSource; + private declare _source: TRGBAColorSource; /** * diff --git a/src/controls/control.class.ts b/src/controls/control.class.ts index bc1aaa10b56..448b1298a53 100644 --- a/src/controls/control.class.ts +++ b/src/controls/control.class.ts @@ -150,7 +150,7 @@ export class Control { * @param {Number} y y position of the cursor * @return {Boolean} true if the action/event modified the object */ - actionHandler: TransformActionHandler; + declare actionHandler: TransformActionHandler; /** * The control handler for mouse down, provide one to handle mouse down on control @@ -160,7 +160,7 @@ export class Control { * @param {Number} y y position of the cursor * @return {Boolean} true if the action/event modified the object */ - mouseDownHandler?: ControlActionHandler; + declare mouseDownHandler?: ControlActionHandler; /** * The control mouseUpHandler, provide one to handle an effect on mouse up. @@ -170,7 +170,7 @@ export class Control { * @param {Number} y y position of the cursor * @return {Boolean} true if the action/event modified the object */ - mouseUpHandler?: ControlActionHandler; + declare mouseUpHandler?: ControlActionHandler; /** * Returns control actionHandler diff --git a/src/util/animation/AnimationBase.ts b/src/util/animation/AnimationBase.ts index 64920c44a11..da7fff7c5ca 100644 --- a/src/util/animation/AnimationBase.ts +++ b/src/util/animation/AnimationBase.ts @@ -15,24 +15,24 @@ const defaultAbort = () => false; export abstract class AnimationBase< T extends number | number[] = number | number[] > { - readonly startValue: T; - readonly endValue: T; - readonly duration: number; - readonly delay: number; + declare readonly startValue: T; + declare readonly endValue: T; + declare readonly duration: number; + declare readonly delay: number; - protected readonly byValue: T; - protected readonly easing: TEasingFunction; + protected declare readonly byValue: T; + protected declare readonly easing: TEasingFunction; - private readonly _onStart: VoidFunction; - private readonly _onChange: TOnAnimationChangeCallback; - private readonly _onComplete: TOnAnimationChangeCallback; - private readonly _abort: TAbortCallback; + private declare readonly _onStart: VoidFunction; + private declare readonly _onChange: TOnAnimationChangeCallback; + private declare readonly _onComplete: TOnAnimationChangeCallback; + private declare readonly _abort: TAbortCallback; /** * Used to register the animation to a target object * so that it can be cancelled within the object context */ - readonly target?: unknown; + declare readonly target?: unknown; private _state: AnimationState = 'pending'; /** @@ -47,11 +47,11 @@ export abstract class AnimationBase< /** * Current value */ - value: T; + declare value: T; /** * Animation start time ms */ - private startTime!: number; + private declare startTime: number; constructor({ startValue, diff --git a/src/util/misc/projectStroke/StrokeLineCapProjections.ts b/src/util/misc/projectStroke/StrokeLineCapProjections.ts index 551dd04445e..4ddeb1609c3 100644 --- a/src/util/misc/projectStroke/StrokeLineCapProjections.ts +++ b/src/util/misc/projectStroke/StrokeLineCapProjections.ts @@ -20,11 +20,11 @@ export class StrokeLineCapProjections extends StrokeProjectionsBase { /** * edge point */ - A: Point; + declare A: Point; /** * point next to edge point */ - T: Point; + declare T: Point; constructor(A: IPoint, T: IPoint, options: TProjectStrokeOnPointsOptions) { super(options); diff --git a/src/util/misc/projectStroke/StrokeLineJoinProjections.ts b/src/util/misc/projectStroke/StrokeLineJoinProjections.ts index 9b4608d8e55..6d05cc5f73b 100644 --- a/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +++ b/src/util/misc/projectStroke/StrokeLineJoinProjections.ts @@ -20,19 +20,19 @@ export class StrokeLineJoinProjections extends StrokeProjectionsBase { /** * The point being projected (the angle ∠BAC) */ - A: Point; + declare A: Point; /** * The point before A */ - B: Point; + declare B: Point; /** * The point after A */ - C: Point; + declare C: Point; /** * The bisector of A (∠BAC) */ - bisector: ReturnType; + declare bisector: ReturnType; constructor( A: IPoint, diff --git a/src/util/misc/projectStroke/StrokeProjectionsBase.ts b/src/util/misc/projectStroke/StrokeProjectionsBase.ts index 9f080d3dba3..ead44597927 100644 --- a/src/util/misc/projectStroke/StrokeProjectionsBase.ts +++ b/src/util/misc/projectStroke/StrokeProjectionsBase.ts @@ -12,10 +12,10 @@ import { TProjectStrokeOnPointsOptions, TProjection } from './types'; * @see https://github.com/fabricjs/fabric.js/pull/8344 */ export abstract class StrokeProjectionsBase { - options: TProjectStrokeOnPointsOptions; - scale: Point; - strokeUniformScalar: Point; - strokeProjectionMagnitude: number; + declare options: TProjectStrokeOnPointsOptions; + declare scale: Point; + declare strokeUniformScalar: Point; + declare strokeProjectionMagnitude: number; static getAcuteAngleFactor(vector1: Point, vector2?: Point) { const angle = vector2