From 6bac8225a01fe3b5a46de47b687acc3fe7d2ebc2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 25 Apr 2016 11:02:18 +0200 Subject: [PATCH 01/93] app preview image --- .github/preview.png | Bin 0 -> 33193 bytes README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .github/preview.png diff --git a/.github/preview.png b/.github/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c6beb211e1514b0c216798d147e59ccf116543fe GIT binary patch literal 33193 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 Kt&lc;@jn0!<9x3G literal 0 HcmV?d00001 diff --git a/README.md b/README.md index d3118237..3ad31bcd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A module to integrale informations from a Netatmo weather station into the [MagicMirror](https://github.com/MichMich/MagicMirror). -![Netatmo visualisation](https://cloud.githubusercontent.com/assets/9592452/14049247/45058c36-f2b4-11e5-98bb-d0804ea6b55a.png) +![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.png) ## Usage From 5931226e0933125891382bfdc872182d65404ad2 Mon Sep 17 00:00:00 2001 From: gylian Date: Wed, 3 Aug 2016 18:45:58 +0200 Subject: [PATCH 02/93] Create fr.json --- l10n/fr.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 l10n/fr.json diff --git a/l10n/fr.json b/l10n/fr.json new file mode 100644 index 00000000..cb52af71 --- /dev/null +++ b/l10n/fr.json @@ -0,0 +1,9 @@ +{ + "CO2": "CO2", + "NOISE": "Sonomètre", + "HUMIDITY": "Humidité", + "PRESSURE": "Pression", + "TEMPERATURE": "Température", + "RAIN": "Pluie", + "WIND": "Vent" +} From 8fbd5a2084b84f7c4a8599c4a31b1cb00dfe4898 Mon Sep 17 00:00:00 2001 From: gylian Date: Wed, 3 Aug 2016 18:46:47 +0200 Subject: [PATCH 03/93] Update netatmo.js --- netatmo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index 208e9c5d..b7d2acea 100755 --- a/netatmo.js +++ b/netatmo.js @@ -251,7 +251,8 @@ Module.register('netatmo', { getTranslations: function() { return { en: 'l10n/en.json', - de: 'l10n/de.json' + en: 'l10n/de.json', + fr: 'l10n/fr.json' }; }, getDom: function() { From f5ba4f467a203e345bfe5496c41903b87d66e621 Mon Sep 17 00:00:00 2001 From: gylian Date: Wed, 3 Aug 2016 18:49:16 +0200 Subject: [PATCH 04/93] Add french translation --- netatmo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index b7d2acea..a7591659 100755 --- a/netatmo.js +++ b/netatmo.js @@ -251,7 +251,7 @@ Module.register('netatmo', { getTranslations: function() { return { en: 'l10n/en.json', - en: 'l10n/de.json', + de: 'l10n/de.json', fr: 'l10n/fr.json' }; }, From 76019d725e7bf35e02092959afd76931040e8491 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 22 Nov 2016 15:52:22 +0100 Subject: [PATCH 05/93] Create DATA.MD --- DATA.MD | 212 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 DATA.MD diff --git a/DATA.MD b/DATA.MD new file mode 100644 index 00000000..882da76a --- /dev/null +++ b/DATA.MD @@ -0,0 +1,212 @@ +# Netatmo Data + +``` +{ + "body": { + "devices": [], + "user": {} + }, + "status": "ok", + "time_exec": 0.035109043121338, + "time_server": 1462746567 +} +``` + +## Modules + +- NAMain +- NAModule1 // outdoor +- NAModule2 // rain +- NAModule3 // wind +- NAModule4 // indoor + +All module have the following data: + +``` +{ + "_id": "", + "type": "NAModule1", + "last_message": 1462745975, + "last_seen": 1462745949, + "last_setup": 1448382569, + "dashboard_data": {}, + "data_type": [], + "module_name": "Outdoor", + "firmware": 43 +} +``` + +Modules with batteries have the following additional data: + +``` +{ + "battery_vp": 5613, + "battery_percent": 79, + "rf_status": 79 +} +``` + +### Main - `NAMain` + +``` +{ + "_id": "", + "cipher_id": "", + "last_status_store": 1462745980, + "modules": [ + [...] + ], + "place": { + "altitude": 1797.0131057604, + "city": "", + "": "US", + "timezone": "", + "location": [-104.797903, 39.523649] + }, + "station_name": "", + "type": "NAMain", + "dashboard_data": { + "AbsolutePressure": 803.4, + "time_utc": 1462745966, + "Noise": 45, + "Temperature": 20, + "temp_trend": "up", + "Humidity": 43 "Pressure": 998.6, + "pressure_trend": "down", + "CO2": 469, + "date_max_temp": 1462731171, + "date_min_temp": 1462709180, + "min_temp": 18.1, + "max_temp": 20.3 + }, + "data_type": ["Temperature", "CO2", "Humidity", "Noise", "Pressure"], + "co2_calibrating": false, + "date_setup": 1460662828, + "last_upgrade": 1462638093, + "wifi_status": 42, + "friend_users": [""] +} +``` + +### Outdoor - `NAModule1` + +``` +{ + "type": "NAModule1", + "dashboard_data": { + "time_utc": 1462745949, + "Temperature": 15.4, + "temp_trend": "down", + "Humidity": 36, + "date_max_temp": 1462741078, + "date_min_temp": 1462710677, + "min_temp": 2.2, + "max_temp": 19.7 + }, + "data_type": ["Temperature", "Humidity"] +} +``` + +### Wind - `NAModule2` + +``` +{ + "type": "NAModule2", + "dashboard_data": { + "WindAngle": 221, + "WindStrength": 2, + "GustAngle": 208, + "GustStrength": 4, + "time_utc": 1462745962, + "WindHistoric": [{ + "WindStrength": 5, + "WindAngle": 43, + "time_utc": 1462742585 + }, { + "WindStrength": 5, + "WindAngle": 174, + "time_utc": 1462742886 + }, { + "WindStrength": 10, + "WindAngle": 315, + "time_utc": 1462743136 + }, [...] + ], + "date_max_wind_str": 1462742283, + "date_max_temp": 1462687491, + "date_min_temp": 1462687491, + "min_temp": 0, + "max_temp": 0, + "max_wind_angle": 44, + "max_wind_str": 20 + }, + "data_type": ["Wind"] +} +``` + +### Rain - `NAModule3` + +``` +{ + "type": "NAModule3", + "dashboard_data": { + "time_utc": 1462745962, + "Rain": 0, + "sum_rain_24": 0, + "sum_rain_1": 0 + }, + "data_type": ["Rain"] +} +``` + +### Indoor - `NAModule4` + +``` +{ + "type": "NAModule4", + "dashboard_data": { + "time_utc": 1462739506, + "Temperature": 24.5, + "temp_trend": "stable", + "Humidity": 35, + "CO2": 605, + "date_max_temp": 1462698477, + "date_min_temp": 1462658648, + "min_temp": 23.3, + "max_temp": 27.6 + }, + "data_type": ["Temperature", "CO2", "Humidity"] +} +``` + +## User + +``` +"user": { + "mail": "", + "administrative": { + "country": "DE", + "reg_locale": "de-DE", + "lang": "de-DE", + "unit": 0, //celsius + "windunit": 4, + "pressureunit": 0, + "feel_like_algo": 0 + } +} +``` + +``` +"user": { + "mail": "", + "administrative": { + "country": "US", + "reg_locale": "en-US", + "lang": "en-GB", + "unit": 1, //fahrenheit + "windunit": 1, + "pressureunit": 0, + "feel_like_algo": 1 + } +} +``` From 109e9094b20b40e3830cf3ed9ea6c4673de013ee Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 22 Nov 2016 15:52:39 +0100 Subject: [PATCH 06/93] Rename DATA.MD to DATA.md --- DATA.MD => DATA.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename DATA.MD => DATA.md (100%) diff --git a/DATA.MD b/DATA.md similarity index 100% rename from DATA.MD rename to DATA.md From eaf6d00c8bf7cacd9154cdf20800da2b1a960bf2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 4 May 2017 23:10:27 +0200 Subject: [PATCH 07/93] add badges --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3ad31bcd..3b8fc270 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ -# MagicMirror-Netatmo-Module +[![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) +[![code climate](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module) +[![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) +[![license](https://img.shields.io/badge/license-MIT-blue.svg)](http://choosealicense.com/licenses/mit) -

- - API - License -

+# MagicMirror-Netatmo-Module A module to integrale informations from a Netatmo weather station into the [MagicMirror](https://github.com/MichMich/MagicMirror). From e5e84dce43e80ac463596a19fa5365518faa0768 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 4 May 2017 23:44:39 +0200 Subject: [PATCH 08/93] formatting rain value #26 --- netatmo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index a7591659..6c3a58e3 100755 --- a/netatmo.js +++ b/netatmo.js @@ -191,7 +191,7 @@ Module.register('netatmo', { case 'Temperature': return value.toFixed(1) + '°'; case 'Rain': - return value; + return value.toFixed(1) + 'mm'; case 'Wind': return value; default: From ec52f3ef19fe9e984879d35024b9d5acaed1a021 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 5 May 2017 21:48:29 +0200 Subject: [PATCH 09/93] add travis CI badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3b8fc270..83f9c65d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Build Status](https://travis-ci.org/CFenner/MagicMirror-Netatmo-Module.svg?branch=master)](https://travis-ci.org/CFenner/MagicMirror-Netatmo-Module) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module) [![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) From 2fc5b2cd61ca11abd90ac81fc7731e3f3f43c316 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 5 May 2017 21:52:42 +0200 Subject: [PATCH 10/93] add travis config --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..11042e01 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "iojs" + - "7" From fe00a65b13579d99c00370d0c4b639bb46e03ce1 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 5 May 2017 21:56:53 +0200 Subject: [PATCH 11/93] execute eslint --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9ddb29fb..dfdea695 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "netatmo.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "npm run lint", "lint": "eslint ." }, "repository": { From e8045bd80d39637e42eef02b2daee3817fbd7b35 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 8 May 2017 23:49:58 +0200 Subject: [PATCH 12/93] change visual appearance (#30) * draft for new design * fix typo * fix typo * fix element handling * print more data * fix typo * fix typo * fix typo * fix typo * add more data * fix typo * add more data * connect ppm & bubble color * correct color values * fix design on PI browser * refactor design structure * fix typo * fix typo * fix typo * fix formatter problem * fix typo * format temp & humidity * fix that * fix this/that problem * fix this/that * translate data * add new translations * add trend translation * translate ppm * simplify * refactor * rename standard design * refactor * switch to old design * fix typo * refactor Redering for classic * separate css * splitup less * fix indent * enable module sorting for new design * switch to new design * extract css * fix typo * fix typo * fix typo * add dummy data for wind & rain * fix typo * add primary for wind & rain * n * add wind directions * add wind visual * add wind visual * use weather icons * increase font size * Update netatmo.bubbles.less * change wind direction icon * refactor classic design * fix design object * change wind direction icon * add wind & rain data * add units to wind & rain * add units to rain * add wind & raid translation (de) * correct translation keys * correct units * add radio & wifi * add trends * fix * add last seen * adjust css * catch unset trends * correct translation * correct moments * add percent for wifi, battery & radio * opitimize bubbles * change data order * adjust css * flash if not contact * fix * correct translation * hide battery for main module * set classic default * display "last seen" #32 * add config parameters for battery, wifi, radio, trend & lastMessage * change trend label * change name for dummy modules * fix * change label * remove dummy data * change eslint config * fix code climate issue --- .eslintrc | 894 ------------------------------------------- String.format.js | 1 - l10n/de.json | 19 +- l10n/en.json | 19 +- l10n/fr.json | 19 +- netatmo.bubbles.less | 64 ++++ netatmo.classic.less | 23 ++ netatmo.css | 2 +- netatmo.js | 476 ++++++++++++++++++----- netatmo.less | 25 +- package.json | 21 +- 11 files changed, 547 insertions(+), 1016 deletions(-) delete mode 100644 .eslintrc create mode 100644 netatmo.bubbles.less create mode 100644 netatmo.classic.less diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 4ccd07d4..00000000 --- a/.eslintrc +++ /dev/null @@ -1,894 +0,0 @@ -ecmaFeatures: - modules: true - jsx: true - -parser: espree - -parserOptions: - ecmaVersion: 6 - ecmaFeatures: - globalReturn: true - -env: - amd: true - browser: true - es6: true - jquery: true - node: true - -globals: - define: false - require: false - addEventListener: false - alert: false - AnalyserNode: false - Animation: false - AnimationEffectReadOnly: false - AnimationEffectTiming: false - AnimationEffectTimingReadOnly: false - AnimationEvent: false - AnimationPlaybackEvent: false - AnimationTimeline: false - applicationCache: false - ApplicationCache: false - ApplicationCacheErrorEvent: false - atob: false - Attr: false - Audio: false - AudioBuffer: false - AudioBufferSourceNode: false - AudioContext: false - AudioDestinationNode: false - AudioListener: false - AudioNode: false - AudioParam: false - AudioProcessingEvent: false - AutocompleteErrorEvent: false - BarProp: false - BatteryManager: false - BeforeUnloadEvent: false - BiquadFilterNode: false - Blob: false - blur: false - btoa: false - Cache: false - caches: false - CacheStorage: false - cancelAnimationFrame: false - CanvasGradient: false - CanvasPattern: false - CanvasRenderingContext2D: false - CDATASection: false - ChannelMergerNode: false - ChannelSplitterNode: false - CharacterData: false - clearInterval: false - clearTimeout: false - clientInformation: false - ClientRect: false - ClientRectList: false - ClipboardEvent: false - close: false - closed: false - CloseEvent: false - Comment: false - CompositionEvent: false - confirm: false - console: false - ConvolverNode: false - crypto: false - Crypto: false - CryptoKey: false - CSS: false - CSSAnimation: false - CSSFontFaceRule: false - CSSImportRule: false - CSSKeyframeRule: false - CSSKeyframesRule: false - CSSMediaRule: false - CSSPageRule: false - CSSRule: false - CSSRuleList: false - CSSStyleDeclaration: false - CSSStyleRule: false - CSSStyleSheet: false - CSSSupportsRule: false - CSSTransition: false - CSSUnknownRule: false - CSSViewportRule: false - CustomEvent: false - DataTransfer: false - DataTransferItem: false - DataTransferItemList: false - Debug: false - defaultStatus: false - defaultstatus: false - DelayNode: false - DeviceMotionEvent: false - DeviceOrientationEvent: false - devicePixelRatio: false - dispatchEvent: false - document: false - Document: false - DocumentFragment: false - DocumentTimeline: false - DocumentType: false - DOMError: false - DOMException: false - DOMImplementation: false - DOMParser: false - DOMSettableTokenList: false - DOMStringList: false - DOMStringMap: false - DOMTokenList: false - DragEvent: false - DynamicsCompressorNode: false - Element: false - ElementTimeControl: false - ErrorEvent: false - event: false - Event: false - EventSource: false - EventTarget: false - external: false - fetch: false - File: false - FileError: false - FileList: false - FileReader: false - find: false - focus: false - FocusEvent: false - FontFace: false - FormData: false - frameElement: false - frames: false - GainNode: false - Gamepad: false - GamepadButton: false - GamepadEvent: false - getComputedStyle: false - getSelection: false - HashChangeEvent: false - Headers: false - history: false - History: false - HTMLAllCollection: false - HTMLAnchorElement: false - HTMLAppletElement: false - HTMLAreaElement: false - HTMLAudioElement: false - HTMLBaseElement: false - HTMLBlockquoteElement: false - HTMLBodyElement: false - HTMLBRElement: false - HTMLButtonElement: false - HTMLCanvasElement: false - HTMLCollection: false - HTMLContentElement: false - HTMLDataListElement: false - HTMLDetailsElement: false - HTMLDialogElement: false - HTMLDirectoryElement: false - HTMLDivElement: false - HTMLDListElement: false - HTMLDocument: false - HTMLElement: false - HTMLEmbedElement: false - HTMLFieldSetElement: false - HTMLFontElement: false - HTMLFormControlsCollection: false - HTMLFormElement: false - HTMLFrameElement: false - HTMLFrameSetElement: false - HTMLHeadElement: false - HTMLHeadingElement: false - HTMLHRElement: false - HTMLHtmlElement: false - HTMLIFrameElement: false - HTMLImageElement: false - HTMLInputElement: false - HTMLIsIndexElement: false - HTMLKeygenElement: false - HTMLLabelElement: false - HTMLLayerElement: false - HTMLLegendElement: false - HTMLLIElement: false - HTMLLinkElement: false - HTMLMapElement: false - HTMLMarqueeElement: false - HTMLMediaElement: false - HTMLMenuElement: false - HTMLMetaElement: false - HTMLMeterElement: false - HTMLModElement: false - HTMLObjectElement: false - HTMLOListElement: false - HTMLOptGroupElement: false - HTMLOptionElement: false - HTMLOptionsCollection: false - HTMLOutputElement: false - HTMLParagraphElement: false - HTMLParamElement: false - HTMLPictureElement: false - HTMLPreElement: false - HTMLProgressElement: false - HTMLQuoteElement: false - HTMLScriptElement: false - HTMLSelectElement: false - HTMLShadowElement: false - HTMLSourceElement: false - HTMLSpanElement: false - HTMLStyleElement: false - HTMLTableCaptionElement: false - HTMLTableCellElement: false - HTMLTableColElement: false - HTMLTableElement: false - HTMLTableRowElement: false - HTMLTableSectionElement: false - HTMLTemplateElement: false - HTMLTextAreaElement: false - HTMLTitleElement: false - HTMLTrackElement: false - HTMLUListElement: false - HTMLUnknownElement: false - HTMLVideoElement: false - IDBCursor: false - IDBCursorWithValue: false - IDBDatabase: false - IDBEnvironment: false - IDBFactory: false - IDBIndex: false - IDBKeyRange: false - IDBObjectStore: false - IDBOpenDBRequest: false - IDBRequest: false - IDBTransaction: false - IDBVersionChangeEvent: false - Image: false - ImageBitmap: false - ImageData: false - indexedDB: false - innerHeight: false - innerWidth: false - InputEvent: false - InputMethodContext: false - Intl: false - KeyboardEvent: false - KeyframeEffect: false - KeyframeEffectReadOnly: false - length: false - localStorage: false - location: false - Location: false - locationbar: false - matchMedia: false - MediaElementAudioSourceNode: false - MediaEncryptedEvent: false - MediaError: false - MediaKeyError: false - MediaKeyEvent: false - MediaKeyMessageEvent: false - MediaKeys: false - MediaKeySession: false - MediaKeyStatusMap: false - MediaKeySystemAccess: false - MediaList: false - MediaQueryList: false - MediaQueryListEvent: false - MediaSource: false - MediaStreamAudioDestinationNode: false - MediaStreamAudioSourceNode: false - MediaStreamEvent: false - MediaStreamTrack: false - menubar: false - MessageChannel: false - MessageEvent: false - MessagePort: false - MIDIAccess: false - MIDIConnectionEvent: false - MIDIInput: false - MIDIInputMap: false - MIDIMessageEvent: false - MIDIOutput: false - MIDIOutputMap: false - MIDIPort: false - MimeType: false - MimeTypeArray: false - MouseEvent: false - moveBy: false - moveTo: false - MutationEvent: false - MutationObserver: false - MutationRecord: false - name: false - NamedNodeMap: false - navigator: false - Navigator: false - Node: false - NodeFilter: false - NodeIterator: false - NodeList: false - Notification: false - OfflineAudioCompletionEvent: false - OfflineAudioContext: false - offscreenBuffering: false - onbeforeunload: true - onblur: true - onerror: true - onfocus: true - onload: true - onresize: true - onunload: true - open: false - openDatabase: false - opener: false - opera: false - Option: false - OscillatorNode: false - outerHeight: false - outerWidth: false - PageTransitionEvent: false - pageXOffset: false - pageYOffset: false - parent: false - Path2D: false - performance: false - Performance: false - PerformanceEntry: false - PerformanceMark: false - PerformanceMeasure: false - PerformanceNavigation: false - PerformanceResourceTiming: false - PerformanceTiming: false - PeriodicWave: false - Permissions: false - PermissionStatus: false - personalbar: false - Plugin: false - PluginArray: false - PopStateEvent: false - postMessage: false - print: false - ProcessingInstruction: false - ProgressEvent: false - prompt: false - PushManager: false - PushSubscription: false - RadioNodeList: false - Range: false - ReadableByteStream: false - ReadableStream: false - removeEventListener: false - Request: false - requestAnimationFrame: false - resizeBy: false - resizeTo: false - Response: false - RTCIceCandidate: false - RTCSessionDescription: false - screen: false - Screen: false - screenLeft: false - ScreenOrientation: false - screenTop: false - screenX: false - screenY: false - ScriptProcessorNode: false - scroll: false - scrollbars: false - scrollBy: false - scrollTo: false - scrollX: false - scrollY: false - SecurityPolicyViolationEvent: false - Selection: false - self: false - ServiceWorker: false - ServiceWorkerContainer: false - ServiceWorkerRegistration: false - sessionStorage: false - setInterval: false - setTimeout: false - ShadowRoot: false - SharedKeyframeList: false - SharedWorker: false - showModalDialog: false - speechSynthesis: false - SpeechSynthesisEvent: false - SpeechSynthesisUtterance: false - status: false - statusbar: false - stop: false - Storage: false - StorageEvent: false - styleMedia: false - StyleSheet: false - StyleSheetList: false - SubtleCrypto: false - SVGAElement: false - SVGAltGlyphDefElement: false - SVGAltGlyphElement: false - SVGAltGlyphItemElement: false - SVGAngle: false - SVGAnimateColorElement: false - SVGAnimatedAngle: false - SVGAnimatedBoolean: false - SVGAnimatedEnumeration: false - SVGAnimatedInteger: false - SVGAnimatedLength: false - SVGAnimatedLengthList: false - SVGAnimatedNumber: false - SVGAnimatedNumberList: false - SVGAnimatedPathData: false - SVGAnimatedPoints: false - SVGAnimatedPreserveAspectRatio: false - SVGAnimatedRect: false - SVGAnimatedString: false - SVGAnimatedTransformList: false - SVGAnimateElement: false - SVGAnimateMotionElement: false - SVGAnimateTransformElement: false - SVGAnimationElement: false - SVGCircleElement: false - SVGClipPathElement: false - SVGColor: false - SVGColorProfileElement: false - SVGColorProfileRule: false - SVGComponentTransferFunctionElement: false - SVGCSSRule: false - SVGCursorElement: false - SVGDefsElement: false - SVGDescElement: false - SVGDiscardElement: false - SVGDocument: false - SVGElement: false - SVGElementInstance: false - SVGElementInstanceList: false - SVGEllipseElement: false - SVGEvent: false - SVGExternalResourcesRequired: false - SVGFEBlendElement: false - SVGFEColorMatrixElement: false - SVGFEComponentTransferElement: false - SVGFECompositeElement: false - SVGFEConvolveMatrixElement: false - SVGFEDiffuseLightingElement: false - SVGFEDisplacementMapElement: false - SVGFEDistantLightElement: false - SVGFEDropShadowElement: false - SVGFEFloodElement: false - SVGFEFuncAElement: false - SVGFEFuncBElement: false - SVGFEFuncGElement: false - SVGFEFuncRElement: false - SVGFEGaussianBlurElement: false - SVGFEImageElement: false - SVGFEMergeElement: false - SVGFEMergeNodeElement: false - SVGFEMorphologyElement: false - SVGFEOffsetElement: false - SVGFEPointLightElement: false - SVGFESpecularLightingElement: false - SVGFESpotLightElement: false - SVGFETileElement: false - SVGFETurbulenceElement: false - SVGFilterElement: false - SVGFilterPrimitiveStandardAttributes: false - SVGFitToViewBox: false - SVGFontElement: false - SVGFontFaceElement: false - SVGFontFaceFormatElement: false - SVGFontFaceNameElement: false - SVGFontFaceSrcElement: false - SVGFontFaceUriElement: false - SVGForeignObjectElement: false - SVGGElement: false - SVGGeometryElement: false - SVGGlyphElement: false - SVGGlyphRefElement: false - SVGGradientElement: false - SVGGraphicsElement: false - SVGHKernElement: false - SVGICCColor: false - SVGImageElement: false - SVGLangSpace: false - SVGLength: false - SVGLengthList: false - SVGLinearGradientElement: false - SVGLineElement: false - SVGLocatable: false - SVGMarkerElement: false - SVGMaskElement: false - SVGMatrix: false - SVGMetadataElement: false - SVGMissingGlyphElement: false - SVGMPathElement: false - SVGNumber: false - SVGNumberList: false - SVGPaint: false - SVGPathElement: false - SVGPathSeg: false - SVGPathSegArcAbs: false - SVGPathSegArcRel: false - SVGPathSegClosePath: false - SVGPathSegCurvetoCubicAbs: false - SVGPathSegCurvetoCubicRel: false - SVGPathSegCurvetoCubicSmoothAbs: false - SVGPathSegCurvetoCubicSmoothRel: false - SVGPathSegCurvetoQuadraticAbs: false - SVGPathSegCurvetoQuadraticRel: false - SVGPathSegCurvetoQuadraticSmoothAbs: false - SVGPathSegCurvetoQuadraticSmoothRel: false - SVGPathSegLinetoAbs: false - SVGPathSegLinetoHorizontalAbs: false - SVGPathSegLinetoHorizontalRel: false - SVGPathSegLinetoRel: false - SVGPathSegLinetoVerticalAbs: false - SVGPathSegLinetoVerticalRel: false - SVGPathSegList: false - SVGPathSegMovetoAbs: false - SVGPathSegMovetoRel: false - SVGPatternElement: false - SVGPoint: false - SVGPointList: false - SVGPolygonElement: false - SVGPolylineElement: false - SVGPreserveAspectRatio: false - SVGRadialGradientElement: false - SVGRect: false - SVGRectElement: false - SVGRenderingIntent: false - SVGScriptElement: false - SVGSetElement: false - SVGStopElement: false - SVGStringList: false - SVGStylable: false - SVGStyleElement: false - SVGSVGElement: false - SVGSwitchElement: false - SVGSymbolElement: false - SVGTests: false - SVGTextContentElement: false - SVGTextElement: false - SVGTextPathElement: false - SVGTextPositioningElement: false - SVGTitleElement: false - SVGTransform: false - SVGTransformable: false - SVGTransformList: false - SVGTRefElement: false - SVGTSpanElement: false - SVGUnitTypes: false - SVGURIReference: false - SVGUseElement: false - SVGViewElement: false - SVGViewSpec: false - SVGVKernElement: false - SVGZoomAndPan: false - SVGZoomEvent: false - Text: false - TextDecoder: false - TextEncoder: false - TextEvent: false - TextMetrics: false - TextTrack: false - TextTrackCue: false - TextTrackCueList: false - TextTrackList: false - TimeEvent: false - TimeRanges: false - toolbar: false - top: false - Touch: false - TouchEvent: false - TouchList: false - TrackEvent: false - TransitionEvent: false - TreeWalker: false - UIEvent: false - URL: false - URLSearchParams: false - ValidityState: false - VTTCue: false - WaveShaperNode: false - WebGLActiveInfo: false - WebGLBuffer: false - WebGLContextEvent: false - WebGLFramebuffer: false - WebGLProgram: false - WebGLRenderbuffer: false - WebGLRenderingContext: false - WebGLShader: false - WebGLShaderPrecisionFormat: false - WebGLTexture: false - WebGLUniformLocation: false - WebSocket: false - WheelEvent: false - window: false - Window: false - Worker: false - XDomainRequest: false - XMLDocument: false - XMLHttpRequest: false - XMLHttpRequestEventTarget: false - XMLHttpRequestProgressEvent: false - XMLHttpRequestUpload: false - XMLSerializer: false - XPathEvaluator: false - XPathException: false - XPathExpression: false - XPathNamespace: false - XPathNSResolver: false - XPathResult: false - XSLTProcessor: false - Array: false - ArrayBuffer: false - Boolean: false - constructor: false - DataView: false - Date: false - decodeURI: false - decodeURIComponent: false - encodeURI: false - encodeURIComponent: false - Error: false - escape: false - eval: false - EvalError: false - Float32Array: false - Float64Array: false - Function: false - hasOwnProperty: false - Infinity: false - Int16Array: false - Int32Array: false - Int8Array: false - isFinite: false - isNaN: false - isPrototypeOf: false - JSON: false - Map: false - Math: false - NaN: false - Number: false - Object: false - parseFloat: false - parseInt: false - Promise: false - propertyIsEnumerable: false - Proxy: false - RangeError: false - ReferenceError: false - Reflect: false - RegExp: false - Set: false - String: false - Symbol: false - SyntaxError: false - System: false - toLocaleString: false - toString: false - TypeError: false - Uint16Array: false - Uint32Array: false - Uint8Array: false - Uint8ClampedArray: false - undefined: false - unescape: false - URIError: false - valueOf: false - WeakMap: false - WeakSet: false - $: false - jQuery: false - __dirname: false - __filename: false - arguments: false - Buffer: false - clearImmediate: false - exports: true - GLOBAL: false - global: false - module: false - process: false - root: false - setImmediate: false - -# http://eslint.org/docs/rules/ -rules: - comma-dangle: - - 2 - - never - no-cond-assign: 2 - no-console: 0 - no-constant-condition: 2 - no-control-regex: 2 - no-debugger: 2 - no-dupe-args: 2 - no-dupe-keys: 2 - no-duplicate-case: 2 - no-empty: 2 - no-empty-character-class: 2 - no-ex-assign: 2 - no-extra-boolean-cast: 2 - no-extra-parens: 0 - no-extra-semi: 2 - no-func-assign: 2 - no-inner-declarations: - - 2 - - functions - no-invalid-regexp: 2 - no-irregular-whitespace: 2 - no-negated-in-lhs: 2 - no-obj-calls: 2 - no-regex-spaces: 2 - no-sparse-arrays: 2 - no-unexpected-multiline: 2 - no-unreachable: 2 - use-isnan: 2 - valid-jsdoc: 0 - valid-typeof: 2 - accessor-pairs: 2 - block-scoped-var: 0 - complexity: - - 2 - - 6 - consistent-return: 0 - curly: 0 - default-case: 0 - dot-location: 0 - dot-notation: 0 - eqeqeq: 2 - guard-for-in: 2 - no-alert: 2 - no-caller: 2 - no-case-declarations: 2 - no-div-regex: 2 - no-else-return: 0 - no-empty-label: 2 - no-empty-pattern: 2 - no-eq-null: 2 - no-eval: 2 - no-extend-native: 2 - no-extra-bind: 2 - no-fallthrough: 2 - no-floating-decimal: 0 - no-implicit-coercion: 0 - no-implied-eval: 2 - no-invalid-this: 0 - no-iterator: 2 - no-labels: 0 - no-lone-blocks: 2 - no-loop-func: 2 - no-magic-number: 0 - no-multi-spaces: 0 - no-multi-str: 0 - no-native-reassign: 2 - no-new-func: 2 - no-new-wrappers: 2 - no-new: 2 - no-octal-escape: 2 - no-octal: 2 - no-proto: 2 - no-redeclare: 2 - no-return-assign: 2 - no-script-url: 2 - no-self-compare: 2 - no-sequences: 0 - no-throw-literal: 0 - no-unused-expressions: 2 - no-useless-call: 2 - no-useless-concat: 2 - no-void: 2 - no-warning-comments: 0 - no-with: 2 - radix: 2 - vars-on-top: 0 - wrap-iife: 2 - yoda: 0 - strict: 0 - init-declarations: 0 - no-catch-shadow: 2 - no-delete-var: 2 - no-label-var: 2 - no-shadow-restricted-names: 2 - no-shadow: 0 - no-undef-init: 2 - no-undef: 0 - no-undefined: 0 - no-unused-vars: 0 - no-use-before-define: 0 - callback-return: 2 - global-require: 2 - handle-callback-err: 2 - no-mixed-requires: 0 - no-new-require: 0 - no-path-concat: 2 - no-process-exit: 2 - no-restricted-modules: 0 - no-sync: 0 - array-bracket-spacing: 0 - block-spacing: 0 - brace-style: 0 - camelcase: 0 - comma-spacing: 0 - comma-style: 0 - computed-property-spacing: 0 - consistent-this: 0 - eol-last: 0 - func-names: 0 - func-style: 0 - id-length: 0 - id-match: 0 - indent: 0 - jsx-quotes: 0 - key-spacing: 0 - linebreak-style: 0 - lines-around-comment: 0 - max-depth: 0 - max-len: 0 - max-nested-callbacks: 0 - max-params: 0 - max-statements: - - 2 - - 30 - new-cap: 0 - new-parens: 0 - newline-after-var: 0 - no-array-constructor: 0 - no-bitwise: 0 - no-continue: 0 - no-inline-comments: 0 - no-lonely-if: 0 - no-mixed-spaces-and-tabs: 0 - no-multiple-empty-lines: 0 - no-negated-condition: 0 - no-nested-ternary: 0 - no-new-object: 0 - no-plusplus: 0 - no-restricted-syntax: 0 - no-spaced-func: 0 - no-ternary: 0 - no-trailing-spaces: 0 - no-underscore-dangle: 0 - no-unneeded-ternary: 0 - object-curly-spacing: 0 - one-var: 0 - operator-assignment: 0 - operator-linebreak: 0 - padded-blocks: 0 - quote-props: 0 - quotes: 0 - require-jsdoc: 0 - semi-spacing: 0 - semi: 0 - sort-vars: 0 - space-after-keywords: 0 - space-before-blocks: 0 - space-before-function-paren: 0 - space-before-keywords: 0 - space-in-parens: 0 - space-infix-ops: 0 - space-return-throw-case: 0 - space-unary-ops: 0 - spaced-comment: 0 - wrap-regex: 0 - arrow-body-style: 0 - arrow-parens: 0 - arrow-spacing: 0 - constructor-super: 0 - generator-star-spacing: 0 - no-arrow-condition: 0 - no-class-assign: 0 - no-const-assign: 0 - no-dupe-class-members: 0 - no-this-before-super: 0 - no-var: 0 - object-shorthand: 0 - prefer-arrow-callback: 0 - prefer-const: 0 - prefer-reflect: 0 - prefer-spread: 0 - prefer-template: 0 - require-yield: 0 diff --git a/String.format.js b/String.format.js index 7053ec65..d0ec44ef 100644 --- a/String.format.js +++ b/String.format.js @@ -1,4 +1,3 @@ -/* eslint-disable no-extend-native */ // add string format method if (!String.prototype.format) { String.prototype.format = function() { diff --git a/l10n/de.json b/l10n/de.json index 05b823a6..33a5ec5c 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -3,7 +3,24 @@ "NOISE": "Lautstärke", "HUMIDITY": "Feuchtigkeit", "PRESSURE": "Luftdruck", + "PRESSURE_TREND": "Luftdruck (Tendenz)", "TEMPERATURE": "Temperatur", + "TEMP_TREND": "Temperatur (Tendenz)", "RAIN": "Niederschlag", - "WIND": "Wind" + "SUM_RAIN_1": "Niederschlag (1h)", + "SUM_RAIN_24": "Niederschlag (24h)", + "WINDSTRENGTH": "Wind", + "WINDANGLE": "Wind (Richtung)", + "GUSTSTRENGTH": "Böen", + "GUSTANGLE": "Böen (Richtung)", + + "UP": "steigend", + "STABLE": "stabil", + "DOWN": "fallend", + "UNDEFINED": "nicht verfügbar", + + "WIFI": "WiFi", + "RADIO": "Funksignal", + "BATTERY": "Batterie", + "LAST_MESSAGE": "letzter Kontakt" } diff --git a/l10n/en.json b/l10n/en.json index 3cb83103..6a408c7e 100644 --- a/l10n/en.json +++ b/l10n/en.json @@ -3,7 +3,24 @@ "NOISE": "Noise", "HUMIDITY": "Humidity", "PRESSURE": "Pressure", + "PRESSURE_TREND": "Pressure (trend)", "TEMPERATURE": "Temperature", + "TEMP_TREND": "Temperature (trend)", "RAIN": "Rain", - "WIND": "Wind" + "SUM_RAIN_1": "Rain (1h)", + "SUM_RAIN_24": "Rain (24h)", + "WINDSTRENGTH": "Wind", + "WINDANGLE": "Wind (direction)", + "GUSTSTRENGTH": "Gusts", + "GUSTANGLE": "Gusts (direction)", + + "UP": "rising", + "STABLE": "stable", + "DOWN": "falling", + "UNDEFINED": "not available", + + "WIFI": "WiFi", + "RADIO": "Radio signal", + "BATTERY": "Battery", + "LAST_MESSAGE": "last contact" } diff --git a/l10n/fr.json b/l10n/fr.json index cb52af71..da1954a9 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -3,7 +3,24 @@ "NOISE": "Sonomètre", "HUMIDITY": "Humidité", "PRESSURE": "Pression", + "PRESSURE_TREND": "Pression", "TEMPERATURE": "Température", + "TEMP_TREND": "Température", "RAIN": "Pluie", - "WIND": "Vent" + "SUM_RAIN_1": "Pluie (1h)", + "SUM_RAIN_24": "Pluie (24h)", + "WINDSTRENGTH": "Vent", + "WINDANGLE": "Vent", + "GUSTSTRENGTH": "", + "GUSTANGLE": "", + + "UP": "", + "STABLE": "", + "DOWN": "", + "UNDEFINED": "", + + "WIFI": "", + "RADIO": "", + "BATTERY": "", + "LAST_MESSAGE": "" } diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less new file mode 100644 index 00000000..ee66269a --- /dev/null +++ b/netatmo.bubbles.less @@ -0,0 +1,64 @@ +@good: limegreen; +@average: orange; +@bad: red; + +.xxlarge{ + font-size: 95px; + line-height: 95px; + letter-spacing: -3px; +} + +.netatmo.bubbles{ + .module{ + .name{ + text-align: left; + } + .primary, .secondary, .data{ + text-align: left; + } + .primary{} + .secondary{ + text-align: center; + width: 5em; + + .CO2{ + .visual{ + width: .1em; + height: .1em; + margin: 1.5em auto; + border-radius: 1em; + box-shadow: 0px 0px .9em 1em; + } + .good{ + color: @good; + background-color: @good; + } + .average{ + color: @average; + background-color: @average; + } + .bad{ + color: @bad; + background-color: @bad; + } + } + .WindAngle{ + .visual{ + //margin: .4em; + display: inline-block; + } + } + } + .data{ + width: 8em; + } + } +} + +.flash { + animation: flasher 1s linear infinite; +} + +@keyframes flasher { + 50% { opacity: 0; } +} diff --git a/netatmo.classic.less b/netatmo.classic.less new file mode 100644 index 00000000..e514d74b --- /dev/null +++ b/netatmo.classic.less @@ -0,0 +1,23 @@ +.netatmo.classic{ + .module{ + display: inline-block; + } + + .module{ + overflow: hidden; + margin: .125em .25em; + border-radius: .25em; + border: 1px solid @borderColor; + + .name{ + color: @dark; + text-align: center; + padding: .125em .25em; + background: @borderColor; + } + + .data{ + padding: .125em .25em; + } + } +} diff --git a/netatmo.css b/netatmo.css index e4ad017a..8664b076 100644 --- a/netatmo.css +++ b/netatmo.css @@ -1,2 +1,2 @@ -.netatmo{display:inline-block}.netatmo .module,.netatmo .loading,.netatmo .loadTimer,.netatmo .updated{display:inline-block}.netatmo .module{overflow:hidden;margin:.125em .25em;border-radius:.25em;border:1px solid #fff}.netatmo .module .name{color:#000;text-align:center;padding:.125em .25em;background:#fff}.netatmo .module .data{padding:.125em .25em}.netatmo svg.loading{width:.6em;height:.6em}.netatmo svg.loading circle{fill:none;stroke-linecap:round;cx:50;cy:50;r:40}.netatmo svg.loading circle.inner{stroke:#fff;stroke-width:6}.netatmo svg.loading circle.outer{stroke:#aaa;stroke-width:10}.netatmo svg.loadTimer{width:.5em;height:.5em;margin:.2em 0;vertical-align:middle}.netatmo svg.loadTimer .loader{fill:#000}.netatmo svg.loadTimer .border{fill:#aaa}.netatmo .updated{margin:.2em 0;padding:0 .5em;vertical-align:middle} +.netatmo{display:inline-block}.netatmo .loading,.netatmo .loadTimer,.netatmo .updated{display:inline-block}.netatmo svg.loading{width:.6em;height:.6em}.netatmo svg.loading circle{fill:none;stroke-linecap:round;cx:50;cy:50;r:40}.netatmo svg.loading circle.inner{stroke:#fff;stroke-width:6}.netatmo svg.loading circle.outer{stroke:#aaa;stroke-width:10}.netatmo svg.loadTimer{width:.5em;height:.5em;margin:.2em 0;vertical-align:middle}.netatmo svg.loadTimer .loader{fill:#000}.netatmo svg.loadTimer .border{fill:#aaa}.netatmo .updated{margin:.2em 0;padding:0 .5em;vertical-align:middle}.netatmo.classic .module{display:inline-block}.netatmo.classic .module{overflow:hidden;margin:.125em .25em;border-radius:.25em;border:1px solid #fff}.netatmo.classic .module .name{color:#000;text-align:center;padding:.125em .25em;background:#fff}.netatmo.classic .module .data{padding:.125em .25em}.xxlarge{font-size:95px;line-height:95px;letter-spacing:-3px}.netatmo.bubbles .module .name{text-align:left}.netatmo.bubbles .module .primary,.netatmo.bubbles .module .secondary,.netatmo.bubbles .module .data{text-align:left}.netatmo.bubbles .module .secondary{text-align:center;width:5em}.netatmo.bubbles .module .secondary .CO2 .visual{width:.1em;height:.1em;margin:1.5em auto;border-radius:1em;box-shadow:0 0 .9em 1em}.netatmo.bubbles .module .secondary .CO2 .good{color:#32cd32;background-color:#32cd32}.netatmo.bubbles .module .secondary .CO2 .average{color:#ffa500;background-color:#ffa500}.netatmo.bubbles .module .secondary .CO2 .bad{color:red;background-color:red}.netatmo.bubbles .module .secondary .WindAngle .visual{display:inline-block}.netatmo.bubbles .module .data{width:8em}.flash{animation:flasher 1s linear infinite}@keyframes flasher{50%{ opacity:0}} /* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ diff --git a/netatmo.js b/netatmo.js index 6c3a58e3..93320d75 100755 --- a/netatmo.js +++ b/netatmo.js @@ -4,15 +4,21 @@ * By Christopher Fenner http://github.com/CFenner * MIT Licensed. */ - /* eslint-disable max-len */ /* global $, Q, moment, Module, Log */ Module.register('netatmo', { - // default config + // default config, defaults: { refreshToken: null, updateInterval: 3, // every 3 minutes, refresh interval on netatmo is 10 minutes animationSpeed: 1000, + design: 'classic', //bubbles hideLoadTimer: false, + lastMessageThreshold: 600, // in seconds (10 minutes) + showLastMessage: true, + showBattery: true, + showRadio: true, + showWiFi: true, + showTrend: true, api: { base: 'https://api.netatmo.com/', authEndpoint: 'oauth2/token', @@ -75,7 +81,6 @@ Module.register('netatmo', { }, load: { token: function() { - /* eslint-disable new-cap */ return Q($.ajax({ type: 'POST', url: this.config.api.base + this.config.api.authEndpoint, @@ -84,10 +89,8 @@ Module.register('netatmo', { this.config.clientId, this.config.clientSecret) })); - /* eslint-enable new-cap */ }, data: function(data) { - /* eslint-disable new-cap */ // Log.info(this.name + " token loaded "+data.access_token); this.config.refreshToken = data.refresh_token; // call for station data @@ -95,80 +98,20 @@ Module.register('netatmo', { url: this.config.api.base + this.config.api.dataEndpoint, data: this.config.api.dataPayload.format(data.access_token) })); - /* eslint-enable new-cap */ } }, renderAll: function(data) { - /* eslint-disable new-cap */ - var sContent = ''; var device = data.body.devices[0]; this.lastUpdate = device.dashboard_data.time_utc; - // Log.info(this.name + " data loaded, updated "+moment(new Date(1000*device.dashboard_data.time_utc)).fromNow()); // render modules - sContent += this.renderModules(device); - // place content - this.dom = sContent; + this.dom = this.getDesign(this.config.design).render(device); this.updateDom(this.config.animationSpeed); return Q({}); - /* eslint-enable new-cap */ - }, - renderModules: function(device) { - var sResult = ''; - var aOrderedModuleList = this.config.moduleOrder && this.config.moduleOrder.length > 0 ? - this.config.moduleOrder : - null; - - if (aOrderedModuleList) { - for (var moduleName of aOrderedModuleList) { - if (device.module_name === moduleName) { - sResult += this.renderModule(device); - } else { - for (var module of device.modules) { - if (module.module_name === moduleName) { - sResult += this.renderModule(module); - break; - } - } - } - } - } else { - // render station data (main station) - sResult += this.renderModule(device); - // render module data (connected modules) - for (var cnt = 0; cnt < device.modules.length; cnt++) { - sResult += this.renderModule(device.modules[cnt]); - } - } - return this.html.moduleWrapper.format(sResult); - }, - renderModule: function(oModule) { - return this.html.module.format( - this.renderSensorData(oModule), - oModule.module_name - ); - }, - renderSensorData: function(oModule) { - var sResult = ''; - var aDataTypeList = this.config.dataOrder && this.config.dataOrder.length > 0 ? - this.config.dataOrder : - oModule.data_type; - for (var dataType of aDataTypeList) { - if ($.inArray(dataType, oModule.data_type) > -1) { - sResult += this.renderData( - this.formatter.clazz(dataType), - dataType, - oModule.dashboard_data[dataType]); - } - } - return this.html.dataWrapper.format(sResult); - }, - renderData: function(clazz, dataType, value) { - return this.html.data.format( - this.translate(dataType.toUpperCase()), - this.formatter.value(dataType, value)); }, renderError: function(reason) { + /* eslint-disable no-console */ console.log("error " + reason); + /* eslint-enable no-console */ // enable display of error messages /* $(netatmo.location).updateWithText( @@ -179,25 +122,58 @@ Module.register('netatmo', { }, formatter: { value: function(dataType, value) { + if(!value) + return value; switch (dataType) { case 'CO2': return value.toFixed(0) + ' ppm'; case 'Noise': return value.toFixed(0) + ' dB'; case 'Humidity': + case 'Battery': + case 'WiFi': + case 'Radio': return value.toFixed(0) + '%'; case 'Pressure': return value.toFixed(0) + ' mbar'; case 'Temperature': return value.toFixed(1) + '°'; case 'Rain': - return value.toFixed(1) + 'mm'; - case 'Wind': - return value; + case 'sum_rain_24': + case 'sum_rain_1': + return value.toFixed(1) + ' mm/h'; + case 'WindStrength': + case 'GustStrength': + return value.toFixed(0) + ' m/s'; + case 'WindAngle': + case 'GustAngle': + return this.direction(value) + ' | ' + value + '°'; default: return value; } }, + direction: function(value){ + if(value < 11.25)return 'N'; + if(value < 33.75) return 'NNE'; + if(value < 56.25) return 'NE'; + if(value < 78.75) return 'ENE'; + if(value < 101.25) return 'E'; + if(value < 123.75) return 'ESE'; + if(value < 146.25) return 'SE'; + if(value < 168.75) return 'SSE'; + if(value < 191.25) return 'S'; + if(value < 213.75) return 'SSW'; + if(value < 236.25) return 'SW'; + if(value < 258.75) return 'WSW'; + if(value < 281.25) return 'W'; + if(value < 303.75) return 'WNW'; + if(value < 326.25) return 'NW'; + if(value < 348.75) return 'NNW'; + return 'N'; + }, + rain: function(){ + return ''; + }, clazz: function(dataType) { switch (dataType) { case 'CO2': @@ -219,21 +195,312 @@ Module.register('netatmo', { } } }, - html: { - moduleWrapper: '
{0}
', - module: '
{0}
{1}
', - dataWrapper: '{0}
', - data: '{0}{1}', - loadTimer: '', - loader: - '' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - '', - update: '
{0}
' + getDesign: function(design){ + var that = this; + var formatter = this.formatter; + var translator = this.translate; + return { + classic: (function(formatter, translator, that){ + return { + render: function(device){ + var sResult = $('
').addClass('modules'); + var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? + that.config.moduleOrder : + null; + if (aOrderedModuleList) { + for (var moduleName of aOrderedModuleList) { + if (device.module_name === moduleName) { + sResult.append(this.renderModule(device)); + } else { + for (var module of device.modules) { + if (module.module_name === moduleName) { + sResult.append(this.renderModule(module)); + break; + } + } + } + } + } else { + // render station data (main station) + sResult.append(this.renderModule(device)); + // render module data (connected modules) + for (var cnt = 0; cnt < device.modules.length; cnt++) { + sResult.append(this.renderModule(device.modules[cnt])); + } + } + return sResult; + }, + renderModule: function(oModule) { + return $('
').addClass('module').append( + $('
').addClass('data').append(this.renderSensorData(oModule)) + ).append( + $('
').addClass('name small').append(oModule.module_name) + ); + }, + renderSensorData: function(oModule) { + var sResult = $(''); + var aDataTypeList = that.config.dataOrder && that.config.dataOrder.length > 0 ? + that.config.dataOrder : + oModule.data_type; + for (var dataType of aDataTypeList) { + if ($.inArray(dataType, oModule.data_type) > -1) { + sResult.append( + this.renderData( + formatter.clazz(dataType), + dataType, + oModule.dashboard_data[dataType]) + ); + } + } + if(oModule.battery_percent){ + sResult.append(this.renderData(formatter.clazz(dataType), 'Battery', oModule.battery_percent)); + } + return sResult; + }, + renderData: function(clazz, dataType, value) { + return $('').append( + $(' +
').addClass('small').append( + translator.bind(that)(dataType.toUpperCase()) + ) + ).append( + $('').addClass('small value').append( + formatter.value(dataType, value) + ) + ); + } + }; + })(formatter, translator, that), + bubbles: (function(formatter, translator, that){ + return { + moduleType: { + MAIN: "NAMain", + INDOOR: "NAModule4", + OUTDOOR: "NAModule1", + RAIN: "NAModule3", + WIND: "NAModule2" + }, + render: function(device){ + var sResult = $('
').addClass('modules'); + var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? + that.config.moduleOrder : + null; + + if (aOrderedModuleList) { + for (var moduleName of aOrderedModuleList) { + if (device.module_name === moduleName) { + sResult.append(this.module(device)); + } else { + for (var module of device.modules) { + if (module.module_name === moduleName) { + sResult.append(this.module(module)); + break; + } + } + } + } + } else { + // render station data (main station) + sResult.append(this.module(device)); + // render module data (connected modules) + for (var cnt = 0; cnt < device.modules.length; cnt++) { + sResult.append(this.module(device.modules[cnt])); + } + } + return sResult; + }, + module: function(module){ + var result = $('
').addClass('module').append( + $('
').addClass('name small').append(module.module_name) + ).append( + $('
').append( + $('').addClass('').append( + $('').append( + this.primary(module) + ).append( + this.secondary(module) + ).append( + this.data(module) + ))) + ); + return result[0].outerHTML; + }, + primary: function(module){ + var result = $(' +
').addClass('primary'); + var type; + var value; + switch(module.type){ + case this.moduleType.MAIN: + case this.moduleType.INDOOR: + case this.moduleType.OUTDOOR: + type = 'Temperature'; + value = module.dashboard_data[type]; + $('
').addClass(type).append( + $('
').addClass('large light bright').append(formatter.value(type, value)) + ).appendTo(result); + break; + case this.moduleType.WIND: + type = 'WindStrength'; + value = module.dashboard_data[type]; + $('
').addClass(type).append( + $('
').addClass('large light bright').append(value) + ).append( + $('
').addClass('xsmall').append('m/s') + ).appendTo(result); + break; + case this.moduleType.RAIN: + type = 'Rain'; + value = module.dashboard_data[type]; + $('
').addClass(type).append( + $('
').addClass('large light bright').append(value) + ).append( + $('
').addClass('xsmall').append('mm/h') + ).appendTo(result); + break; + default: + } + return result; + }, + secondary: function(module){ + var result = $('
').addClass('secondary'); + switch(module.type){ + case this.moduleType.MAIN: + case this.moduleType.INDOOR: + var type = 'CO2'; + var value = module.dashboard_data[type]; + var status = value > 1600?'bad':value > 800?'average':'good'; + + $('
').addClass(type).append( + $('
').addClass('visual').addClass(status) + ).append( + $('
').addClass('small value').append(formatter.value(type, value)) + ).appendTo(result); + break; + case this.moduleType.OUTDOOR: + break; + case this.moduleType.WIND: + type = 'WindAngle'; + value = module.dashboard_data[type]; + + $('
').addClass(type).append( + $('
').addClass('visual xlarge wi wi-direction-up').css('transform', 'rotate(' + value + 'deg)') + ).append( + $('
').addClass('small value').append(formatter.value(type, value)) + ).appendTo(result); + break; + case this.moduleType.RAIN: + break; + default: + break; + } + return result; + }, + data: function(module){ + var result = $('
').addClass('data'); + switch(module.type){ + case this.moduleType.MAIN: + this.addTemperatureTrend(result, module); + this.addHumidity(result, module); + this.addPressure(result, module); + this.addPressureTrend(result, module); + this.addNoise(result, module); + this.addWiFi(result, module); + //result += this.addData('max_temp', module.dashboard_data['max_temp']); + //result += this.addData('min_temp', module.dashboard_data['min_temp']); + break; + case this.moduleType.INDOOR: + this.addTemperatureTrend(result, module); + this.addHumidity(result, module); + this.addBattery(result, module); + this.addRadio(result, module); + this.addLastSeen(result, module); + break; + case this.moduleType.OUTDOOR: + this.addTemperatureTrend(result, module); + this.addHumidity(result, module); + this.addBattery(result, module); + this.addRadio(result, module); + this.addLastSeen(result, module); + break; + case this.moduleType.WIND: + this.addData(result, 'GustStrength', module.dashboard_data['GustStrength']); + this.addData(result, 'GustAngle', module.dashboard_data['GustAngle']); + this.addBattery(result, module); + this.addRadio(result, module); + this.addLastSeen(result, module); + break; + case this.moduleType.RAIN: + this.addData(result, 'sum_rain_1', module.dashboard_data['sum_rain_1']); + this.addData(result, 'sum_rain_24', module.dashboard_data['sum_rain_24']); + this.addBattery(result, module); + this.addRadio(result, module); + this.addLastSeen(result, module); + break; + default: + break; + } + return result; + }, + addTemperatureTrend: function(parent, module){ + var value = module.dashboard_data['temp_trend']; + if(!value) + value = 'UNDEFINED' + if(that.config.showTrend) + this.addData(parent, 'temp_trend', translator.bind(that)(value.toUpperCase())); + }, + addPressure: function(parent, module){ + return this.addData(parent, 'Pressure', module.dashboard_data['Pressure']); + }, + addPressureTrend: function(parent, module){ + var value = module.dashboard_data['pressure_trend']; + if(!value) + value = 'UNDEFINED' + if(that.config.showTrend) + this.addData(parent, 'pressure_trend', translator.bind(that)(value.toUpperCase())); + }, + addHumidity: function(parent, module){ + return this.addData(parent, 'Humidity', module.dashboard_data['Humidity']); + }, + addNoise: function(parent, module){ + return this.addData(parent, 'Noise', module.dashboard_data['Noise']); + }, + addBattery: function(parent, module){ + if(that.config.showBattery) + this.addData(parent, 'Battery', module.battery_percent); + }, + addRadio: function(parent, module){ + if(that.config.showRadio) + this.addData(parent, 'Radio', module.rf_status); + }, + addWiFi: function(parent, module){ + if(that.config.showWiFi) + this.addData(parent, 'WiFi', module.wifi_status); + }, + addLastSeen: function(parent, module){ + var duration = Date.now() / 1000 - module.last_message; + if(that.config.showLastMessage && duration > that.config.lastMessageThreshold){ + $('
') + .addClass('small flash') + .append( + translator.bind(that)("LAST_MESSAGE") + + ': ' + + moment.unix(module.last_message).fromNow() + ) + .appendTo(parent); + } + }, + addData: function(parent, type, value){ + return $('
') + .addClass('small') + .append( + translator.bind(that)(type.toUpperCase()) + + ': ' + + formatter.value(type, value) + ) + .appendTo(parent); + } + }; + })(formatter, translator, that) + }[design] }, getScripts: function() { return [ @@ -256,13 +523,34 @@ Module.register('netatmo', { }; }, getDom: function() { - return $( - '
' + - (this.dom ? - this.dom + - this.html.update.format(moment(new Date(1000 * this.lastUpdate)).fromNow()) + - (this.config.hideLoadTimer ? '' : this.html.loadTimer) : - this.html.loader) + - '
')[0]; + var dom = $('
').addClass('netatmo').addClass(this.config.design); + if(this.dom){ + dom.append( + this.dom + ).append( + $('
') + .addClass('updated xsmall') + .append(moment.unix(this.lastUpdate).fromNow()) + ); + if(!this.config.hideLoadTimer){ + dom.append($( + '' + + ' ' + + ' ' + + '' + )); + } + }else{ + dom.append($( + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '' + )); + } + return dom[0]; } }); diff --git a/netatmo.less b/netatmo.less index 593d98d3..c6011622 100644 --- a/netatmo.less +++ b/netatmo.less @@ -6,31 +6,13 @@ .netatmo{ display: inline-block; - .module, .loading, .loadTimer, .updated{ + .loading, .loadTimer, .updated{ display: inline-block; } - - .module{ - overflow: hidden; - margin: .125em .25em; - border-radius: .25em; - border: 1px solid @borderColor; - - .name{ - color: @dark; - text-align: center; - padding: .125em .25em; - background: @borderColor; - } - - .data{ - padding: .125em .25em; - } - } svg.loading{ width: .6em; height: .6em; - + circle{ fill: none; stroke-linecap: round; @@ -61,3 +43,6 @@ vertical-align: middle; } } + +@import 'netatmo.classic'; +@import 'netatmo.bubbles'; diff --git a/package.json b/package.json index dfdea695..56dc3649 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,25 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { - "eslint": "^2.7.0", - "eslint-config-google": "^0.5.0" + "eslint": "^2.7.0" }, "eslintConfig": { - "extends": "google" + "extends": "eslint:recommended", + "env": { + "browser": true, + "es6": true, + "node": true + }, + "ecmaFeatures": { + "modules": true, + "jsx": true + }, + "parser": "espree", + "parserOptions": { + "ecmaVersion": 6, + "ecmaFeatures": { + "globalReturn": true + } + } } } From 77834df2de9709f65275d85716b58bc6c94218a3 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 9 May 2017 00:05:59 +0200 Subject: [PATCH 13/93] fixes #34 #35 --- netatmo.css | 2 +- netatmo.less | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/netatmo.css b/netatmo.css index 8664b076..39eff910 100644 --- a/netatmo.css +++ b/netatmo.css @@ -1,2 +1,2 @@ -.netatmo{display:inline-block}.netatmo .loading,.netatmo .loadTimer,.netatmo .updated{display:inline-block}.netatmo svg.loading{width:.6em;height:.6em}.netatmo svg.loading circle{fill:none;stroke-linecap:round;cx:50;cy:50;r:40}.netatmo svg.loading circle.inner{stroke:#fff;stroke-width:6}.netatmo svg.loading circle.outer{stroke:#aaa;stroke-width:10}.netatmo svg.loadTimer{width:.5em;height:.5em;margin:.2em 0;vertical-align:middle}.netatmo svg.loadTimer .loader{fill:#000}.netatmo svg.loadTimer .border{fill:#aaa}.netatmo .updated{margin:.2em 0;padding:0 .5em;vertical-align:middle}.netatmo.classic .module{display:inline-block}.netatmo.classic .module{overflow:hidden;margin:.125em .25em;border-radius:.25em;border:1px solid #fff}.netatmo.classic .module .name{color:#000;text-align:center;padding:.125em .25em;background:#fff}.netatmo.classic .module .data{padding:.125em .25em}.xxlarge{font-size:95px;line-height:95px;letter-spacing:-3px}.netatmo.bubbles .module .name{text-align:left}.netatmo.bubbles .module .primary,.netatmo.bubbles .module .secondary,.netatmo.bubbles .module .data{text-align:left}.netatmo.bubbles .module .secondary{text-align:center;width:5em}.netatmo.bubbles .module .secondary .CO2 .visual{width:.1em;height:.1em;margin:1.5em auto;border-radius:1em;box-shadow:0 0 .9em 1em}.netatmo.bubbles .module .secondary .CO2 .good{color:#32cd32;background-color:#32cd32}.netatmo.bubbles .module .secondary .CO2 .average{color:#ffa500;background-color:#ffa500}.netatmo.bubbles .module .secondary .CO2 .bad{color:red;background-color:red}.netatmo.bubbles .module .secondary .WindAngle .visual{display:inline-block}.netatmo.bubbles .module .data{width:8em}.flash{animation:flasher 1s linear infinite}@keyframes flasher{50%{ opacity:0}} +.netatmo{display:inline-block}.netatmo .loading,.netatmo .loadTimer,.netatmo .updated{display:inline-block}.netatmo svg.loading{width:.6em;height:.6em}.netatmo svg.loading circle{fill:none;stroke-linecap:round;cx:50;cy:50;r:40}.netatmo svg.loading .inner{stroke:#fff;stroke-width:6}.netatmo svg.loading .outer{stroke:#aaa;stroke-width:10}.netatmo svg.loadTimer{width:.5em;height:.5em;margin:.2em 0;vertical-align:middle}.netatmo svg.loadTimer .loader{fill:#000}.netatmo svg.loadTimer .border{fill:#aaa}.netatmo .updated{margin:.2em 0;padding:0 .5em;vertical-align:middle}.netatmo.classic .module{display:inline-block}.netatmo.classic .module{overflow:hidden;margin:.125em .25em;border-radius:.25em;border:1px solid #fff}.netatmo.classic .module .name{color:#000;text-align:center;padding:.125em .25em;background:#fff}.netatmo.classic .module .data{padding:.125em .25em}.xxlarge{font-size:95px;line-height:95px;letter-spacing:-3px}.netatmo.bubbles .module .name{text-align:left}.netatmo.bubbles .module .primary,.netatmo.bubbles .module .secondary,.netatmo.bubbles .module .data{text-align:left}.netatmo.bubbles .module .secondary{text-align:center;width:5em}.netatmo.bubbles .module .secondary .CO2 .visual{width:.1em;height:.1em;margin:1.5em auto;border-radius:1em;box-shadow:0 0 .9em 1em}.netatmo.bubbles .module .secondary .CO2 .good{color:#32cd32;background-color:#32cd32}.netatmo.bubbles .module .secondary .CO2 .average{color:#ffa500;background-color:#ffa500}.netatmo.bubbles .module .secondary .CO2 .bad{color:red;background-color:red}.netatmo.bubbles .module .secondary .WindAngle .visual{display:inline-block}.netatmo.bubbles .module .data{width:8em}.flash{animation:flasher 1s linear infinite}@keyframes flasher{50%{ opacity:0}} /* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ diff --git a/netatmo.less b/netatmo.less index c6011622..85354eea 100644 --- a/netatmo.less +++ b/netatmo.less @@ -20,11 +20,11 @@ cy: 50; r: 40; } - circle.inner{ + .inner{ stroke: @light; stroke-width: 6; } - circle.outer{ + .outer{ stroke: @dimmed; stroke-width: 10; } From 4f7b014da559509c17eb682c4137eafeef98fc91 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 9 May 2017 00:40:36 +0200 Subject: [PATCH 14/93] ignore reports --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a6e4f9c9..3f1bc52a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Ignore all node modules. -/node_modules +node_modules +report From 0ecc0f6c7e4680f517e9e3a16ccb5b31608ce695 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 9 May 2017 00:40:43 +0200 Subject: [PATCH 15/93] add Gruntfile --- Gruntfile.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Gruntfile.js diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 00000000..70776cbb --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,46 @@ +module.exports = function(grunt) { + grunt.initConfig({ + eslint: { + src: ['.'], + options: { + format: 'junit' + } + }, + jsonlint: { + src: ['*.json'], + options: { + formatter: 'prose', + format: true, + indent: 2, + } + }, + yamllint: { + src: ['.travis.yml', '.codeclimate.yml'], + options: { + schema: 'DEFAULT_SAFE_SCHEMA' + } + }, + csslint: { + src: ['netatmo.css'], + options: { + formatters: [ + {id: 'lint-xml', dest: 'report/csslint.jslint.xml'}, + {id: 'csslint-xml', dest: 'report/csslint.xml'} + ], + import: 2 + } + } + }); + + //grunt.loadNpmTasks('grunt-contrib-less'); + //grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-csslint'); + //grunt.loadNpmTasks("grunt-contrib-eslint"); + grunt.loadNpmTasks("grunt-jsonlint"); + grunt.loadNpmTasks('grunt-yamllint'); + grunt.loadNpmTasks("gruntify-eslint"); + + + grunt.registerTask('default', ['test']); + grunt.registerTask('test', ['eslint', 'jsonlint', 'csslint', 'yamllint']); +}; From c5fc4fcddf94cea4fa8c2dbe7e3055dc50d5450e Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 9 May 2017 00:40:53 +0200 Subject: [PATCH 16/93] use Grunt --- package.json | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 56dc3649..593a67b8 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,7 @@ "description": "", "main": "netatmo.js", "scripts": { - "test": "npm run lint", - "lint": "eslint ." + "test": "grunt test" }, "repository": { "type": "git", @@ -18,7 +17,15 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { - "eslint": "^2.7.0" + "eslint": "^2.7.0", + "grunt": "^1.0.1", + "grunt-cli": "^1.2.0", + "grunt-contrib-csslint": "^2.0.0", + "grunt-contrib-eslint": "0.0.5", + "grunt-contrib-uglify": "^2.3.0", + "grunt-jsonlint": "^1.1.0", + "grunt-yamllint": "^0.3.0", + "gruntify-eslint": "^3.1.0" }, "eslintConfig": { "extends": "eslint:recommended", From 59591367edb10407f3112724d4903c0880660ce1 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 9 May 2017 00:41:03 +0200 Subject: [PATCH 17/93] remove csslintrc --- .csslintrc | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .csslintrc diff --git a/.csslintrc b/.csslintrc deleted file mode 100644 index aacba956..00000000 --- a/.csslintrc +++ /dev/null @@ -1,2 +0,0 @@ ---exclude-exts=.min.css ---ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes From ea916bd826e7dfc3d02ce8e1307c15e9ac8c3614 Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 21:07:34 +0200 Subject: [PATCH 18/93] correct translation --- l10n/de.json | 2 +- l10n/fr.json | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/l10n/de.json b/l10n/de.json index 33a5ec5c..e33a1eb6 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -19,7 +19,7 @@ "DOWN": "fallend", "UNDEFINED": "nicht verfügbar", - "WIFI": "WiFi", + "WIFI": "WLan", "RADIO": "Funksignal", "BATTERY": "Batterie", "LAST_MESSAGE": "letzter Kontakt" diff --git a/l10n/fr.json b/l10n/fr.json index da1954a9..0b47f3cc 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -1,26 +1,26 @@ { "CO2": "CO2", - "NOISE": "Sonomètre", - "HUMIDITY": "Humidité", - "PRESSURE": "Pression", - "PRESSURE_TREND": "Pression", - "TEMPERATURE": "Température", - "TEMP_TREND": "Température", - "RAIN": "Pluie", - "SUM_RAIN_1": "Pluie (1h)", - "SUM_RAIN_24": "Pluie (24h)", - "WINDSTRENGTH": "Vent", - "WINDANGLE": "Vent", - "GUSTSTRENGTH": "", - "GUSTANGLE": "", + "NOISE": "sonomètre", + "HUMIDITY": "humidité", + "PRESSURE": "pression", + "PRESSURE_TREND": "pression", + "TEMPERATURE": "température", + "TEMP_TREND": "température", + "RAIN": "pluie", + "SUM_RAIN_1": "pluie (1h)", + "SUM_RAIN_24": "pluie (24h)", + "WINDSTRENGTH": "vent", + "WINDANGLE": "vent", + "GUSTSTRENGTH": "rafale", + "GUSTANGLE": "rafale", - "UP": "", - "STABLE": "", - "DOWN": "", - "UNDEFINED": "", + "UP": "hausse", + "STABLE": "stable", + "DOWN": "baisse", + "UNDEFINED": "non disponible", - "WIFI": "", - "RADIO": "", - "BATTERY": "", - "LAST_MESSAGE": "" + "WIFI": "WiFi", + "RADIO": "signal radio", + "BATTERY": "batterie", + "LAST_MESSAGE": "connexion dernière" } From 90a81940f91131c0f610549b97280670bfb9d16a Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 21:08:47 +0200 Subject: [PATCH 19/93] optimize css --- netatmo.bubbles.less | 92 +++++++++++++++++----------------- netatmo.classic.less | 36 +++++++------- netatmo.css | 114 ++++++++++++++++++++++++++++++++++++++++++- netatmo.js | 6 +-- netatmo.less | 8 +-- 5 files changed, 185 insertions(+), 71 deletions(-) diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index ee66269a..14b06b64 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -8,57 +8,59 @@ letter-spacing: -3px; } -.netatmo.bubbles{ - .module{ - .name{ - text-align: left; - } - .primary, .secondary, .data{ - text-align: left; - } - .primary{} - .secondary{ - text-align: center; - width: 5em; +.netatmo{ + .bubbles{ + .module{ + .name{ + text-align: left; + } + .primary, .secondary, .data{ + text-align: left; + } + .primary{} + .secondary{ + text-align: center; + width: 5em; - .CO2{ - .visual{ - width: .1em; - height: .1em; - margin: 1.5em auto; - border-radius: 1em; - box-shadow: 0px 0px .9em 1em; + .CO2{ + .visual{ + width: .1em; + height: .1em; + margin: 1.5em auto; + border-radius: 1em; + box-shadow: 0px 0px .9em 1em; + } + .good{ + color: @good; + background-color: @good; + } + .average{ + color: @average; + background-color: @average; + } + .bad{ + color: @bad; + background-color: @bad; + } } - .good{ - color: @good; - background-color: @good; - } - .average{ - color: @average; - background-color: @average; - } - .bad{ - color: @bad; - background-color: @bad; + .WindAngle{ + .visual{ + //margin: .4em; + display: inline-block; + } } } - .WindAngle{ - .visual{ - //margin: .4em; - display: inline-block; + .data{ + width: 8em; + + .flash { + animation: flasher 1s linear infinite; + } + + @keyframes flasher { + 50% { opacity: 0; } } } } - .data{ - width: 8em; - } } } - -.flash { - animation: flasher 1s linear infinite; -} - -@keyframes flasher { - 50% { opacity: 0; } -} diff --git a/netatmo.classic.less b/netatmo.classic.less index e514d74b..466c0a7d 100644 --- a/netatmo.classic.less +++ b/netatmo.classic.less @@ -1,23 +1,25 @@ -.netatmo.classic{ - .module{ - display: inline-block; - } +.netatmo{ + .classic{ + .module{ + display: inline-block; + } - .module{ - overflow: hidden; - margin: .125em .25em; - border-radius: .25em; - border: 1px solid @borderColor; + .module{ + overflow: hidden; + margin: .125em .25em; + border-radius: .25em; + border: 1px solid @borderColor; - .name{ - color: @dark; - text-align: center; - padding: .125em .25em; - background: @borderColor; - } + .name{ + color: @dark; + text-align: center; + padding: .125em .25em; + background: @borderColor; + } - .data{ - padding: .125em .25em; + .data{ + padding: .125em .25em; + } } } } diff --git a/netatmo.css b/netatmo.css index 39eff910..1203b5da 100644 --- a/netatmo.css +++ b/netatmo.css @@ -1,2 +1,112 @@ -.netatmo{display:inline-block}.netatmo .loading,.netatmo .loadTimer,.netatmo .updated{display:inline-block}.netatmo svg.loading{width:.6em;height:.6em}.netatmo svg.loading circle{fill:none;stroke-linecap:round;cx:50;cy:50;r:40}.netatmo svg.loading .inner{stroke:#fff;stroke-width:6}.netatmo svg.loading .outer{stroke:#aaa;stroke-width:10}.netatmo svg.loadTimer{width:.5em;height:.5em;margin:.2em 0;vertical-align:middle}.netatmo svg.loadTimer .loader{fill:#000}.netatmo svg.loadTimer .border{fill:#aaa}.netatmo .updated{margin:.2em 0;padding:0 .5em;vertical-align:middle}.netatmo.classic .module{display:inline-block}.netatmo.classic .module{overflow:hidden;margin:.125em .25em;border-radius:.25em;border:1px solid #fff}.netatmo.classic .module .name{color:#000;text-align:center;padding:.125em .25em;background:#fff}.netatmo.classic .module .data{padding:.125em .25em}.xxlarge{font-size:95px;line-height:95px;letter-spacing:-3px}.netatmo.bubbles .module .name{text-align:left}.netatmo.bubbles .module .primary,.netatmo.bubbles .module .secondary,.netatmo.bubbles .module .data{text-align:left}.netatmo.bubbles .module .secondary{text-align:center;width:5em}.netatmo.bubbles .module .secondary .CO2 .visual{width:.1em;height:.1em;margin:1.5em auto;border-radius:1em;box-shadow:0 0 .9em 1em}.netatmo.bubbles .module .secondary .CO2 .good{color:#32cd32;background-color:#32cd32}.netatmo.bubbles .module .secondary .CO2 .average{color:#ffa500;background-color:#ffa500}.netatmo.bubbles .module .secondary .CO2 .bad{color:red;background-color:red}.netatmo.bubbles .module .secondary .WindAngle .visual{display:inline-block}.netatmo.bubbles .module .data{width:8em}.flash{animation:flasher 1s linear infinite}@keyframes flasher{50%{ opacity:0}} -/* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ +.netatmo { + display: inline-block; +} +.netatmo .loading, +.netatmo .loadTimer, +.netatmo .updated { + display: inline-block; +} +.netatmo svg.loading { + height: .6em; + width: .6em; +} +.netatmo svg.loading circle { + cx: 50; + cy: 50; + fill: none; + r: 40; + stroke-linecap: round; +} +.netatmo svg.loading .inner { + stroke: #ffffff; + stroke-width: 6; +} +.netatmo svg.loading .outer { + stroke: #aaaaaa; + stroke-width: 10; +} +.netatmo svg.loadTimer { + height: .5em; + margin: .2em 0; + vertical-align: middle; + width: .5em; +} +.netatmo svg.loadTimer .loader { + fill: #000000; +} +.netatmo svg.loadTimer .border { + fill: #aaaaaa; +} +.netatmo .updated { + margin: .2em 0; + padding: 0 .5em; + vertical-align: middle; +} +.netatmo .classic .module { + display: inline-block; +} +.netatmo .classic .module { + overflow: hidden; + margin: .125em .25em; + border-radius: .25em; + border: 1px solid #ffffff; +} +.netatmo .classic .module .name { + color: #000000; + text-align: center; + padding: .125em .25em; + background: #ffffff; +} +.netatmo .classic .module .data { + padding: .125em .25em; +} +.xxlarge { + font-size: 95px; + line-height: 95px; + letter-spacing: -3px; +} +.netatmo .bubbles .module .name { + text-align: left; +} +.netatmo .bubbles .module .primary, +.netatmo .bubbles .module .secondary, +.netatmo .bubbles .module .data { + text-align: left; +} +.netatmo .bubbles .module .secondary { + text-align: center; + width: 5em; +} +.netatmo .bubbles .module .secondary .CO2 .visual { + width: .1em; + height: .1em; + margin: 1.5em auto; + border-radius: 1em; + box-shadow: 0px 0px .9em 1em; +} +.netatmo .bubbles .module .secondary .CO2 .good { + color: #32cd32; + background-color: #32cd32; +} +.netatmo .bubbles .module .secondary .CO2 .average { + color: #ffa500; + background-color: #ffa500; +} +.netatmo .bubbles .module .secondary .CO2 .bad { + color: #ff0000; + background-color: #ff0000; +} +.netatmo .bubbles .module .secondary .WindAngle .visual { + display: inline-block; +} +.netatmo .bubbles .module .data { + width: 8em; +} +.netatmo .bubbles .module .data .flash { + animation: flasher 1s linear infinite; +} +@keyframes flasher { + 50% { + opacity: 0; + } +} diff --git a/netatmo.js b/netatmo.js index 93320d75..7a985663 100755 --- a/netatmo.js +++ b/netatmo.js @@ -203,7 +203,7 @@ Module.register('netatmo', { classic: (function(formatter, translator, that){ return { render: function(device){ - var sResult = $('
').addClass('modules'); + var sResult = $('
').addClass('modules').addClass(that.config.design); var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? that.config.moduleOrder : null; @@ -280,7 +280,7 @@ Module.register('netatmo', { WIND: "NAModule2" }, render: function(device){ - var sResult = $('
').addClass('modules'); + var sResult = $('
').addClass('modules').addClass(that.config.design); var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? that.config.moduleOrder : null; @@ -523,7 +523,7 @@ Module.register('netatmo', { }; }, getDom: function() { - var dom = $('
').addClass('netatmo').addClass(this.config.design); + var dom = $('
').addClass('netatmo'); if(this.dom){ dom.append( this.dom diff --git a/netatmo.less b/netatmo.less index 85354eea..23190c7f 100644 --- a/netatmo.less +++ b/netatmo.less @@ -10,15 +10,15 @@ display: inline-block; } svg.loading{ - width: .6em; height: .6em; + width: .6em; circle{ - fill: none; - stroke-linecap: round; cx: 50; cy: 50; + fill: none; r: 40; + stroke-linecap: round; } .inner{ stroke: @light; @@ -30,10 +30,10 @@ } } svg.loadTimer { - width: .5em; height: .5em; margin: .2em 0; vertical-align: middle; + width: .5em; .loader{ fill: @dark;} .border{ fill: @dimmed} } From c4b0e547fced406d6450ef652dee20581872d907 Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 21:43:30 +0200 Subject: [PATCH 20/93] optimize css --- netatmo.bubbles.less | 2 +- netatmo.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index 14b06b64..6c0c6fdd 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -28,7 +28,7 @@ height: .1em; margin: 1.5em auto; border-radius: 1em; - box-shadow: 0px 0px .9em 1em; + box-shadow: 0 0 .9em 1em; } .good{ color: @good; diff --git a/netatmo.css b/netatmo.css index 1203b5da..19662a8d 100644 --- a/netatmo.css +++ b/netatmo.css @@ -82,7 +82,7 @@ height: .1em; margin: 1.5em auto; border-radius: 1em; - box-shadow: 0px 0px .9em 1em; + box-shadow: 0 0 .9em 1em; } .netatmo .bubbles .module .secondary .CO2 .good { color: #32cd32; From 22fa8cff5d94be40345a97653588bc03fbb36a61 Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 21:45:17 +0200 Subject: [PATCH 21/93] fixes #37 --- Gruntfile.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 70776cbb..1d482f9f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -11,7 +11,7 @@ module.exports = function(grunt) { options: { formatter: 'prose', format: true, - indent: 2, + indent: 2 } }, yamllint: { @@ -26,8 +26,7 @@ module.exports = function(grunt) { formatters: [ {id: 'lint-xml', dest: 'report/csslint.jslint.xml'}, {id: 'csslint-xml', dest: 'report/csslint.xml'} - ], - import: 2 + ] } } }); From f76efc26e4ff596b29f7a8af0a9a14a6ae6757ca Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 21:51:47 +0200 Subject: [PATCH 22/93] correct property order --- netatmo.bubbles.less | 14 +++++++------- netatmo.classic.less | 10 +++++----- netatmo.css | 24 ++++++++++++------------ 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index 6c0c6fdd..e3222069 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -4,8 +4,8 @@ .xxlarge{ font-size: 95px; - line-height: 95px; letter-spacing: -3px; + line-height: 95px; } .netatmo{ @@ -24,23 +24,23 @@ .CO2{ .visual{ - width: .1em; + border-radius: 1em; + box-shadow: 0 0 .9em 1em; height: .1em; margin: 1.5em auto; - border-radius: 1em; - box-shadow: 0 0 .9em 1em; + width: .1em; } .good{ - color: @good; background-color: @good; + color: @good; } .average{ - color: @average; background-color: @average; + color: @average; } .bad{ - color: @bad; background-color: @bad; + color: @bad; } } .WindAngle{ diff --git a/netatmo.classic.less b/netatmo.classic.less index 466c0a7d..b065a40d 100644 --- a/netatmo.classic.less +++ b/netatmo.classic.less @@ -5,16 +5,16 @@ } .module{ - overflow: hidden; - margin: .125em .25em; - border-radius: .25em; border: 1px solid @borderColor; + border-radius: .25em; + margin: .125em .25em; + overflow: hidden; .name{ + background: @borderColor; color: @dark; - text-align: center; padding: .125em .25em; - background: @borderColor; + text-align: center; } .data{ diff --git a/netatmo.css b/netatmo.css index 19662a8d..1c7b3f9a 100644 --- a/netatmo.css +++ b/netatmo.css @@ -46,24 +46,24 @@ display: inline-block; } .netatmo .classic .module { - overflow: hidden; - margin: .125em .25em; - border-radius: .25em; border: 1px solid #ffffff; + border-radius: .25em; + margin: .125em .25em; + overflow: hidden; } .netatmo .classic .module .name { + background: #ffffff; color: #000000; - text-align: center; padding: .125em .25em; - background: #ffffff; + text-align: center; } .netatmo .classic .module .data { padding: .125em .25em; } .xxlarge { font-size: 95px; - line-height: 95px; letter-spacing: -3px; + line-height: 95px; } .netatmo .bubbles .module .name { text-align: left; @@ -78,23 +78,23 @@ width: 5em; } .netatmo .bubbles .module .secondary .CO2 .visual { - width: .1em; - height: .1em; - margin: 1.5em auto; border-radius: 1em; box-shadow: 0 0 .9em 1em; + height: .1em; + margin: 1.5em auto; + width: .1em; } .netatmo .bubbles .module .secondary .CO2 .good { - color: #32cd32; background-color: #32cd32; + color: #32cd32; } .netatmo .bubbles .module .secondary .CO2 .average { - color: #ffa500; background-color: #ffa500; + color: #ffa500; } .netatmo .bubbles .module .secondary .CO2 .bad { - color: #ff0000; background-color: #ff0000; + color: #ff0000; } .netatmo .bubbles .module .secondary .WindAngle .visual { display: inline-block; From 17a7896bfe30cb2cf16f81b430194b0ca4878afc Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 22:25:42 +0200 Subject: [PATCH 23/93] reduce complexity #38 --- netatmo.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/netatmo.js b/netatmo.js index 7a985663..6c25e1ec 100755 --- a/netatmo.js +++ b/netatmo.js @@ -375,8 +375,6 @@ Module.register('netatmo', { $('
').addClass('small value').append(formatter.value(type, value)) ).appendTo(result); break; - case this.moduleType.OUTDOOR: - break; case this.moduleType.WIND: type = 'WindAngle'; value = module.dashboard_data[type]; @@ -387,8 +385,8 @@ Module.register('netatmo', { $('
').addClass('small value').append(formatter.value(type, value)) ).appendTo(result); break; + case this.moduleType.OUTDOOR: case this.moduleType.RAIN: - break; default: break; } From e91cf568259563f6bff3928ead3297f92673898d Mon Sep 17 00:00:00 2001 From: Christopher Date: Wed, 10 May 2017 22:34:11 +0200 Subject: [PATCH 24/93] fixes #41 --- netatmo.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/netatmo.js b/netatmo.js index 6c25e1ec..5479f7a7 100755 --- a/netatmo.js +++ b/netatmo.js @@ -153,7 +153,7 @@ Module.register('netatmo', { } }, direction: function(value){ - if(value < 11.25)return 'N'; + if(value < 11.25) return 'N'; if(value < 33.75) return 'NNE'; if(value < 56.25) return 'NE'; if(value < 78.75) return 'ENE'; @@ -175,6 +175,7 @@ Module.register('netatmo', { return ''; }, clazz: function(dataType) { + /* unused switch (dataType) { case 'CO2': return 'wi-na'; @@ -192,7 +193,8 @@ Module.register('netatmo', { return 'wi-na'; default: return ''; - } + }*/ + return ''; } }, getDesign: function(design){ From 6289073c43837bc71cb4ee5b9dd4e57ed0c68368 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 14 May 2017 09:50:58 +0200 Subject: [PATCH 25/93] align modules vertically (#45) * add settings for module alignment (classic) #44 * optimize css for vertical alignment #44 --- netatmo.classic.less | 6 ++++-- netatmo.css | 4 ++-- netatmo.js | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/netatmo.classic.less b/netatmo.classic.less index b065a40d..52a027c8 100644 --- a/netatmo.classic.less +++ b/netatmo.classic.less @@ -1,13 +1,15 @@ .netatmo{ - .classic{ + .horizontal{ .module{ display: inline-block; } + } + .classic{ .module{ border: 1px solid @borderColor; border-radius: .25em; - margin: .125em .25em; + margin: .25em .25em; overflow: hidden; .name{ diff --git a/netatmo.css b/netatmo.css index 1c7b3f9a..63133340 100644 --- a/netatmo.css +++ b/netatmo.css @@ -42,13 +42,13 @@ padding: 0 .5em; vertical-align: middle; } -.netatmo .classic .module { +.netatmo .horizontal .module { display: inline-block; } .netatmo .classic .module { border: 1px solid #ffffff; border-radius: .25em; - margin: .125em .25em; + margin: .25em .25em; overflow: hidden; } .netatmo .classic .module .name { diff --git a/netatmo.js b/netatmo.js index 5479f7a7..730b41b9 100755 --- a/netatmo.js +++ b/netatmo.js @@ -13,6 +13,7 @@ Module.register('netatmo', { animationSpeed: 1000, design: 'classic', //bubbles hideLoadTimer: false, + horizontal: true, lastMessageThreshold: 600, // in seconds (10 minutes) showLastMessage: true, showBattery: true, @@ -206,6 +207,8 @@ Module.register('netatmo', { return { render: function(device){ var sResult = $('
').addClass('modules').addClass(that.config.design); + if(that.config.horizontal) + sResult.addClass('horizontal'); var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? that.config.moduleOrder : null; From aca6846971d9dbb96a6c29ca6f660426de87660a Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 14 May 2017 15:09:43 +0200 Subject: [PATCH 26/93] add lang cs (#46) * add reference for translation (CS). * add translation (CS) * complete translation --- l10n/cs.json | 24 ++++++++++++++++++++++++ netatmo.js | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 l10n/cs.json diff --git a/l10n/cs.json b/l10n/cs.json new file mode 100644 index 00000000..0a173229 --- /dev/null +++ b/l10n/cs.json @@ -0,0 +1,24 @@ +{ + "CO2": "CO2", + "NOISE": "Hluk", + "HUMIDITY": "Vlhkost", + "PRESSURE": "Tlak", + "PRESSURE_TREND": "Tlak (trend)", + "TEMPERATURE": "Teplota", + "TEMP_TREND": "Teplota (trend)", + "RAIN": "Srážky", + "SUM_RAIN_1": "Srážky (1h)", + "SUM_RAIN_24": "Srážky (24h)", + "WINDSTRENGTH": "Vítr", + "WINDANGLE": "Vítr (směr)", + "GUSTSTRENGTH": "Poryvy", + "GUSTANGLE": "Poryvy (směr)", + "UP": "stoupá", + "STABLE": "stály", + "DOWN": "klesá", + "UNDEFINED": "nedostupné", + "WIFI": "WiFi", + "RADIO": "Radio signal", + "BATTERY": "Baterie", + "LAST_MESSAGE": "poslední kontakt" +} diff --git a/netatmo.js b/netatmo.js index 730b41b9..0312143d 100755 --- a/netatmo.js +++ b/netatmo.js @@ -522,7 +522,8 @@ Module.register('netatmo', { return { en: 'l10n/en.json', de: 'l10n/de.json', - fr: 'l10n/fr.json' + fr: 'l10n/fr.json', + cs: 'l10n/cs.json' }; }, getDom: function() { From 6807d2ec766d7891f9e423bce8d176468d624f47 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 15 May 2017 00:10:58 +0200 Subject: [PATCH 27/93] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 83f9c65d..3e9cb6ee 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -[![Build Status](https://travis-ci.org/CFenner/MagicMirror-Netatmo-Module.svg?branch=master)](https://travis-ci.org/CFenner/MagicMirror-Netatmo-Module) +[![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) -[![code climate](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MagicMirror-Netatmo-Module) +[![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) [![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) -[![license](https://img.shields.io/badge/license-MIT-blue.svg)](http://choosealicense.com/licenses/mit) +[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://choosealicense.com/licenses/mit/) # MagicMirror-Netatmo-Module From 3833844fd466b3419b115eb6ca21f9ba6e75c965 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 19 Jan 2018 10:11:21 +0100 Subject: [PATCH 28/93] add norwegian translation (#52) * Create no.json * add norwegian translation option * add norwegian translation provided by @jegerikke --- l10n/no.json | 26 ++++++++++++++++++++++++++ netatmo.js | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 l10n/no.json diff --git a/l10n/no.json b/l10n/no.json new file mode 100644 index 00000000..552c1bb7 --- /dev/null +++ b/l10n/no.json @@ -0,0 +1,26 @@ +{ + "CO2": "CO2", + "NOISE": "Støy", + "HUMIDITY": "Luftfuktighet", + "PRESSURE": "Lufttrykk", + "PRESSURE_TREND": "Lufttrykk (trend)", + "TEMPERATURE": "Temperatur", + "TEMP_TREND": "Temperatur (trend)", + "RAIN": "Regn", + "SUM_RAIN_1": "Regn (1h)", + "SUM_RAIN_24": "Regn (24h)", + "WINDSTRENGTH": "Vind", + "WINDANGLE": "Vind (retning)", + "GUSTSTRENGTH": "Vindkast", + "GUSTANGLE": "Vindkast (retning)", + + "UP": "Økende", + "STABLE": "Stabilt", + "DOWN": "Fallende", + "UNDEFINED": "Ikke tilgjengelig", + + "WIFI": "WiFi", + "RADIO": "Radio signal", + "BATTERY": "Batteri", + "LAST_MESSAGE": "Sist kontakt" +} diff --git a/netatmo.js b/netatmo.js index 0312143d..1e04db1b 100755 --- a/netatmo.js +++ b/netatmo.js @@ -523,7 +523,8 @@ Module.register('netatmo', { en: 'l10n/en.json', de: 'l10n/de.json', fr: 'l10n/fr.json', - cs: 'l10n/cs.json' + cs: 'l10n/cs.json', + no: 'l10n/no.json' }; }, getDom: function() { From 03b43f0725697ddedfb09a16ce15a27103a332d0 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 22 Jan 2018 12:57:21 +0100 Subject: [PATCH 29/93] correct lang key for norwegian (#53) * correct value for norwegian * correct lang key value --- l10n/{no.json => nb.json} | 0 netatmo.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename l10n/{no.json => nb.json} (100%) diff --git a/l10n/no.json b/l10n/nb.json similarity index 100% rename from l10n/no.json rename to l10n/nb.json diff --git a/netatmo.js b/netatmo.js index 1e04db1b..50e9a41c 100755 --- a/netatmo.js +++ b/netatmo.js @@ -524,7 +524,7 @@ Module.register('netatmo', { de: 'l10n/de.json', fr: 'l10n/fr.json', cs: 'l10n/cs.json', - no: 'l10n/no.json' + nb: 'l10n/nb.json' }; }, getDom: function() { From a8097e758d5a1040102037f830a1624a475307e9 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 8 Apr 2018 07:17:46 +0200 Subject: [PATCH 30/93] add curl section --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3e9cb6ee..a368fd47 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,26 @@ Your can register a new app [here](https://dev.netatmo.com/dev/createapp). After #### Grant Access to Your Data To allow the app to access your data, you need to send a POST request to the auth server and register the app. -You can send a POST request with [Hurl.it](https://www.hurl.it)([Git](https://github.com/defunkt/hurl)) to the Netatmo auth url: https://api.netatmo.com/oauth2/token + +##### cURL + +One option is to use the command line tool [cURL](https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjqgN789KnaAhUBalAKHR-NDLoQFgg2MAE&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCURL&usg=AOvVaw27-lfQBHvLQPR2qsddIR6U). + +``` +curl --data "grant_type=password&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&username=YOUR_NETATMO_USERNAME&password=YOUR_NETATMO_PASSWORD&scope=read_station" "https://api.netatmo.com/oauth2/token" +``` + +The POST request will return the following data: + +``` +{"access_token":"abc","refresh_token":"xyz","scope":["read_station"],"expires_in":10800,"expire_in":10800} +``` + +The REFRESH_TOKEN will be needed in the [config entries](#configuration). + +##### Hurl.it + +You can also send a POST request with [Hurl.it](https://www.hurl.it)([Git](https://github.com/defunkt/hurl)) to the Netatmo auth url: https://api.netatmo.com/oauth2/token Also you need to provide the following data (add as parameters): From e6c30fd073f7dab084a4b7c2e2e0d5043f219328 Mon Sep 17 00:00:00 2001 From: Tom-Inge Larsen Date: Mon, 24 Dec 2018 10:10:57 +0100 Subject: [PATCH 31/93] Added translation for Norwegian-Nynorsk (#82) --- l10n/nn.json | 26 ++++++++++++++++++++++++++ netatmo.js | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 l10n/nn.json diff --git a/l10n/nn.json b/l10n/nn.json new file mode 100644 index 00000000..4c690eb3 --- /dev/null +++ b/l10n/nn.json @@ -0,0 +1,26 @@ +{ + "CO2": "CO2", + "NOISE": "Støy", + "HUMIDITY": "Luftfuktigheit", + "PRESSURE": "Lufttrykk", + "PRESSURE_TREND": "Lufttrykk (trend)", + "TEMPERATURE": "Temperatur", + "TEMP_TREND": "Temperatur (trend)", + "RAIN": "Regn", + "SUM_RAIN_1": "Regn (1h)", + "SUM_RAIN_24": "Regn (24h)", + "WINDSTRENGTH": "Vind", + "WINDANGLE": "Vind (retning)", + "GUSTSTRENGTH": "Vindkast", + "GUSTANGLE": "Vindkast (retning)", + + "UP": "Aukande", + "STABLE": "Stabilt", + "DOWN": "Fallande", + "UNDEFINED": "Ikkje tilgjengeleg", + + "WIFI": "WiFi", + "RADIO": "Radio signal", + "BATTERY": "Batteri", + "LAST_MESSAGE": "Sist kontakt" +} diff --git a/netatmo.js b/netatmo.js index 50e9a41c..58cba2d4 100755 --- a/netatmo.js +++ b/netatmo.js @@ -524,7 +524,8 @@ Module.register('netatmo', { de: 'l10n/de.json', fr: 'l10n/fr.json', cs: 'l10n/cs.json', - nb: 'l10n/nb.json' + nb: 'l10n/nb.json', + nn: 'l10n/nn.json' }; }, getDom: function() { From 8c2b148e8f265ecd106b621c340445e697ceaadd Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 24 Dec 2018 11:11:58 +0200 Subject: [PATCH 32/93] fix: package.json to reduce vulnerabilities (#78) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/npm:eslint:20180222 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 593a67b8..743987aa 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { - "eslint": "^2.7.0", + "eslint": "^4.18.2", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-csslint": "^2.0.0", @@ -25,7 +25,7 @@ "grunt-contrib-uglify": "^2.3.0", "grunt-jsonlint": "^1.1.0", "grunt-yamllint": "^0.3.0", - "gruntify-eslint": "^3.1.0" + "gruntify-eslint": "^4.0.0" }, "eslintConfig": { "extends": "eslint:recommended", From a554952c797da3517a1fc6304829a7bc54539f96 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 10 Jan 2022 17:13:31 +0100 Subject: [PATCH 33/93] chore: add funding information (#105) --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..e3df20c4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: CFenner +custom: ["https://paypal.me/ChristopherFenner"] From 1acc37e9b1534742ef31fb7d64a3be7ddc2228ce Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 17 Jan 2022 07:15:15 +0000 Subject: [PATCH 34/93] fix: package.json to reduce vulnerabilities (#104) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-ANSIREGEX-1583908 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 743987aa..c5f54d16 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { - "eslint": "^4.18.2", + "eslint": "^7.0.0", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-csslint": "^2.0.0", @@ -25,7 +25,7 @@ "grunt-contrib-uglify": "^2.3.0", "grunt-jsonlint": "^1.1.0", "grunt-yamllint": "^0.3.0", - "gruntify-eslint": "^4.0.0" + "gruntify-eslint": "^5.0.0" }, "eslintConfig": { "extends": "eslint:recommended", From 0d931ce41e2c179a7eef3e99d70fb1fb37f54e3d Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 17 Jan 2022 07:15:31 +0000 Subject: [PATCH 35/93] fix: package.json to reduce vulnerabilities (#103) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-TRIMNEWLINES-1298042 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c5f54d16..3c0cfe44 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "grunt-cli": "^1.2.0", "grunt-contrib-csslint": "^2.0.0", "grunt-contrib-eslint": "0.0.5", - "grunt-contrib-uglify": "^2.3.0", + "grunt-contrib-uglify": "^3.4.0", "grunt-jsonlint": "^1.1.0", "grunt-yamllint": "^0.3.0", "gruntify-eslint": "^5.0.0" From 89f335276d51fc6b3939e953ed7fa7b9ac678253 Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 17 Jan 2022 07:15:59 +0000 Subject: [PATCH 36/93] fix: package.json to reduce vulnerabilities (#101) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-HOSTEDGITINFO-1088355 From 2578ce5a0026d6335f480f79f9bc3effa37f280a Mon Sep 17 00:00:00 2001 From: Espen Stromsnes Date: Mon, 17 Jan 2022 08:17:49 +0100 Subject: [PATCH 37/93] docs: Updated with correct url to create Netatmo app and modified sample curl command line so that it works as-is. (#99) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Espen Strømsnes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a368fd47..53a400fd 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ To be able to access your data, you need to have an Netatmo Application and gran #### Register an App -Your can register a new app [here](https://dev.netatmo.com/dev/createapp). Afterwards you will get an APP_ID and an APP_SECRET which you will need to enter in the [config entries](#configuration). +Your can register a new app [here](https://dev.netatmo.com/apps/createanapp). Afterwards you will get an APP_ID and an APP_SECRET which you will need to enter in the [config entries](#configuration). #### Grant Access to Your Data @@ -40,7 +40,7 @@ To allow the app to access your data, you need to send a POST request to the aut One option is to use the command line tool [cURL](https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjqgN789KnaAhUBalAKHR-NDLoQFgg2MAE&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCURL&usg=AOvVaw27-lfQBHvLQPR2qsddIR6U). ``` -curl --data "grant_type=password&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&username=YOUR_NETATMO_USERNAME&password=YOUR_NETATMO_PASSWORD&scope=read_station" "https://api.netatmo.com/oauth2/token" +curl -X POST -d "grant_type=password" -d "client_id=YOUR_CLIENT_ID" -d "client_secret=YOUR_CLIENT_SECRET" -d "username=YOUR_NETATMO_USERNAME" -d "password=YOUR_NETATMO_PASSWORD" -d "scope=read_station" "https://api.netatmo.com/oauth2/token" ``` The POST request will return the following data: From 2eef5d6598d05647bcf310b2043471ee410846ce Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 17 Jan 2022 07:20:37 +0000 Subject: [PATCH 38/93] fix: package.json to reduce vulnerabilities (#92) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-ACORN-559469 From 659108f5aaad87a306147370911cac151f995d15 Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 17 Jan 2022 07:21:43 +0000 Subject: [PATCH 39/93] [Snyk] Fix for 1 vulnerabilities (#96) * fix: package.json & .snyk to reduce vulnerabilities The following vulnerabilities are fixed with a Snyk patch: - https://snyk.io/vuln/SNYK-JS-LODASH-567746 * fix: package.json & .snyk to reduce vulnerabilities The following vulnerabilities are fixed with a Snyk patch: - https://snyk.io/vuln/SNYK-JS-LODASH-567746 --- .snyk | 34 ++++++++++++++++++++++++++++++++++ package.json | 8 +++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .snyk diff --git a/.snyk b/.snyk new file mode 100644 index 00000000..887635d9 --- /dev/null +++ b/.snyk @@ -0,0 +1,34 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.14.1 +ignore: {} +# patches apply the minimum changes required to fix a vulnerability +patch: + SNYK-JS-LODASH-567746: + - eslint > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt-contrib-csslint > lodash: + patched: '2020-05-04T01:41:21.443Z' + - eslint > inquirer > lodash: + patched: '2020-05-04T01:41:21.443Z' + - eslint > table > lodash: + patched: '2020-05-04T01:41:21.443Z' + - gruntify-eslint > eslint > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt > grunt-legacy-log > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt > grunt-legacy-util > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt-contrib-eslint > eslint > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt-yamllint > async > lodash: + patched: '2020-05-04T01:41:21.443Z' + - gruntify-eslint > eslint > inquirer > lodash: + patched: '2020-05-04T01:41:21.443Z' + - gruntify-eslint > eslint > table > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt > grunt-legacy-log > grunt-legacy-log-utils > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt-contrib-eslint > eslint > inquirer > lodash: + patched: '2020-05-04T01:41:21.443Z' + - grunt-contrib-eslint > eslint > table > lodash: + patched: '2020-05-04T01:41:21.443Z' diff --git a/package.json b/package.json index 3c0cfe44..3167646c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "description": "", "main": "netatmo.js", "scripts": { - "test": "grunt test" + "test": "grunt test", + "snyk-protect": "snyk protect", + "prepublish": "npm run snyk-protect" }, "repository": { "type": "git", @@ -45,5 +47,9 @@ "globalReturn": true } } + }, + "snyk": true, + "dependencies": { + "snyk": "^1.317.0" } } From 804bc51bad208d21f0b15173e1ac86ccd86269c8 Mon Sep 17 00:00:00 2001 From: kuutio-hub <66736498+kuutio-hub@users.noreply.github.com> Date: Mon, 24 Jan 2022 09:13:21 +0100 Subject: [PATCH 40/93] feat(language): add hungarian translation (#108) --- l10n/hu.json | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 l10n/hu.json diff --git a/l10n/hu.json b/l10n/hu.json new file mode 100644 index 00000000..d6392798 --- /dev/null +++ b/l10n/hu.json @@ -0,0 +1,26 @@ +{ + "CO2": "CO2", + "NOISE": "Zaj", + "HUMIDITY": "Páratartalom", + "PRESSURE": "Légnyomás", + "PRESSURE_TREND": "Légnyomás (trend)", + "TEMPERATURE": "Hőmérséklet", + "TEMP_TREND": "Hőmérséklet (trend)", + "RAIN": "Eső", + "SUM_RAIN_1": "Eső (1h)", + "SUM_RAIN_24": "Eső (24h)", + "WINDSTRENGTH": "Szél", + "WINDANGLE": "Szél (irány)", + "GUSTSTRENGTH": "Érzet", + "GUSTANGLE": "Érzet (irány)", + + "UP": "növekvő", + "STABLE": "stabil", + "DOWN": "csökkenő", + "UNDEFINED": "Nem elérhető", + + "WIFI": "WiFi", + "RADIO": "Jelerősség", + "BATTERY": "Akkumulátor", + "LAST_MESSAGE": "Utolsó üzenet" +} From b6896435a322a93cba5d20990d85992bf9df3bf8 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 24 Jan 2022 11:11:30 +0100 Subject: [PATCH 41/93] fix: add HU translations (#109) --- netatmo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index 58cba2d4..60210114 100755 --- a/netatmo.js +++ b/netatmo.js @@ -525,7 +525,8 @@ Module.register('netatmo', { fr: 'l10n/fr.json', cs: 'l10n/cs.json', nb: 'l10n/nb.json', - nn: 'l10n/nn.json' + nn: 'l10n/nn.json', + hu: 'l10n/hu.json' }; }, getDom: function() { From a2275ddd7a805ffec76c93ff8f34f3c67367b9ff Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 25 Jan 2022 14:49:01 +0100 Subject: [PATCH 42/93] chore: add eslint (#111) * add standard badge * add eslint config * Create validation.yml * Update package.json * Create package-lock.json --- .eslintrc.yml | 15 + .github/workflows/validation.yml | 29 + README.md | 1 + package-lock.json | 3280 ++++++++++++++++++++++++++++++ package.json | 8 +- 5 files changed, 3332 insertions(+), 1 deletion(-) create mode 100644 .eslintrc.yml create mode 100644 .github/workflows/validation.yml create mode 100644 package-lock.json diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..e2718c74 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,15 @@ +env: + browser: true + es2021: true + node: true +extends: + - standard +parserOptions: + sourceType: module + ecmaVersion: 2018 +globals: + Module: true + Log: true +rules: + "comma-dangle": ["error", "always-multiline"] + diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml new file mode 100644 index 00000000..d1e9b26a --- /dev/null +++ b/.github/workflows/validation.yml @@ -0,0 +1,29 @@ +name: "Validation" + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + eslint: + runs-on: ubuntu-latest + name: 'ESLint' + strategy: + matrix: + node-version: [14.x] + steps: + - name: Checkout Code + uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - name: Install Dependencies + run: npm install + - name: Validate JS Sources + run: npm run validate:js diff --git a/README.md b/README.md index 53a400fd..da02bc3a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) +[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://choosealicense.com/licenses/mit/) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..43b8c349 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3280 @@ +{ + "name": "netatmo", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@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==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@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/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@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 + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "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 + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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" + } + }, + "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 + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "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" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "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 + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csslint": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz", + "integrity": "sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=", + "dev": true, + "requires": { + "clone": "~2.1.0", + "parserlib": "~1.1.1" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.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" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", + "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "grunt": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz", + "integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==", + "dev": true, + "requires": { + "dateformat": "~3.0.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~0.3.0", + "glob": "~7.1.6", + "grunt-cli": "~1.4.2", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", + "nopt": "~3.0.6", + "rimraf": "~3.0.2" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "requires": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "grunt-contrib-csslint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-2.0.0.tgz", + "integrity": "sha1-MSnZTf5Qc1fyMzfSSunpqkudV98=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "csslint": "^1.0.0", + "lodash": "^4.8.2", + "strip-json-comments": "^2.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "grunt-contrib-eslint": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/grunt-contrib-eslint/-/grunt-contrib-eslint-0.0.5.tgz", + "integrity": "sha1-byCW5DJitJ1erxOxUy38oArJybA=", + "dev": true, + "requires": { + "eslint": ">0.7.3" + } + }, + "grunt-contrib-uglify": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz", + "integrity": "sha512-UXsTpeP0pytpTYlmll3RDndsRXfdwmrf1tI/AtD/PrArQAzGmKMvj83aVt3D8egWlE6KqPjsJBLCCvfC52LI/A==", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "maxmin": "^2.1.0", + "uglify-js": "~3.4.0", + "uri-path": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "grunt-jsonlint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.1.0.tgz", + "integrity": "sha1-ox7pckCu4/NDyiY8Rb1TIGMSfbI=", + "dev": true, + "requires": { + "jsonlint": "1.6.2", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", + "dev": true + }, + "grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.19" + } + }, + "grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", + "dev": true, + "requires": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" + } + }, + "grunt-legacy-util": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", + "dev": true, + "requires": { + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" + } + }, + "grunt-yamllint": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/grunt-yamllint/-/grunt-yamllint-0.3.0.tgz", + "integrity": "sha1-EAP3n5uluSMVedOOr8M/awmNdPM=", + "dev": true, + "requires": { + "async": "^2.1.5", + "chalk": "^1.1.3", + "js-yaml": "^3.8.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "gruntify-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gruntify-eslint/-/gruntify-eslint-5.0.0.tgz", + "integrity": "sha512-pa2sXHK9+U4dCGdGSIMkpJARNwRStdLBsddNxmSHSSWROUdhWMrXvFWm6pj48zJhyV3Qy068VIuF1seYIvc0cw==", + "dev": true, + "requires": { + "eslint": "^5.0.0" + }, + "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 + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + } + }, + "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" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "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=", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "requires": { + "duplexer": "^0.1.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "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 + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "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 + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "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": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "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" + } + }, + "jsonlint": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", + "dev": true, + "requires": { + "JSV": ">= 4.0.x", + "nomnom": ">= 1.5.x" + } + }, + "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 + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", + "dev": true, + "requires": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parserlib": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz", + "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^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 + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "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 + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "snyk": { + "version": "1.836.0", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.836.0.tgz", + "integrity": "sha512-iPJ4SCAEArquqo1Aq11KbHOWEu0OFauRn/4Acoq+hDqgTYN9IV8i5d6uHPAo3ePV2g24nF0Pb9N0sxIGgp833w==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "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" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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 + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "requires": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "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" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "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==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + } + } +} diff --git a/package.json b/package.json index 3167646c..98cb9d9e 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "main": "netatmo.js", "scripts": { "test": "grunt test", + "validate:js": "eslint **/*.js", + "fix:js": "eslint --fix **/*.js", "snyk-protect": "snyk protect", "prepublish": "npm run snyk-protect" }, @@ -19,7 +21,11 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { - "eslint": "^7.0.0", + "eslint": "^8.7.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.2.0", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-csslint": "^2.0.0", From 9d49a5954075ca6be9c8f50a973d9cdb8cc069e9 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 25 Jan 2022 14:49:18 +0100 Subject: [PATCH 43/93] chore: add .editorconfig (#110) --- .editorconfig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..13a9dc83 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true +[LICENSE] +indent_style = none +indent_size = none From c52a61f9a90b713de941d78424dc0f1b42c02d22 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 25 Jan 2022 15:14:08 +0100 Subject: [PATCH 44/93] chore: add stylelint (#112) * Update validation.yml * Update package.json * Create .stylelintrc.yml * fix typo * Update package-lock.json * Update validation.yml --- .github/workflows/validation.yml | 19 + .stylelintrc.yml | 5 + package-lock.json | 957 +++++++++++++++++++++++++++++++ package.json | 5 +- 4 files changed, 985 insertions(+), 1 deletion(-) create mode 100644 .stylelintrc.yml diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index d1e9b26a..144a5774 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -27,3 +27,22 @@ jobs: run: npm install - name: Validate JS Sources run: npm run validate:js + stylelint: + runs-on: ubuntu-latest + name: 'Stylelint' + strategy: + matrix: + node-version: [14.x] + steps: + - name: Checkout Code + uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - name: Install Dependencies + run: npm install + - name: Validate CSS Sources + run: npm run validate:css + diff --git a/.stylelintrc.yml b/.stylelintrc.yml new file mode 100644 index 00000000..520c0184 --- /dev/null +++ b/.stylelintrc.yml @@ -0,0 +1,5 @@ +extends: + - stylelint-config-standard +rules: + rule-empty-line-before: never + at-rule-empty-line-before: never diff --git a/package-lock.json b/package-lock.json index 43b8c349..02be8a55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,12 +130,56 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "JSV": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", @@ -224,6 +268,12 @@ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "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.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -235,6 +285,12 @@ "es-abstract": "^1.19.0" } }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -288,6 +344,23 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -325,6 +398,15 @@ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -340,6 +422,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", @@ -358,6 +446,19 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -369,6 +470,12 @@ "which": "^2.0.1" } }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "csslint": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz", @@ -394,6 +501,30 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -415,6 +546,15 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -436,6 +576,15 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", @@ -769,6 +918,15 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -807,6 +965,30 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -819,6 +1001,21 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -967,6 +1164,12 @@ "has-symbols": "^1.0.1" } }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1050,6 +1253,26 @@ "type-fest": "^0.20.2" } }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, "grunt": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz", @@ -1792,6 +2015,12 @@ "duplexer": "^0.1.1" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1866,6 +2095,21 @@ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", "dev": true }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1891,12 +2135,24 @@ "resolve-from": "^4.0.0" } }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2049,6 +2305,12 @@ "is-windows": "^1.0.1" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2134,6 +2396,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2153,6 +2421,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -2186,6 +2460,12 @@ "has-symbols": "^1.0.2" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -2237,6 +2517,12 @@ "argparse": "^2.0.1" } }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2274,6 +2560,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "known-css-properties": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", + "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2314,6 +2606,12 @@ } } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -2336,6 +2634,21 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -2351,6 +2664,18 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, "maxmin": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", @@ -2411,6 +2736,40 @@ } } }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -2427,6 +2786,12 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2442,6 +2807,17 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -2460,6 +2836,12 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2516,6 +2898,41 @@ "abbrev": "1" } }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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 + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -2692,6 +3109,18 @@ "path-root": "^0.1.1" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -2749,12 +3178,69 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true + }, + "postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2782,6 +3268,130 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", @@ -2791,12 +3401,28 @@ "resolve": "^1.9.0" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -2834,6 +3460,12 @@ "signal-exit": "^3.0.2" } }, + "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", @@ -2849,6 +3481,15 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -2902,6 +3543,12 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -2950,6 +3597,50 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -3018,12 +3709,210 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz", + "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==", + "dev": true, + "requires": { + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.3", + "execall": "^2.0.0", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.24.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "normalize-selector": "^0.2.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.5", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "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==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "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 + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "stylelint-config-recommended": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", + "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", + "dev": true + }, + "stylelint-config-standard": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz", + "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^6.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3033,12 +3922,28 @@ "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -3109,6 +4014,12 @@ "is-number": "^7.0.0" } }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, "tsconfig-paths": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", @@ -3142,6 +4053,12 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typedarray-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", + "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", + "dev": true + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -3222,6 +4139,16 @@ "homedir-polyfill": "^1.0.1" } }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3275,6 +4202,36 @@ } } } + }, + "write-file-atomic": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz", + "integrity": "sha512-JhcWoKffJNF7ivO9yflBhc7tn3wKnokMUfWpBriM9yCXj4ePQnRPcWglBkkg1AHC8nsW/EfxwwhqsLtOy59djA==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/package.json b/package.json index 98cb9d9e..bc1eaf75 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "netatmo.js", "scripts": { "test": "grunt test", + "validate:css": "stylelint **/*.css", "validate:js": "eslint **/*.js", "fix:js": "eslint --fix **/*.js", "snyk-protect": "snyk protect", @@ -33,7 +34,9 @@ "grunt-contrib-uglify": "^3.4.0", "grunt-jsonlint": "^1.1.0", "grunt-yamllint": "^0.3.0", - "gruntify-eslint": "^5.0.0" + "gruntify-eslint": "^5.0.0", + "stylelint": "^14.2.0", + "stylelint-config-standard": "^24.0.0" }, "eslintConfig": { "extends": "eslint:recommended", From e237f9e75df0e40a8e97ddd731a3154d62ebefa8 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 25 Jan 2022 15:16:25 +0100 Subject: [PATCH 45/93] chore: add markdownlint (#113) * Update validation.yml * Create .markdownlint.yml --- .github/workflows/validation.yml | 10 ++++++++++ .markdownlint.yml | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 .markdownlint.yml diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 144a5774..f880457d 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -9,6 +9,16 @@ on: - main jobs: + markdownlint: + runs-on: ubuntu-latest + name: 'MarkdownLint' + steps: + - name: Checkout Code + uses: actions/checkout@v2 + - name: Validate Markdown Sources + uses: nosborn/github-action-markdown-cli@v1.1.1 + with: + files: . eslint: runs-on: ubuntu-latest name: 'ESLint' diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 00000000..06824d15 --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,5 @@ +default: true + +# ignore +MD013: false # line-length +MD041: false # first-line-heading/first-line-h1 From 8c31ccc22254c8534ff4485a9a352f237617fe29 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 07:49:25 +0100 Subject: [PATCH 46/93] docs: add kuutio-hub as a contributor for translation (#115) * docs: update README.md [skip ci] * docs: create .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 24 ++++++++++++++++++++++++ README.md | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 00000000..7fd8874f --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,24 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "contributors": [ + { + "login": "kuutio-hub", + "name": "kuutio-hub", + "avatar_url": "https://avatars.githubusercontent.com/u/66736498?v=4", + "profile": "https://github.com/kuutio-hub", + "contributions": [ + "translation" + ] + } + ], + "contributorsPerLine": 7, + "projectName": "MMM-Netatmo", + "projectOwner": "CFenner", + "repoType": "github", + "repoHost": "https://github.com", + "skipCi": true +} diff --git a/README.md b/README.md index da02bc3a..3e242290 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) + +[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) + [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) @@ -99,3 +102,23 @@ The following properties can be configured: |refreshInterval|How often does the content needs to be updated? (Minutes)
Data is updated by netatmo every 10 minutes.

**Default value:** `3`| |moduleOrder|The rendering order of your weather modules, ommit a module to hide the output.

**Example:** `["Kitchen","Kid's Bedroom","Garage","Garden"]`
Be aware that you need to use the module names that you set in the netatmo configuration.| |dataOrder|The rendering order of the data types of a module, ommit a data type to hide the output.

**Example:** `["Noise","Pressure","CO2","Humidity","Temperature","Rain"]`| + +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + +

kuutio-hub

🌍
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file From 9fafc9ec5aa61d020d2309164e4380ce1f1c29df Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 07:57:29 +0100 Subject: [PATCH 47/93] docs: add zdeneksofr as a contributor for translation (#116) * docs: update README.md [skip ci] * docs: create .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: Christopher Fenner --- .all-contributorsrc | 8 ++++++++ README.md | 1 + 2 files changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7fd8874f..e078410e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -13,6 +13,14 @@ "contributions": [ "translation" ] + },{ + "login": "zdeneksofr", + "name": "zdeneksofr", + "avatar_url": "https://avatars.githubusercontent.com/u/25898139?v=4", + "profile": "https://github.com/zdeneksofr", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 3e242290..1539d932 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d +

kuutio-hub

🌍

zdeneksofr

🌍
From 2e389b5c7b53ea8b311ada1f0d2badf2db524d82 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:30:35 +0100 Subject: [PATCH 48/93] docs: add tomlarse as a contributor for translation (#117) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 12 +++++++++++- README.md | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index e078410e..e40a22ba 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -13,7 +13,8 @@ "contributions": [ "translation" ] - },{ + }, + { "login": "zdeneksofr", "name": "zdeneksofr", "avatar_url": "https://avatars.githubusercontent.com/u/25898139?v=4", @@ -21,6 +22,15 @@ "contributions": [ "translation" ] + }, + { + "login": "tomlarse", + "name": "Tom-Inge Larsen", + "avatar_url": "https://avatars.githubusercontent.com/u/4574656?v=4", + "profile": "http://blog.codesalot.com", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 1539d932..73d935d0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) -[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) @@ -114,6 +114,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d

kuutio-hub

🌍

zdeneksofr

🌍

Tom-Inge Larsen

🌍
From 24c0471ad56bb9d7827db05e70ca269f93e90713 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:32:27 +0100 Subject: [PATCH 49/93] docs: add jegerikke as a contributor for translation (#118) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index e40a22ba..c854116b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -31,6 +31,15 @@ "contributions": [ "translation" ] + }, + { + "login": "jegerikke", + "name": "jegerikke", + "avatar_url": "https://avatars.githubusercontent.com/u/35518057?v=4", + "profile": "https://github.com/jegerikke", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 73d935d0..409e45b7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) -[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) @@ -115,6 +115,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d

kuutio-hub

🌍

zdeneksofr

🌍

Tom-Inge Larsen

🌍

jegerikke

🌍
From 139f13cf4779dee35221dc969bb9a27254110e5e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:33:36 +0100 Subject: [PATCH 50/93] docs: add gilmrt as a contributor for translation (#119) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c854116b..33364d3c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -40,6 +40,15 @@ "contributions": [ "translation" ] + }, + { + "login": "gilmrt", + "name": "gilmrt", + "avatar_url": "https://avatars.githubusercontent.com/u/4236800?v=4", + "profile": "https://github.com/gilmrt", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 409e45b7..0cb1889f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) -[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) @@ -116,6 +116,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
zdeneksofr

🌍
Tom-Inge Larsen

🌍
jegerikke

🌍 +
gilmrt

🌍 From dc7027d5326b087bdfadf9480dc0d1b7123ee080 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Wed, 26 Jan 2022 19:24:46 +0100 Subject: [PATCH 51/93] docs: fix all-contributors badge line break issue (#120) * Update all-contributors badge * Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0cb1889f..124c4daa 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ -[![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) -[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) +[logo]: https://img.shields.io/badge/all_contributors-5-orange.svg 'Number of contributors on All-Contributors' + +[![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) +[![All Contributors][logo]](#link) [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://choosealicense.com/licenses/mit/) # MagicMirror-Netatmo-Module @@ -125,4 +127,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! From b501741519ea16b9cc14b9297ffc7efd2c8a45a5 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 27 Jan 2022 16:38:47 +0100 Subject: [PATCH 52/93] feat: use node_helper (#114) * Create netatmo.classic.njk * Create netatmo.bubbles.njk * chore: add stylelint (#112) * Update validation.yml * Update package.json * Create .stylelintrc.yml * fix typo * Update package-lock.json * Update validation.yml * chore: add markdownlint (#113) * Update validation.yml * Create .markdownlint.yml * remove old files * update package.json * add node_helper * update less sources * add less compiler * compile separate css files * update module code * update readme * remove unused files * add markdownlint * add jsonlint * update dependencies * remove unused css * fix markdownlint issues * remove unused css * update icons * update readme * Update README.md --- .eslintignore | 1 - .github/preview.bubbles.png | Bin 0 -> 143969 bytes .github/{preview.png => preview.classic.png} | Bin .travis.yml | 4 - DATA.md | 22 +- Gruntfile.js | 45 - README.md | 123 +- String.format.js | 12 - netatmo.bubbles.css | 57 + netatmo.bubbles.less | 107 +- netatmo.bubbles.njk | 47 + netatmo.classic.css | 21 + netatmo.classic.less | 43 +- netatmo.classic.njk | 25 + netatmo.css | 112 - netatmo.js | 841 +++----- netatmo.less | 48 - node_helper.js | 153 ++ package-lock.json | 2019 +++--------------- package.json | 38 +- q.min.js | 1 - 21 files changed, 1071 insertions(+), 2648 deletions(-) delete mode 100644 .eslintignore create mode 100644 .github/preview.bubbles.png rename .github/{preview.png => preview.classic.png} (100%) delete mode 100644 .travis.yml delete mode 100644 Gruntfile.js delete mode 100644 String.format.js create mode 100644 netatmo.bubbles.css create mode 100644 netatmo.bubbles.njk create mode 100644 netatmo.classic.css create mode 100644 netatmo.classic.njk delete mode 100644 netatmo.css delete mode 100644 netatmo.less create mode 100644 node_helper.js delete mode 100644 q.min.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 42d06168..00000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -q.min.js diff --git a/.github/preview.bubbles.png b/.github/preview.bubbles.png new file mode 100644 index 0000000000000000000000000000000000000000..6f45604c3962598a2b82dbe2bafe7afd3272771b GIT binary patch literal 143969 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

bX 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 literal 0 HcmV?d00001 diff --git a/.github/preview.png b/.github/preview.classic.png similarity index 100% rename from .github/preview.png rename to .github/preview.classic.png diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 11042e01..00000000 --- a/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "iojs" - - "7" diff --git a/DATA.md b/DATA.md index 882da76a..ffa68920 100644 --- a/DATA.md +++ b/DATA.md @@ -1,6 +1,6 @@ # Netatmo Data -``` +```json { "body": { "devices": [], @@ -20,9 +20,9 @@ - NAModule3 // wind - NAModule4 // indoor -All module have the following data: +All module have the following data: -``` +```json { "_id": "", "type": "NAModule1", @@ -38,7 +38,7 @@ All module have the following data: Modules with batteries have the following additional data: -``` +```json { "battery_vp": 5613, "battery_percent": 79, @@ -48,7 +48,7 @@ Modules with batteries have the following additional data: ### Main - `NAMain` -``` +```json { "_id": "", "cipher_id": "", @@ -90,7 +90,7 @@ Modules with batteries have the following additional data: ### Outdoor - `NAModule1` -``` +```json { "type": "NAModule1", "dashboard_data": { @@ -109,7 +109,7 @@ Modules with batteries have the following additional data: ### Wind - `NAModule2` -``` +```json { "type": "NAModule2", "dashboard_data": { @@ -146,7 +146,7 @@ Modules with batteries have the following additional data: ### Rain - `NAModule3` -``` +```json { "type": "NAModule3", "dashboard_data": { @@ -161,7 +161,7 @@ Modules with batteries have the following additional data: ### Indoor - `NAModule4` -``` +```json { "type": "NAModule4", "dashboard_data": { @@ -181,7 +181,7 @@ Modules with batteries have the following additional data: ## User -``` +```json "user": { "mail": "", "administrative": { @@ -196,7 +196,7 @@ Modules with batteries have the following additional data: } ``` -``` +```json "user": { "mail": "", "administrative": { diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 1d482f9f..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,45 +0,0 @@ -module.exports = function(grunt) { - grunt.initConfig({ - eslint: { - src: ['.'], - options: { - format: 'junit' - } - }, - jsonlint: { - src: ['*.json'], - options: { - formatter: 'prose', - format: true, - indent: 2 - } - }, - yamllint: { - src: ['.travis.yml', '.codeclimate.yml'], - options: { - schema: 'DEFAULT_SAFE_SCHEMA' - } - }, - csslint: { - src: ['netatmo.css'], - options: { - formatters: [ - {id: 'lint-xml', dest: 'report/csslint.jslint.xml'}, - {id: 'csslint-xml', dest: 'report/csslint.xml'} - ] - } - } - }); - - //grunt.loadNpmTasks('grunt-contrib-less'); - //grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-csslint'); - //grunt.loadNpmTasks("grunt-contrib-eslint"); - grunt.loadNpmTasks("grunt-jsonlint"); - grunt.loadNpmTasks('grunt-yamllint'); - grunt.loadNpmTasks("gruntify-eslint"); - - - grunt.registerTask('default', ['test']); - grunt.registerTask('test', ['eslint', 'jsonlint', 'csslint', 'yamllint']); -}; diff --git a/README.md b/README.md index 124c4daa..9bbf8240 100644 --- a/README.md +++ b/README.md @@ -10,100 +10,77 @@ [![All Contributors][logo]](#link) [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://choosealicense.com/licenses/mit/) -# MagicMirror-Netatmo-Module +# MMM-Netatmo -A module to integrale informations from a Netatmo weather station into the [MagicMirror](https://github.com/MichMich/MagicMirror). +A module to integrate information from a [Netatmo weather station][weather-station] into the [MagicMirror][mirror]. -![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.png) +![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.classic.png) +![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.bubbles.png) ## Usage -_Prerequisites_ +Prerequisites: -- requires MagicMirror v2.0.0 -- a Netatmo weather station at home or at least access to a Netatmo weather station account +To use this module you need to have access to a [Netatmo weather station][weather-station]. -To use this module with the **old module system**, use this branch: https://github.com/CFenner/MagicMirror-Netatmo-Module/tree/rel-1.0 +### Installation -To use this module, just clone this repository to your __modules__ folder of your MagicMirror: `git clone https://github.com/CFenner/MagicMirror-Netatmo-Module.git netatmo` +Navigate into your MagicMirror's modules folder and clone the repository: -Now just add the module to your config.js file ([config entries](#configuration)). - -### Access Your Data - -To be able to access your data, you need to have an Netatmo Application and grant this application access to your data. - -#### Register an App - -Your can register a new app [here](https://dev.netatmo.com/apps/createanapp). Afterwards you will get an APP_ID and an APP_SECRET which you will need to enter in the [config entries](#configuration). - -#### Grant Access to Your Data - -To allow the app to access your data, you need to send a POST request to the auth server and register the app. - -##### cURL - -One option is to use the command line tool [cURL](https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjqgN789KnaAhUBalAKHR-NDLoQFgg2MAE&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCURL&usg=AOvVaw27-lfQBHvLQPR2qsddIR6U). - -``` -curl -X POST -d "grant_type=password" -d "client_id=YOUR_CLIENT_ID" -d "client_secret=YOUR_CLIENT_SECRET" -d "username=YOUR_NETATMO_USERNAME" -d "password=YOUR_NETATMO_PASSWORD" -d "scope=read_station" "https://api.netatmo.com/oauth2/token" -``` - -The POST request will return the following data: - -``` -{"access_token":"abc","refresh_token":"xyz","scope":["read_station"],"expires_in":10800,"expire_in":10800} +```shell +cd ~/MagicMirror/modules && git clone git clone https://github.com/CFenner/MMM-Netatmo.git netatmo ``` -The REFRESH_TOKEN will be needed in the [config entries](#configuration). - -##### Hurl.it - -You can also send a POST request with [Hurl.it](https://www.hurl.it)([Git](https://github.com/defunkt/hurl)) to the Netatmo auth url: https://api.netatmo.com/oauth2/token - -Also you need to provide the following data (add as parameters): +:warning: Note that the checkout folder is named `netatmo` and not `MMM-Netatmo` as the repository. -- grant_type: password -- client_id: [APP_ID] -- client_secret: [APP_SECRET] -- username: [USER_MAIL] -- password: [USER_PASSWORD] -- scope: read_station +### Connection to Netatmo Service API -The POST request will return the following data: - -- access_token: [ACCESS_TOKEN] -- expires_in: 10800 -- refresh_token: [REFRESH_TOKEN] - -The REFRESH_TOKEN will be needed in the [config entries](#configuration). +To be able to access your data, you need to have an Netatmo Application. Create your personal app in the [Netatmo developer portal][dev-portal] and you will get an `APP_ID` and an `APP_SECRET` which you will need to enter in your [mirror configuration](#configuration). ### Configuration -The module needs the default configuration block in your config.js to work. +To run the module properly, you need to add the following data to your config.js file. -``` +```js { - module: 'netatmo', - position: 'bottom_left', // the location where the module should be displayed - config: { - clientId: '', // your app id - clientSecret: '', // your app secret - refreshToken: '' // your generated refresh token - } + module: 'netatmo', + position: 'bottom_left', // the location where the module should be displayed + header: 'Netatmo', // a header if you like one + config: { + clientId: '', // your app id + clientSecret: '', // your app secret + username: '', // your netatmo username + password: '', // your netatmo password + } } ``` +#### Config Options + The following properties can be configured: -|Option|Description| -|---|---| -|clientId|The ID of your Netatmo [application](https://dev.netatmo.com/dev/listapps).

This value is **REQUIRED**| -|clientSecret|The app secret of your Netatmo [application](https://dev.netatmo.com/dev/listapps).

This value is **REQUIRED**| -|refreshToken|The generated refresh token you got from the POST request to the auth api.

This value is **REQUIRED**| -|refreshInterval|How often does the content needs to be updated? (Minutes)
Data is updated by netatmo every 10 minutes.

**Default value:** `3`| -|moduleOrder|The rendering order of your weather modules, ommit a module to hide the output.

**Example:** `["Kitchen","Kid's Bedroom","Garage","Garden"]`
Be aware that you need to use the module names that you set in the netatmo configuration.| -|dataOrder|The rendering order of the data types of a module, ommit a data type to hide the output.

**Example:** `["Noise","Pressure","CO2","Humidity","Temperature","Rain"]`| +|Option|Description|Default|Required| +|---|---|---|---| +|`clientId`|The ID of your Netatmo [application][dev-portal].||yes| +|`clientSecret`|The app secret of your Netatmo [application][dev-portal].||yes| +|`username`|Username for your Netatmo weather station.||yes| +|`password`|Password for your Netatmo weather station.||yes| +|`refreshInterval`|How often does the content needs to be updated (minutes)? Data is updated by netatmo every 10 minutes|`3`|no| +|`moduleOrder`|The rendering order of your weather modules, ommit a module to hide the output. **Example:** `["Kitchen","Kid's Bedroom","Garage","Garden"]` Be aware that you need to use the module names that you set in the netatmo configuration.||no| +|`dataOrder`|The rendering order of the data types of a module, ommit a data type to hide the output. **Example:** `["Noise","Pressure","CO2","Humidity","Temperature","Rain"]`||no| +|`design`|The design for the module appearance, could be `classic` or `bubbles`.|`classic`|no| +|`horizontal`|Control the direction of the modules (`classic` design only).|`true`|no| +|`showBattery`|Control the appearance of the battery status.|`true`|no| +|`showRadio`|Control the appearance of the radio perception.|`true`|no| +|`showWiFi`|Control the appearance of the Wifi perception.|`true`|no| +|`showTrend`|Control the appearance of the temperature and pressure trend.|`true`|no| +|`showMeasurementIcon`|Control the appearance of the data entry icons (`bubbles` design only).|`true`|no| +|`fontClassModuleName`|Control font size class of the module name.|`xsmall`|no| +|`fontClassPrimary`|Control font size class of the primary value (`bubbles` design only).|`large`|no| +|`fontClassSecondary`|Control font size class of the secondary value (`bubbles` design only).|`xsmall`|no| +|`fontClassMeasurement`|Control font size class of the data entries.|`xsmall`|no| +|`thresholdCO2Average`|Control the threshold for the CO2 status when it should turn `average` (`bubbles` design only).|`800`|no| +|`thresholdCO2Bad`|Control the threshold for the CO2 status when it should turn `bad` (`bubbles` design only).|`1800`|no| ## Contributors ✨ @@ -128,3 +105,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! + +[weather-station]: https://www.netatmo.com/weather +[dev-portal]: https://dev.netatmo.com/apps/ +[mirror]: https://github.com/SAP/jenkins-library/issues diff --git a/String.format.js b/String.format.js deleted file mode 100644 index d0ec44ef..00000000 --- a/String.format.js +++ /dev/null @@ -1,12 +0,0 @@ -// add string format method -if (!String.prototype.format) { - String.prototype.format = function() { - var args = arguments; - return this.replace(/{(\d+)}/g, function(match, number) { - return typeof args[number] === 'undefined' ? - match : - args[number] - ; - }); - }; -} diff --git a/netatmo.bubbles.css b/netatmo.bubbles.css new file mode 100644 index 00000000..88d06373 --- /dev/null +++ b/netatmo.bubbles.css @@ -0,0 +1,57 @@ +.netatmo { + display: inline-block; +} +.netatmo .netatmo-module .name { + text-align: left; +} +.netatmo .netatmo-module .primary { + text-align: right; +} +.netatmo .netatmo-module .secondary, +.netatmo .netatmo-module .data { + text-align: left; +} +.netatmo .netatmo-module .secondary { + text-align: center; + width: 5em; +} +.netatmo .netatmo-module .secondary .co2 .visual { + border-radius: 1em; + box-shadow: 0 0 0.9em 1em; + height: 0.1em; + margin: 1.5em auto; + width: 0.1em; +} +.netatmo .netatmo-module .secondary .co2 .good { + background-color: limegreen; + color: limegreen; +} +.netatmo .netatmo-module .secondary .co2 .average { + background-color: orange; + color: orange; +} +.netatmo .netatmo-module .secondary .co2 .bad { + background-color: red; + color: red; +} +.netatmo .netatmo-module .secondary .co2 .undefined { + background-color: #000; + color: #000; +} +.netatmo .netatmo-module .secondary .wind-angle .visual { + display: inline-block; +} +.netatmo .netatmo-module .data { + width: 8em; +} +.netatmo .netatmo-module .data .flash { + animation: flasher 1s linear infinite; +} +@keyframes flasher { + 50% { + opacity: 0; + } +} +.netatmo .netatmo-module .data div * { + margin: 0 2px; +} diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index e3222069..5d361a6f 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -1,66 +1,69 @@ +@dark: #000; @good: limegreen; @average: orange; @bad: red; -.xxlarge{ - font-size: 95px; - letter-spacing: -3px; - line-height: 95px; -} - .netatmo{ - .bubbles{ - .module{ - .name{ - text-align: left; - } - .primary, .secondary, .data{ - text-align: left; - } - .primary{} - .secondary{ - text-align: center; - width: 5em; + display: inline-block; - .CO2{ - .visual{ - border-radius: 1em; - box-shadow: 0 0 .9em 1em; - height: .1em; - margin: 1.5em auto; - width: .1em; - } - .good{ - background-color: @good; - color: @good; - } - .average{ - background-color: @average; - color: @average; - } - .bad{ - background-color: @bad; - color: @bad; - } + .netatmo-module{ + .name{ + text-align: left; + } + .primary{ + text-align: right; + } + .secondary, + .data{ + text-align: left; + } + .primary{} + .secondary{ + text-align: center; + width: 5em; + + .co2{ + .visual{ + border-radius: 1em; + box-shadow: 0 0 .9em 1em; + height: .1em; + margin: 1.5em auto; + width: .1em; } - .WindAngle{ - .visual{ - //margin: .4em; - display: inline-block; - } + .good{ + background-color: @good; + color: @good; } - } - .data{ - width: 8em; - - .flash { - animation: flasher 1s linear infinite; + .average{ + background-color: @average; + color: @average; } - - @keyframes flasher { - 50% { opacity: 0; } + .bad{ + background-color: @bad; + color: @bad; + } + .undefined{ + background-color: @dark; + color: @dark; + } + } + .wind-angle{ + .visual{ + display: inline-block; } } } + .data{ + width: 8em; + .flash { + animation: flasher 1s linear infinite; + } + @keyframes flasher { + 50% { opacity: 0; } + } + div * { + margin: 0 2px; + } + } } } diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk new file mode 100644 index 00000000..9ea1a1f4 --- /dev/null +++ b/netatmo.bubbles.njk @@ -0,0 +1,47 @@ +

+ {% if loaded %} + {% for module in moduleList %} +
+
+ + + + + + + + +
+
+
{{ module.primary.value|safe }}
+
{{ module.primary.unit }}
+
+
+
+
+
{{ module.secondary.value|safe }}
+
+
+ {% for measurement in module.measurementList %} +
+ {% if showMeasurementLabel %} + {{ measurement.label|safe }} + {% endif %} + {% if showMeasurementIcon and not measurement.icon == '' %} + + {% endif %} + {{ measurement.value|safe }} +
+ {% endfor %} + {#
letzter Kontakt: vor 37 Minuten
#} +
+
+
{{ module.name }}
+
+ {% endfor %} + {% else %} +
+ {{ "LOADING" }} +
+ {% endif %} +
diff --git a/netatmo.classic.css b/netatmo.classic.css new file mode 100644 index 00000000..08e7a3af --- /dev/null +++ b/netatmo.classic.css @@ -0,0 +1,21 @@ +.netatmo { + display: inline-block; +} +.netatmo .netatmo-module { + border: 1px solid #fff; + border-radius: 0.25em; + margin: 0.25em; + overflow: hidden; +} +.netatmo .netatmo-module .name { + background: #fff; + color: #000; + padding: 0.125em 0.25em; + text-align: center; +} +.netatmo .netatmo-module .data { + padding: 0.125em 0.25em; +} +.netatmo .horizontal .netatmo-module { + display: inline-block; +} diff --git a/netatmo.classic.less b/netatmo.classic.less index 52a027c8..6b3350f9 100644 --- a/netatmo.classic.less +++ b/netatmo.classic.less @@ -1,27 +1,30 @@ +@light: #fff; +@dark: #000; +@borderColor: @light; + .netatmo{ - .horizontal{ - .module{ - display: inline-block; - } - } + display: inline-block; - .classic{ - .module{ - border: 1px solid @borderColor; - border-radius: .25em; - margin: .25em .25em; - overflow: hidden; + .netatmo-module{ + border: 1px solid @borderColor; + border-radius: .25em; + margin: .25em; + overflow: hidden; - .name{ - background: @borderColor; - color: @dark; - padding: .125em .25em; - text-align: center; - } + .name{ + background: @borderColor; + color: @dark; + padding: .125em .25em; + text-align: center; + } - .data{ - padding: .125em .25em; - } + .data{ + padding: .125em .25em; + } + } + .horizontal{ + .netatmo-module{ + display: inline-block; } } } diff --git a/netatmo.classic.njk b/netatmo.classic.njk new file mode 100644 index 00000000..03f29f04 --- /dev/null +++ b/netatmo.classic.njk @@ -0,0 +1,25 @@ +
+ {% if loaded %} +
+ {% for module in moduleList %} +
+
+ + {% for measurement in module.measurementList %} + + + + + {% endfor %} +
{{ measurement.label|safe }}{{ measurement.value|safe }}
+
+
{{ module.name }}
+
+ {% endfor %} +
+ {% else %} +
+ {{ "LOADING" }} +
+ {% endif %} +
diff --git a/netatmo.css b/netatmo.css deleted file mode 100644 index 63133340..00000000 --- a/netatmo.css +++ /dev/null @@ -1,112 +0,0 @@ -.netatmo { - display: inline-block; -} -.netatmo .loading, -.netatmo .loadTimer, -.netatmo .updated { - display: inline-block; -} -.netatmo svg.loading { - height: .6em; - width: .6em; -} -.netatmo svg.loading circle { - cx: 50; - cy: 50; - fill: none; - r: 40; - stroke-linecap: round; -} -.netatmo svg.loading .inner { - stroke: #ffffff; - stroke-width: 6; -} -.netatmo svg.loading .outer { - stroke: #aaaaaa; - stroke-width: 10; -} -.netatmo svg.loadTimer { - height: .5em; - margin: .2em 0; - vertical-align: middle; - width: .5em; -} -.netatmo svg.loadTimer .loader { - fill: #000000; -} -.netatmo svg.loadTimer .border { - fill: #aaaaaa; -} -.netatmo .updated { - margin: .2em 0; - padding: 0 .5em; - vertical-align: middle; -} -.netatmo .horizontal .module { - display: inline-block; -} -.netatmo .classic .module { - border: 1px solid #ffffff; - border-radius: .25em; - margin: .25em .25em; - overflow: hidden; -} -.netatmo .classic .module .name { - background: #ffffff; - color: #000000; - padding: .125em .25em; - text-align: center; -} -.netatmo .classic .module .data { - padding: .125em .25em; -} -.xxlarge { - font-size: 95px; - letter-spacing: -3px; - line-height: 95px; -} -.netatmo .bubbles .module .name { - text-align: left; -} -.netatmo .bubbles .module .primary, -.netatmo .bubbles .module .secondary, -.netatmo .bubbles .module .data { - text-align: left; -} -.netatmo .bubbles .module .secondary { - text-align: center; - width: 5em; -} -.netatmo .bubbles .module .secondary .CO2 .visual { - border-radius: 1em; - box-shadow: 0 0 .9em 1em; - height: .1em; - margin: 1.5em auto; - width: .1em; -} -.netatmo .bubbles .module .secondary .CO2 .good { - background-color: #32cd32; - color: #32cd32; -} -.netatmo .bubbles .module .secondary .CO2 .average { - background-color: #ffa500; - color: #ffa500; -} -.netatmo .bubbles .module .secondary .CO2 .bad { - background-color: #ff0000; - color: #ff0000; -} -.netatmo .bubbles .module .secondary .WindAngle .visual { - display: inline-block; -} -.netatmo .bubbles .module .data { - width: 8em; -} -.netatmo .bubbles .module .data .flash { - animation: flasher 1s linear infinite; -} -@keyframes flasher { - 50% { - opacity: 0; - } -} diff --git a/netatmo.js b/netatmo.js index 60210114..972f02a8 100755 --- a/netatmo.js +++ b/netatmo.js @@ -4,15 +4,14 @@ * By Christopher Fenner http://github.com/CFenner * MIT Licensed. */ - /* global $, Q, moment, Module, Log */ +/* global Module, Log */ Module.register('netatmo', { - // default config, + // default config defaults: { - refreshToken: null, + initialDelay: 0, updateInterval: 3, // every 3 minutes, refresh interval on netatmo is 10 minutes animationSpeed: 1000, - design: 'classic', //bubbles - hideLoadTimer: false, + design: 'classic', // or bubbles horizontal: true, lastMessageThreshold: 600, // in seconds (10 minutes) showLastMessage: true, @@ -20,505 +19,312 @@ Module.register('netatmo', { showRadio: true, showWiFi: true, showTrend: true, - api: { - base: 'https://api.netatmo.com/', - authEndpoint: 'oauth2/token', - authPayload: 'grant_type=refresh_token&refresh_token={0}&client_id={1}&client_secret={2}', - dataEndpoint: 'api/getstationsdata', - dataPayload: 'access_token={0}' - } + showMeasurementIcon: true, + showMeasurementLabel: true, + apiBase: 'api.netatmo.com', + authEndpoint: '/oauth2/token', + dataEndpoint: '/api/getstationsdata', + fontClassModuleName: 'xsmall', + fontClassPrimary: 'large', + fontClassSecondary: 'xsmall', + fontClassMeasurement: 'xsmall', + thresholdCO2Average: 800, + thresholdCO2Bad: 1800, }, - // init method - start: function() { - Log.info('Starting module: ' + this.name); - this.α = 0; - // set interval for reload timer - this.t = this.config.updateInterval * 60 * 1000 / 360; - // run timer - this.updateLoad(); + notifications: { + AUTH: 'NETATMO_AUTH', + AUTH_RESPONSE: 'NETATMO_AUTH_RESPONSE', + DATA: 'NETATMO_DATA', + DATA_RESPONSE: 'NETATMO_DATA_RESPONSE', + }, + moduleType: { + MAIN: 'NAMain', + INDOOR: 'NAModule4', + OUTDOOR: 'NAModule1', + RAIN: 'NAModule3', + WIND: 'NAModule2', }, - updateLoad: function() { - // Log.info(this.name + " refresh triggered"); - var that = this; - return Q.fcall( - this.load.token.bind(that), - this.renderError.bind(that) - ).then( - this.load.data.bind(that), - this.renderError.bind(that) - ).then( - this.renderAll.bind(that) - ).done( - this.updateWait.bind(that) - ); + measurement: { + CO2: 'CO2', + HUMIDITY: 'Humidity', + TEMPERATURE: 'Temperature', + TEMPERATURE_TREND: 'temp_trend', + PRESSURE: 'Pressure', + PRESSURE_TREND: 'pressure_trend', + NOISE: 'Noise', + WIND_STRENGTH: 'WindStrength', + WIND_ANGLE: 'WindAngle', + GUST_STRENGTH: 'GustStrength', + GUST_ANGLE: 'GustAngle', + RAIN: 'Rain', + RAIN_PER_HOUR: 'sum_rain_1', + RAIN_PER_DAY: 'sum_rain_24', + }, + // init method + start: function () { + const self = this + Log.info(`Starting module: ${this.name}`) + self.loaded = false + self.moduleList = [] + + // get a new token at start-up. When receive, GET_CAMERA_EVENTS will be requested + setTimeout(function () { + self.sendSocketNotification(self.notifications.DATA, self.config) + }, this.config.initialDelay * 1000) + + // set auto-update + setInterval(function () { + // request directly the data, with the previous token. When the token will become invalid (error 403), it will be requested again + self.sendSocketNotification(self.notifications.DATA, self.config) + }, this.config.updateInterval * 60 * 1000 + this.config.initialDelay * 1000) }, - updateWait: function() { - this.α++; - this.α %= 360; - var r = (this.α * Math.PI / 180); - var x = Math.sin(r) * 125; - var y = Math.cos(r) * -125; - var mid = (this.α > 180) ? 1 : 0; - var anim = 'M 0 0 v -125 A 125 125 1 ' + - mid + ' 1 ' + - x + ' ' + - y + ' z'; + updateModuleList: function (station) { + let moduleList = [] + + moduleList.push(this.getModule(station)) - var loader = $('.netatmo .loadTimer .loader'); - if (loader.length > 0) { - loader.attr('d', anim); + station.modules.forEach(function (module) { + moduleList.push(this.getModule(module)) + }.bind(this)) + + if (station.reachable) { this.lastUpdate = station.dashboard_data.time_utc } + this.loaded = true + if (JSON.stringify(this.moduleList) === JSON.stringify(moduleList)) { + return } - var border = $('.netatmo .loadTimer .border'); - if (border.length > 0) { - border.attr('d', anim); + // reorder modules + if (this.config.moduleOrder && this.config.moduleOrder.length > 0) { + const reorderedModuleList = [] + for (const moduleName of this.config.moduleOrder) { + for (const module of moduleList) { + if (module.name === moduleName) { + reorderedModuleList.push(module) + } + } + } + moduleList = reorderedModuleList } - if (r === 0) { - // refresh data - this.updateLoad(); + this.moduleList = moduleList + }, + getModule: function (module) { + const result = {} + + result.name = module.module_name + result.measurementList = [] + + if (!module.reachable) return result + + // TODO check module.reachable + let primaryType = '' + let primaryValue = '' + let secondaryType = '' + let secondaryValue = '' + + // add module sensor measurements + switch (module.type) { + case this.moduleType.MAIN: + result.measurementList.push(this.getMeasurement(module, this.measurement.PRESSURE)) + if (this.config.showTrend) { result.measurementList.push(this.getMeasurement(module, this.measurement.PRESSURE_TREND)) } + result.measurementList.push(this.getMeasurement(module, this.measurement.NOISE)) + // break; fallthrough + case this.moduleType.INDOOR: + if (this.config.design === 'bubbles') { + secondaryType = this.measurement.CO2 + secondaryValue = module.dashboard_data[secondaryType] + result.secondary = { visualClass: this.getCO2Status(secondaryValue), value: this.getValue(secondaryType, secondaryValue), class: this.kebabCase(secondaryType) } + } else { + result.measurementList.push(this.getMeasurement(module, this.measurement.CO2)) + } + // break; fallthrough + case this.moduleType.OUTDOOR: + if (this.config.design === 'bubbles') { + primaryType = this.measurement.TEMPERATURE + primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' + result.primary = { unit: '', value: this.getValue(primaryType, primaryValue), class: this.kebabCase(primaryType) } + } else { + result.measurementList.push(this.getMeasurement(module, this.measurement.TEMPERATURE)) + } + if (this.config.showTrend) { result.measurementList.push(this.getMeasurement(module, this.measurement.TEMPERATURE_TREND)) } + result.measurementList.push(this.getMeasurement(module, this.measurement.HUMIDITY)) + break + case this.moduleType.WIND: + if (this.config.design === 'bubbles') { + primaryType = this.measurement.WIND_STRENGTH + primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' + result.primary = { unit: 'm/s', value: primaryValue, class: this.kebabCase(primaryType) } + secondaryType = this.measurement.WIND_ANGLE + secondaryValue = module.dashboard_data[secondaryType] + result.secondary = { visualClass: 'xlarge wi wi-direction-up', value: this.getValue(secondaryType, secondaryValue), class: this.kebabCase(secondaryType) } + } else { + result.measurementList.push(this.getMeasurement(module, this.measurement.WIND_STRENGTH)) + result.measurementList.push(this.getMeasurement(module, this.measurement.WIND_ANGLE)) + } + // $('
').addClass('visual xlarge wi wi-direction-up').css('transform', 'rotate(' + value + 'deg)') + result.measurementList.push(this.getMeasurement(module, this.measurement.GUST_STRENGTH)) + result.measurementList.push(this.getMeasurement(module, this.measurement.GUST_ANGLE)) + break + case this.moduleType.RAIN: + if (this.config.design === 'bubbles') { + primaryType = this.measurement.RAIN + primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' + result.primary = { unit: 'mm/h', value: primaryValue, class: this.kebabCase(primaryType) } + } else { + result.measurementList.push(this.getMeasurement(module, this.measurement.RAIN)) + } + result.measurementList.push(this.getMeasurement(module, this.measurement.RAIN_PER_HOUR)) + result.measurementList.push(this.getMeasurement(module, this.measurement.RAIN_PER_DAY)) + break + default: + break + } + // add module specific measurements + if (module.type === this.moduleType.MAIN) { + if (this.config.showWiFi) { result.measurementList.push(this.getMeasurement(module, 'wifi', module.wifi_status)) } } else { - // wait further - setTimeout(this.updateWait.bind(this), this.t); + if (this.config.showRadio) { result.measurementList.push(this.getMeasurement(module, 'radio', module.rf_status)) } + if (this.config.showBattery) { result.measurementList.push(this.getMeasurement(module, 'battery', module.battery_percent)) } } + // reorder measurements + if (this.config.dataOrder && this.config.dataOrder.length > 0) { + const reorderedMeasurementList = [] + for (const measurementName of this.config.dataOrder) { + for (const measurement of result.measurementList) { + if (measurement.name === measurementName) { + reorderedMeasurementList.push(measurement) + } + } + } + result.measurementList = reorderedMeasurementList + } + return result }, - load: { - token: function() { - return Q($.ajax({ - type: 'POST', - url: this.config.api.base + this.config.api.authEndpoint, - data: this.config.api.authPayload.format( - this.config.refreshToken, - this.config.clientId, - this.config.clientSecret) - })); - }, - data: function(data) { - // Log.info(this.name + " token loaded "+data.access_token); - this.config.refreshToken = data.refresh_token; - // call for station data - return Q($.ajax({ - url: this.config.api.base + this.config.api.dataEndpoint, - data: this.config.api.dataPayload.format(data.access_token) - })); + getMeasurement: function (module, measurement, value) { + value = value || module.dashboard_data[measurement] + if (measurement === this.measurement.TEMPERATURE_TREND || measurement === this.measurement.PRESSURE_TREND) { + value = value || 'UNDEFINED' + value = this.translate(value.toUpperCase()) + } + return { + name: measurement, + value: this.getValue(measurement, value), + icon: this.getIcon(measurement), + label: this.translate(measurement.toUpperCase()), } }, - renderAll: function(data) { - var device = data.body.devices[0]; - this.lastUpdate = device.dashboard_data.time_utc; - // render modules - this.dom = this.getDesign(this.config.design).render(device); - this.updateDom(this.config.animationSpeed); - return Q({}); + kebabCase: function (name) { + return name.replace(/([a-z])([A-Z])/g, '$1-$2') + .replace(/[\s_]+/g, '-') + .toLowerCase() }, - renderError: function(reason) { - /* eslint-disable no-console */ - console.log("error " + reason); - /* eslint-enable no-console */ - // enable display of error messages - /* - $(netatmo.location).updateWithText( - "could not load data: "+reason.responseJSON.error, - this.config.fadeInterval - ); - */ + getValue: function (measurement, value) { + if (!value) { return value } + switch (measurement) { + case this.measurement.CO2: + return value.toFixed(0) + ' ppm' + case this.measurement.NOISE: + return value.toFixed(0) + ' dB' + case this.measurement.HUMIDITY: + case 'battery': + case 'wifi': + case 'radio': + return value.toFixed(0) + '%' + case this.measurement.PRESSURE: + return value.toFixed(0) + ' mbar' + case this.measurement.TEMPERATURE: + return value.toFixed(1) + '°' + case this.measurement.RAIN: + case this.measurement.RAIN_PER_HOUR: + case this.measurement.RAIN_PER_DAY: + return value.toFixed(1) + ' mm/h' + case this.measurement.WIND_STRENGTH: + case this.measurement.GUST_STRENGTH: + return value.toFixed(0) + ' m/s' + case this.measurement.WIND_ANGLE: + case this.measurement.GUST_ANGLE: + return this.direction(value) + ' | ' + value + '°' + default: + return value + } }, - formatter: { - value: function(dataType, value) { - if(!value) - return value; - switch (dataType) { - case 'CO2': - return value.toFixed(0) + ' ppm'; - case 'Noise': - return value.toFixed(0) + ' dB'; - case 'Humidity': - case 'Battery': - case 'WiFi': - case 'Radio': - return value.toFixed(0) + '%'; - case 'Pressure': - return value.toFixed(0) + ' mbar'; - case 'Temperature': - return value.toFixed(1) + '°'; - case 'Rain': - case 'sum_rain_24': - case 'sum_rain_1': - return value.toFixed(1) + ' mm/h'; - case 'WindStrength': - case 'GustStrength': - return value.toFixed(0) + ' m/s'; - case 'WindAngle': - case 'GustAngle': - return this.direction(value) + ' | ' + value + '°'; - default: - return value; - } - }, - direction: function(value){ - if(value < 11.25) return 'N'; - if(value < 33.75) return 'NNE'; - if(value < 56.25) return 'NE'; - if(value < 78.75) return 'ENE'; - if(value < 101.25) return 'E'; - if(value < 123.75) return 'ESE'; - if(value < 146.25) return 'SE'; - if(value < 168.75) return 'SSE'; - if(value < 191.25) return 'S'; - if(value < 213.75) return 'SSW'; - if(value < 236.25) return 'SW'; - if(value < 258.75) return 'WSW'; - if(value < 281.25) return 'W'; - if(value < 303.75) return 'WNW'; - if(value < 326.25) return 'NW'; - if(value < 348.75) return 'NNW'; - return 'N'; - }, - rain: function(){ - return ''; - }, - clazz: function(dataType) { - /* unused - switch (dataType) { - case 'CO2': - return 'wi-na'; - case 'Noise': - return 'wi-na'; - case 'Humidity': - return 'wi-humidity'; - case 'Pressure': - return 'wi-barometer'; - case 'Temperature': - return 'wi-thermometer'; - case 'Rain': - return 'wi-raindrops'; - case 'Wind': - return 'wi-na'; - default: - return ''; - }*/ - return ''; + getDirection: function (value) { + if (value < 11.25) return 'N' + if (value < 33.75) return 'NNE' + if (value < 56.25) return 'NE' + if (value < 78.75) return 'ENE' + if (value < 101.25) return 'E' + if (value < 123.75) return 'ESE' + if (value < 146.25) return 'SE' + if (value < 168.75) return 'SSE' + if (value < 191.25) return 'S' + if (value < 213.75) return 'SSW' + if (value < 236.25) return 'SW' + if (value < 258.75) return 'WSW' + if (value < 281.25) return 'W' + if (value < 303.75) return 'WNW' + if (value < 326.25) return 'NW' + if (value < 348.75) return 'NNW' + return 'N' + }, + getCO2Status: function (value) { + if (!value || value === 'undefined' || value < 0) return 'undefined' + if (value >= this.config.thresholdCO2Bad) return 'bad' + if (value >= this.config.thresholdCO2Average) return 'average' + return 'good' + }, + getIcon: function (dataType) { + switch (dataType) { + // case this.measurement.CO2: + // return 'fa-lungs' + case this.measurement.NOISE: + return 'fa-volume-up' + case this.measurement.HUMIDITY: + return 'fa-tint' + // case this.measurement.PRESSURE: + // case this.measurement.PRESSURE: + // case this.measurement.GUST_ANGLE: + // case this.measurement.GUST_STRENGTH: + // case this.measurement.WIND: + // case this.measurement.WIND_ANGLE: + // case this.measurement.WIND_STRENGTH: + // return 'fa-tachometer-alt'; + // case this.measurement.PRESSURE_TREND: + // case this.measurement.TEMPERATURE_TREND: + // return 'fa-long-arrow-alt-right' + case 'wifi': + return 'fa-wifi' + case 'radio': + return 'fa-broadcast-tower' + case 'battery': + return 'fa-battery-three-quarters' + default: + return '' } }, - getDesign: function(design){ - var that = this; - var formatter = this.formatter; - var translator = this.translate; - return { - classic: (function(formatter, translator, that){ - return { - render: function(device){ - var sResult = $('
').addClass('modules').addClass(that.config.design); - if(that.config.horizontal) - sResult.addClass('horizontal'); - var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? - that.config.moduleOrder : - null; - if (aOrderedModuleList) { - for (var moduleName of aOrderedModuleList) { - if (device.module_name === moduleName) { - sResult.append(this.renderModule(device)); - } else { - for (var module of device.modules) { - if (module.module_name === moduleName) { - sResult.append(this.renderModule(module)); - break; - } - } - } - } - } else { - // render station data (main station) - sResult.append(this.renderModule(device)); - // render module data (connected modules) - for (var cnt = 0; cnt < device.modules.length; cnt++) { - sResult.append(this.renderModule(device.modules[cnt])); - } - } - return sResult; - }, - renderModule: function(oModule) { - return $('
').addClass('module').append( - $('
').addClass('data').append(this.renderSensorData(oModule)) - ).append( - $('
').addClass('name small').append(oModule.module_name) - ); - }, - renderSensorData: function(oModule) { - var sResult = $(''); - var aDataTypeList = that.config.dataOrder && that.config.dataOrder.length > 0 ? - that.config.dataOrder : - oModule.data_type; - for (var dataType of aDataTypeList) { - if ($.inArray(dataType, oModule.data_type) > -1) { - sResult.append( - this.renderData( - formatter.clazz(dataType), - dataType, - oModule.dashboard_data[dataType]) - ); - } - } - if(oModule.battery_percent){ - sResult.append(this.renderData(formatter.clazz(dataType), 'Battery', oModule.battery_percent)); - } - return sResult; - }, - renderData: function(clazz, dataType, value) { - return $('').append( - $('
').addClass('small').append( - translator.bind(that)(dataType.toUpperCase()) - ) - ).append( - $('').addClass('small value').append( - formatter.value(dataType, value) - ) - ); - } - }; - })(formatter, translator, that), - bubbles: (function(formatter, translator, that){ - return { - moduleType: { - MAIN: "NAMain", - INDOOR: "NAModule4", - OUTDOOR: "NAModule1", - RAIN: "NAModule3", - WIND: "NAModule2" - }, - render: function(device){ - var sResult = $('
').addClass('modules').addClass(that.config.design); - var aOrderedModuleList = that.config.moduleOrder && that.config.moduleOrder.length > 0 ? - that.config.moduleOrder : - null; - - if (aOrderedModuleList) { - for (var moduleName of aOrderedModuleList) { - if (device.module_name === moduleName) { - sResult.append(this.module(device)); - } else { - for (var module of device.modules) { - if (module.module_name === moduleName) { - sResult.append(this.module(module)); - break; - } - } - } - } - } else { - // render station data (main station) - sResult.append(this.module(device)); - // render module data (connected modules) - for (var cnt = 0; cnt < device.modules.length; cnt++) { - sResult.append(this.module(device.modules[cnt])); - } - } - return sResult; - }, - module: function(module){ - var result = $('
').addClass('module').append( - $('
').addClass('name small').append(module.module_name) - ).append( - $('
').append( - $('').addClass('').append( - $('').append( - this.primary(module) - ).append( - this.secondary(module) - ).append( - this.data(module) - ))) - ); - return result[0].outerHTML; - }, - primary: function(module){ - var result = $(' - + {% endfor %}
').addClass('primary'); - var type; - var value; - switch(module.type){ - case this.moduleType.MAIN: - case this.moduleType.INDOOR: - case this.moduleType.OUTDOOR: - type = 'Temperature'; - value = module.dashboard_data[type]; - $('
').addClass(type).append( - $('
').addClass('large light bright').append(formatter.value(type, value)) - ).appendTo(result); - break; - case this.moduleType.WIND: - type = 'WindStrength'; - value = module.dashboard_data[type]; - $('
').addClass(type).append( - $('
').addClass('large light bright').append(value) - ).append( - $('
').addClass('xsmall').append('m/s') - ).appendTo(result); - break; - case this.moduleType.RAIN: - type = 'Rain'; - value = module.dashboard_data[type]; - $('
').addClass(type).append( - $('
').addClass('large light bright').append(value) - ).append( - $('
').addClass('xsmall').append('mm/h') - ).appendTo(result); - break; - default: - } - return result; - }, - secondary: function(module){ - var result = $('
').addClass('secondary'); - switch(module.type){ - case this.moduleType.MAIN: - case this.moduleType.INDOOR: - var type = 'CO2'; - var value = module.dashboard_data[type]; - var status = value > 1600?'bad':value > 800?'average':'good'; - - $('
').addClass(type).append( - $('
').addClass('visual').addClass(status) - ).append( - $('
').addClass('small value').append(formatter.value(type, value)) - ).appendTo(result); - break; - case this.moduleType.WIND: - type = 'WindAngle'; - value = module.dashboard_data[type]; - - $('
').addClass(type).append( - $('
').addClass('visual xlarge wi wi-direction-up').css('transform', 'rotate(' + value + 'deg)') - ).append( - $('
').addClass('small value').append(formatter.value(type, value)) - ).appendTo(result); - break; - case this.moduleType.OUTDOOR: - case this.moduleType.RAIN: - default: - break; - } - return result; - }, - data: function(module){ - var result = $('
').addClass('data'); - switch(module.type){ - case this.moduleType.MAIN: - this.addTemperatureTrend(result, module); - this.addHumidity(result, module); - this.addPressure(result, module); - this.addPressureTrend(result, module); - this.addNoise(result, module); - this.addWiFi(result, module); - //result += this.addData('max_temp', module.dashboard_data['max_temp']); - //result += this.addData('min_temp', module.dashboard_data['min_temp']); - break; - case this.moduleType.INDOOR: - this.addTemperatureTrend(result, module); - this.addHumidity(result, module); - this.addBattery(result, module); - this.addRadio(result, module); - this.addLastSeen(result, module); - break; - case this.moduleType.OUTDOOR: - this.addTemperatureTrend(result, module); - this.addHumidity(result, module); - this.addBattery(result, module); - this.addRadio(result, module); - this.addLastSeen(result, module); - break; - case this.moduleType.WIND: - this.addData(result, 'GustStrength', module.dashboard_data['GustStrength']); - this.addData(result, 'GustAngle', module.dashboard_data['GustAngle']); - this.addBattery(result, module); - this.addRadio(result, module); - this.addLastSeen(result, module); - break; - case this.moduleType.RAIN: - this.addData(result, 'sum_rain_1', module.dashboard_data['sum_rain_1']); - this.addData(result, 'sum_rain_24', module.dashboard_data['sum_rain_24']); - this.addBattery(result, module); - this.addRadio(result, module); - this.addLastSeen(result, module); - break; - default: - break; - } - return result; - }, - addTemperatureTrend: function(parent, module){ - var value = module.dashboard_data['temp_trend']; - if(!value) - value = 'UNDEFINED' - if(that.config.showTrend) - this.addData(parent, 'temp_trend', translator.bind(that)(value.toUpperCase())); - }, - addPressure: function(parent, module){ - return this.addData(parent, 'Pressure', module.dashboard_data['Pressure']); - }, - addPressureTrend: function(parent, module){ - var value = module.dashboard_data['pressure_trend']; - if(!value) - value = 'UNDEFINED' - if(that.config.showTrend) - this.addData(parent, 'pressure_trend', translator.bind(that)(value.toUpperCase())); - }, - addHumidity: function(parent, module){ - return this.addData(parent, 'Humidity', module.dashboard_data['Humidity']); - }, - addNoise: function(parent, module){ - return this.addData(parent, 'Noise', module.dashboard_data['Noise']); - }, - addBattery: function(parent, module){ - if(that.config.showBattery) - this.addData(parent, 'Battery', module.battery_percent); - }, - addRadio: function(parent, module){ - if(that.config.showRadio) - this.addData(parent, 'Radio', module.rf_status); - }, - addWiFi: function(parent, module){ - if(that.config.showWiFi) - this.addData(parent, 'WiFi', module.wifi_status); - }, - addLastSeen: function(parent, module){ - var duration = Date.now() / 1000 - module.last_message; - if(that.config.showLastMessage && duration > that.config.lastMessageThreshold){ - $('
') - .addClass('small flash') - .append( - translator.bind(that)("LAST_MESSAGE") - + ': ' - + moment.unix(module.last_message).fromNow() - ) - .appendTo(parent); - } - }, - addData: function(parent, type, value){ - return $('
') - .addClass('small') - .append( - translator.bind(that)(type.toUpperCase()) - + ': ' - + formatter.value(type, value) - ) - .appendTo(parent); - } - }; - })(formatter, translator, that) - }[design] + getStyles: function () { + return [`${this.name}.${this.config.design}.css`] }, - getScripts: function() { - return [ - 'String.format.js', - '//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.js', - 'q.min.js', - 'moment.js' - ]; + getTemplate: function () { + return `${this.name}.${this.config.design}.njk` }, - getStyles: function() { - return [ - 'netatmo.css' - ]; + getTemplateData: function () { + return { + loaded: this.loaded, + showLastMessage: this.config.showLastMessage, + showBattery: this.config.showBattery, + showRadio: this.config.showRadio, + showWiFi: this.config.showWiFi, + showTrend: this.config.showTrend, + showMeasurementIcon: this.config.showMeasurementIcon, + showMeasurementLabel: this.config.showMeasurementLabel, + horizontal: this.config.horizontal, + moduleList: this.moduleList, + fontClassModuleName: this.config.fontClassModuleName, + fontClassPrimary: this.config.fontClassPrimary, + fontClassSecondary: this.config.fontClassSecondary, + fontClassMeasurement: this.config.fontClassMeasurement, + } }, - getTranslations: function() { + getTranslations: function () { return { en: 'l10n/en.json', de: 'l10n/de.json', @@ -526,38 +332,35 @@ Module.register('netatmo', { cs: 'l10n/cs.json', nb: 'l10n/nb.json', nn: 'l10n/nn.json', - hu: 'l10n/hu.json' - }; + } }, - getDom: function() { - var dom = $('
').addClass('netatmo'); - if(this.dom){ - dom.append( - this.dom - ).append( - $('
') - .addClass('updated xsmall') - .append(moment.unix(this.lastUpdate).fromNow()) - ); - if(!this.config.hideLoadTimer){ - dom.append($( - '' + - ' ' + - ' ' + - '' - )); - } - }else{ - dom.append($( - '' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - '' - )); + socketNotificationReceived: function (notification, payload) { + const self = this + Log.debug('received ' + notification) + switch (notification) { + case self.notifications.AUTH_RESPONSE: + console.log(payload) + if (payload.status === 'OK') { + self.sendSocketNotification(self.notifications.DATA, self.config) + } else { + console.log('AUTH FAILED ' + payload.message) + } + break + case self.notifications.DATA_RESPONSE: + console.log(payload) + if (payload.status === 'OK') { + console.log('devices returned') + const station = payload.payloadReturn[0] + self.updateModuleList(station) + self.updateDom(self.config.animationSpeed) + } else if (payload.status === 'INVALID_TOKEN') { + // node_module has no valid token, reauthenticate + console.log('DATA FAILED, refreshing token') + self.sendSocketNotification(self.notifications.AUTH, self.config) + } else { + console.log('DATA FAILED ' + payload.message) + } + break } - return dom[0]; - } -}); + }, +}) diff --git a/netatmo.less b/netatmo.less deleted file mode 100644 index 23190c7f..00000000 --- a/netatmo.less +++ /dev/null @@ -1,48 +0,0 @@ -@light: #fff; -@dark: #000; -@dimmed: darken(@light, 33.5%); -@borderColor: @light; - -.netatmo{ - display: inline-block; - - .loading, .loadTimer, .updated{ - display: inline-block; - } - svg.loading{ - height: .6em; - width: .6em; - - circle{ - cx: 50; - cy: 50; - fill: none; - r: 40; - stroke-linecap: round; - } - .inner{ - stroke: @light; - stroke-width: 6; - } - .outer{ - stroke: @dimmed; - stroke-width: 10; - } - } - svg.loadTimer { - height: .5em; - margin: .2em 0; - vertical-align: middle; - width: .5em; - .loader{ fill: @dark;} - .border{ fill: @dimmed} - } - .updated{ - margin: .2em 0; - padding: 0 .5em; - vertical-align: middle; - } -} - -@import 'netatmo.classic'; -@import 'netatmo.bubbles'; diff --git a/node_helper.js b/node_helper.js new file mode 100644 index 00000000..cbebf908 --- /dev/null +++ b/node_helper.js @@ -0,0 +1,153 @@ +/* Magic Mirror + * Module: MagicMirror-Netatmo-Module + * + * By Christopher Fenner https://github.com/CFenner + * MIT Licensed. + */ +const NodeHelper = require('node_helper') +const https = require('https') +const URLSearchParams = require('@ungap/url-search-params') + +module.exports = NodeHelper.create({ + start: function () { + console.log('Netatmo helper started ...') + this.token = null + this.token_time = null + }, + notifications: { + AUTH: 'NETATMO_AUTH', + AUTH_RESPONSE: 'NETATMO_AUTH_RESPONSE', + DATA: 'NETATMO_DATA', + DATA_RESPONSE: 'NETATMO_DATA_RESPONSE', + }, + authenticate: function (config) { + const self = this + self.config = config + + // TODO: only update if token is invalid + + const req = https.request({ + hostname: self.config.apiBase, + path: self.config.authEndpoint, + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }, self.callbackAuthenticate.bind(self)) + + req.on('error', function (e) { + console.log('There is a problem with your request:', e.message) + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + // instanceID: self.config.instanceID, + payloadReturn: e.message, + }) + }) + + req.write(new URLSearchParams({ + scope: 'read_station', + grant_type: 'password', + username: self.config.username, + password: self.config.password, + client_id: self.config.clientId, + client_secret: self.config.clientSecret, + }).toString()) + + req.end() + }, + loadData: function (config) { + const self = this + if (self.token === null) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: 400, + status: 'INVALID_TOKEN', + message: 'token not set', + }) + return + } + + self.config = config + const req = https.request({ + hostname: self.config.apiBase, + path: self.config.dataEndpoint, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${self.token}`, + }, + }, self.callbackData.bind(self)) + + req.on('error', function (e) { + console.log('There is a problem with your request:', e.message) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: e.message, + status: 'NOTOK', + message: e.message, + }) + }) + req.end() + }, + callbackAuthenticate: function (response) { + const self = this + let result = '' + + response.on('error', function (e) { console.log('error', e) }) + response.on('data', function (chunk) { result += chunk }) + response.on('end', function () { + result = JSON.parse(result) + if (response.statusCode === 200) { + console.log('UPDATING TOKEN ' + result.access_token) + self.token = result.access_token + self.token_time = new Date() + // we got a new token, save it to main file to allow it to request the datas + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + status: 'OK', + }) + } else { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + // instanceID: self.config.instanceID, + payloadReturn: response.statusCode, + status: 'NOTOK', + message: result, + }) + } + }) + }, + callbackData: function (response) { + const self = this + let result = '' + + response.on('error', function (e) { console.log('error', e) }) + response.on('data', function (chunk) { result += chunk }) + response.on('end', function () { + result = JSON.parse(result) + if (response.statusCode === 200) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: result.body.devices, + status: 'OK', + }) + } else if (response.statusCode === 403) { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: response.statusCode, + status: 'INVALID_TOKEN', + message: result, + }) + } else { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: response.statusCode, + status: 'NOTOK', + message: result, + }) + } + }) + }, + socketNotificationReceived: function (notification, payload) { + switch (notification) { + case this.notifications.AUTH: + this.authenticate(payload) + break + case this.notifications.DATA: + this.loadData(payload) + break + } + }, +}) diff --git a/package-lock.json b/package-lock.json index 02be8a55..7ccb2b83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -180,18 +180,17 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@ungap/url-search-params": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", + "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw==" + }, "JSV": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -216,12 +215,6 @@ "uri-js": "^4.2.2" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -243,12 +236,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, "array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", @@ -262,10 +249,10 @@ "is-string": "^1.0.7" } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "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-union": { @@ -291,18 +278,6 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -371,33 +346,6 @@ "supports-color": "^7.1.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, "clone-regexp": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", @@ -428,24 +376,21 @@ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", @@ -476,22 +421,6 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "csslint": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz", - "integrity": "sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=", - "dev": true, - "requires": { - "clone": "~2.1.0", - "parserlib": "~1.1.1" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -540,11 +469,14 @@ "object-keys": "^1.0.12" } }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } }, "dir-glob": { "version": "3.0.1", @@ -564,17 +496,30 @@ "esutils": "^2.0.2" } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "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, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } }, "error-ex": { "version": "1.3.2", @@ -876,12 +821,6 @@ "eslint-visitor-keys": "^3.1.0" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -912,12 +851,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, "execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -927,38 +860,6 @@ "clone-regexp": "^2.1.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "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, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1016,24 +917,6 @@ "reusify": "^1.0.4" } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1061,49 +944,6 @@ "locate-path": "^2.0.0" } }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1120,21 +960,6 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1180,12 +1005,6 @@ "get-intrinsic": "^1.1.1" } }, - "getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1209,41 +1028,6 @@ "is-glob": "^4.0.3" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", @@ -1273,826 +1057,74 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, - "grunt": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz", - "integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==", - "dev": true, - "requires": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.2", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true, - "requires": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } + "optional": true }, - "grunt-contrib-csslint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-2.0.0.tgz", - "integrity": "sha1-MSnZTf5Qc1fyMzfSSunpqkudV98=", + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "chalk": "^1.0.0", - "csslint": "^1.0.0", - "lodash": "^4.8.2", - "strip-json-comments": "^2.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "function-bind": "^1.1.1" } }, - "grunt-contrib-eslint": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-eslint/-/grunt-contrib-eslint-0.0.5.tgz", - "integrity": "sha1-byCW5DJitJ1erxOxUy38oArJybA=", + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "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 + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "eslint": ">0.7.3" + "has-symbols": "^1.0.2" } }, - "grunt-contrib-uglify": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz", - "integrity": "sha512-UXsTpeP0pytpTYlmll3RDndsRXfdwmrf1tI/AtD/PrArQAzGmKMvj83aVt3D8egWlE6KqPjsJBLCCvfC52LI/A==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "maxmin": "^2.1.0", - "uglify-js": "~3.4.0", - "uri-path": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-jsonlint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.1.0.tgz", - "integrity": "sha1-ox7pckCu4/NDyiY8Rb1TIGMSfbI=", - "dev": true, - "requires": { - "jsonlint": "1.6.2", - "strip-json-comments": "^2.0.0" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true - }, - "grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "requires": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "requires": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - } - }, - "grunt-yamllint": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/grunt-yamllint/-/grunt-yamllint-0.3.0.tgz", - "integrity": "sha1-EAP3n5uluSMVedOOr8M/awmNdPM=", - "dev": true, - "requires": { - "async": "^2.1.5", - "chalk": "^1.1.3", - "js-yaml": "^3.8.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gruntify-eslint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gruntify-eslint/-/gruntify-eslint-5.0.0.tgz", - "integrity": "sha512-pa2sXHK9+U4dCGdGSIMkpJARNwRStdLBsddNxmSHSSWROUdhWMrXvFWm6pj48zJhyV3Qy068VIuF1seYIvc0cw==", - "dev": true, - "requires": { - "eslint": "^5.0.0" - }, - "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 - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - } - }, - "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" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "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=", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", - "dev": true, - "requires": { - "duplexer": "^0.1.1" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "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 - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "lru-cache": "^6.0.0" } }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, "hosted-git-info": { @@ -2115,6 +1147,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -2125,6 +1158,13 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2175,109 +1215,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -2289,22 +1226,6 @@ "side-channel": "^1.0.4" } }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -2360,12 +1281,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2402,15 +1317,6 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "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-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2427,15 +1333,6 @@ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", @@ -2466,15 +1363,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2484,10 +1372,10 @@ "call-bind": "^1.0.2" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, "isexe": { @@ -2496,12 +1384,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2545,13 +1427,13 @@ } }, "jsonlint": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", + "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", "dev": true, "requires": { - "JSV": ">= 4.0.x", - "nomnom": ">= 1.5.x" + "JSV": "^4.0.x", + "nomnom": "^1.5.x" } }, "kind-of": { @@ -2566,6 +1448,24 @@ "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", "dev": true }, + "less": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2576,34 +1476,19 @@ "type-check": "~0.4.0" } }, - "liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dev": true, - "requires": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - } + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" } }, "lines-and-columns": { @@ -2622,12 +1507,6 @@ "path-exists": "^3.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2649,93 +1528,66 @@ "yallist": "^4.0.0" } }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "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, + "optional": true, "requires": { - "kind-of": "^6.0.2" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + } } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } }, - "maxmin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", - "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "markdownlint": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz", + "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==", "dev": true, "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^3.0.0", - "pretty-bytes": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "markdown-it": "12.3.2" } }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, "meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", @@ -2780,10 +1632,17 @@ "picomatch": "^2.2.3" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "min-indent": { @@ -2818,22 +1677,16 @@ "kind-of": "^6.0.3" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "nanoid": { @@ -2848,11 +1701,29 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } }, "nomnom": { "version": "1.8.1", @@ -2889,15 +1760,6 @@ } } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -2933,18 +1795,6 @@ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", @@ -2969,37 +1819,6 @@ "object-keys": "^1.1.1" } }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", @@ -3020,15 +1839,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -3043,28 +1853,6 @@ "word-wrap": "^1.2.3" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3098,17 +1886,6 @@ "callsites": "^3.0.0" } }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -3121,16 +1898,10 @@ "lines-and-columns": "^1.1.6" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parserlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz", - "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=", + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, "path-exists": { @@ -3145,12 +1916,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3163,19 +1928,16 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "path-type": { @@ -3196,6 +1958,13 @@ "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, + "optional": true + }, "postcss": { "version": "8.4.5", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", @@ -3247,20 +2016,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "optional": true }, "punycode": { "version": "2.1.1", @@ -3392,13 +2153,14 @@ } } }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "resolve": "^1.9.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, "redent": { @@ -3434,31 +2196,17 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^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 }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "reusify": { "version": "1.0.4", @@ -3475,12 +2223,6 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3490,20 +2232,19 @@ "queue-microtask": "^1.2.2" } }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true }, "semver": { "version": "6.3.0", @@ -3549,53 +2290,18 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } - } - }, "snyk": { "version": "1.836.0", "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.836.0.tgz", - "integrity": "sha512-iPJ4SCAEArquqo1Aq11KbHOWEu0OFauRn/4Acoq+hDqgTYN9IV8i5d6uHPAo3ePV2g24nF0Pb9N0sxIGgp833w==" + "integrity": "sha512-iPJ4SCAEArquqo1Aq11KbHOWEu0OFauRn/4Acoq+hDqgTYN9IV8i5d6uHPAo3ePV2g24nF0Pb9N0sxIGgp833w==", + "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==", - "dev": true + "dev": true, + "optional": true }, "source-map-js": { "version": "1.0.2", @@ -3641,39 +2347,6 @@ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -3944,67 +2617,12 @@ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4033,9 +2651,9 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "type-check": { @@ -4059,15 +2677,11 @@ "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", "dev": true }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - } + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true }, "unbox-primitive": { "version": "1.0.1", @@ -4081,28 +2695,12 @@ "which-boxed-primitive": "^1.0.2" } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, "underscore": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", "dev": true }, - "underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "requires": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4112,12 +2710,6 @@ "punycode": "^2.1.0" } }, - "uri-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4130,13 +2722,14 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validate-npm-package-license": { @@ -4183,26 +2776,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, "write-file-atomic": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz", diff --git a/package.json b/package.json index bc1eaf75..50276b0e 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,13 @@ "description": "", "main": "netatmo.js", "scripts": { - "test": "grunt test", + "compile:css": "lessc netatmo.bubbles.less netatmo.bubbles.css && lessc netatmo.classic.less netatmo.classic.css", "validate:css": "stylelint **/*.css", "validate:js": "eslint **/*.js", "fix:js": "eslint --fix **/*.js", + "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --in-place ';'", + "validate:md": "markdownlint *.md", + "validate": "npm run validate:css && npm run validate:js && npm run validate:json && npm run validate:md", "snyk-protect": "snyk protect", "prepublish": "npm run snyk-protect" }, @@ -27,38 +30,15 @@ "eslint-plugin-import": "^2.25.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^5.2.0", - "grunt": "^1.0.1", - "grunt-cli": "^1.2.0", - "grunt-contrib-csslint": "^2.0.0", - "grunt-contrib-eslint": "0.0.5", - "grunt-contrib-uglify": "^3.4.0", - "grunt-jsonlint": "^1.1.0", - "grunt-yamllint": "^0.3.0", - "gruntify-eslint": "^5.0.0", + "jsonlint": "^1.6.3", + "less": "^4.1.2", + "markdownlint": "^0.25.1", + "snyk": "^1.317.0", "stylelint": "^14.2.0", "stylelint-config-standard": "^24.0.0" }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "browser": true, - "es6": true, - "node": true - }, - "ecmaFeatures": { - "modules": true, - "jsx": true - }, - "parser": "espree", - "parserOptions": { - "ecmaVersion": 6, - "ecmaFeatures": { - "globalReturn": true - } - } - }, "snyk": true, "dependencies": { - "snyk": "^1.317.0" + "@ungap/url-search-params": "^0.2.2" } } diff --git a/q.min.js b/q.min.js deleted file mode 100644 index 8f86a3b4..00000000 --- a/q.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){"use strict";if("function"==typeof bootstrap)bootstrap("promise",a);else if("object"==typeof exports&&"object"==typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define(a);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeQ=a}else{if("undefined"==typeof window&&"undefined"==typeof self)throw new Error("This environment was not anticipated by Q. Please file a bug.");var b="undefined"!=typeof window?window:self,c=b.Q;b.Q=a(),b.Q.noConflict=function(){return b.Q=c,this}}}(function(){"use strict";function a(a){return function(){return W.apply(a,arguments)}}function b(a){return a===Object(a)}function c(a){return"[object StopIteration]"===ca(a)||a instanceof S}function d(a,b){if(P&&b.stack&&"object"==typeof a&&null!==a&&a.stack&&-1===a.stack.indexOf(da)){for(var c=[],d=b;d;d=d.source)d.stack&&c.unshift(d.stack);c.unshift(a.stack);var f=c.join("\n"+da+"\n");a.stack=e(f)}}function e(a){for(var b=a.split("\n"),c=[],d=0;d=T&&ia>=d}function i(){if(P)try{throw new Error}catch(a){var b=a.stack.split("\n"),c=b[0].indexOf("@")>0?b[1]:b[2],d=g(c);if(!d)return;return R=d[0],d[1]}}function j(a,b,c){return function(){return"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(b+" is deprecated, use "+c+" instead.",new Error("").stack),a.apply(a,arguments)}}function k(a){return a instanceof o?a:s(a)?B(a):A(a)}function l(){function a(a){b=a,f.source=a,Y(c,function(b,c){k.nextTick(function(){a.promiseDispatch.apply(a,c)})},void 0),c=void 0,d=void 0}var b,c=[],d=[],e=_(l.prototype),f=_(o.prototype);if(f.promiseDispatch=function(a,e,f){var g=X(arguments);c?(c.push(g),"when"===e&&f[1]&&d.push(f[1])):k.nextTick(function(){b.promiseDispatch.apply(b,g)})},f.valueOf=function(){if(c)return f;var a=q(b);return r(a)&&(b=a),a},f.inspect=function(){return b?b.inspect():{state:"pending"}},k.longStackSupport&&P)try{throw new Error}catch(g){f.stack=g.stack.substring(g.stack.indexOf("\n")+1)}return e.promise=f,e.resolve=function(c){b||a(k(c))},e.fulfill=function(c){b||a(A(c))},e.reject=function(c){b||a(z(c))},e.notify=function(a){b||Y(d,function(b,c){k.nextTick(function(){c(a)})},void 0)},e}function m(a){if("function"!=typeof a)throw new TypeError("resolver must be a function.");var b=l();try{a(b.resolve,b.reject,b.notify)}catch(c){b.reject(c)}return b.promise}function n(a){return m(function(b,c){for(var d=0,e=a.length;e>d;d++)k(a[d]).then(b,c)})}function o(a,b,c){void 0===b&&(b=function(a){return z(new Error("Promise does not support operation: "+a))}),void 0===c&&(c=function(){return{state:"unknown"}});var d=_(o.prototype);if(d.promiseDispatch=function(c,e,f){var g;try{g=a[e]?a[e].apply(d,f):b.call(d,e,f)}catch(h){g=z(h)}c&&c(g)},d.inspect=c,c){var e=c();"rejected"===e.state&&(d.exception=e.reason),d.valueOf=function(){var a=c();return"pending"===a.state||"rejected"===a.state?d:a.value}}return d}function p(a,b,c,d){return k(a).then(b,c,d)}function q(a){if(r(a)){var b=a.inspect();if("fulfilled"===b.state)return b.value}return a}function r(a){return a instanceof o}function s(a){return b(a)&&"function"==typeof a.then}function t(a){return r(a)&&"pending"===a.inspect().state}function u(a){return!r(a)||"fulfilled"===a.inspect().state}function v(a){return r(a)&&"rejected"===a.inspect().state}function w(){ea.length=0,fa.length=0,ha||(ha=!0)}function x(a,b){ha&&("object"==typeof process&&"function"==typeof process.emit&&k.nextTick.runAfter(function(){-1!==Z(fa,a)&&(process.emit("unhandledRejection",b,a),ga.push(a))}),fa.push(a),b&&"undefined"!=typeof b.stack?ea.push(b.stack):ea.push("(no stack) "+b))}function y(a){if(ha){var b=Z(fa,a);-1!==b&&("object"==typeof process&&"function"==typeof process.emit&&k.nextTick.runAfter(function(){var c=Z(ga,a);-1!==c&&(process.emit("rejectionHandled",ea[b],a),ga.splice(c,1))}),fa.splice(b,1),ea.splice(b,1))}}function z(a){var b=o({when:function(b){return b&&y(this),b?b(a):this}},function(){return this},function(){return{state:"rejected",reason:a}});return x(b,a),b}function A(a){return o({when:function(){return a},get:function(b){return a[b]},set:function(b,c){a[b]=c},"delete":function(b){delete a[b]},post:function(b,c){return null===b||void 0===b?a.apply(void 0,c):a[b].apply(a,c)},apply:function(b,c){return a.apply(b,c)},keys:function(){return ba(a)}},void 0,function(){return{state:"fulfilled",value:a}})}function B(a){var b=l();return k.nextTick(function(){try{a.then(b.resolve,b.reject,b.notify)}catch(c){b.reject(c)}}),b.promise}function C(a){return o({isDef:function(){}},function(b,c){return I(a,b,c)},function(){return k(a).inspect()})}function D(a,b,c){return k(a).spread(b,c)}function E(a){return function(){function b(a,b){var g;if("undefined"==typeof StopIteration){try{g=d[a](b)}catch(h){return z(h)}return g.done?k(g.value):p(g.value,e,f)}try{g=d[a](b)}catch(h){return c(h)?k(h.value):z(h)}return p(g,e,f)}var d=a.apply(this,arguments),e=b.bind(b,"next"),f=b.bind(b,"throw");return e()}}function F(a){k.done(k.async(a)())}function G(a){throw new S(a)}function H(a){return function(){return D([this,J(arguments)],function(b,c){return a.apply(b,c)})}}function I(a,b,c){return k(a).dispatch(b,c)}function J(a){return p(a,function(a){var b=0,c=l();return Y(a,function(d,e,f){var g;r(e)&&"fulfilled"===(g=e.inspect()).state?a[f]=g.value:(++b,p(e,function(d){a[f]=d,0===--b&&c.resolve(a)},c.reject,function(a){c.notify({index:f,value:a})}))},void 0),0===b&&c.resolve(a),c.promise})}function K(a){if(0===a.length)return k.resolve();var b=k.defer(),c=0;return Y(a,function(d,e,f){function g(a){b.resolve(a)}function h(a){c--,0===c&&(a.message="Q can't get fulfillment value from any promise, all promises were rejected. Last error message: "+a.message,b.reject(a))}function i(a){b.notify({index:f,value:a})}var j=a[f];c++,p(j,g,h,i)},void 0),b.promise}function L(a){return p(a,function(a){return a=$(a,k),p(J($(a,function(a){return p(a,U,U)})),function(){return a})})}function M(a){return k(a).allSettled()}function N(a,b){return k(a).then(void 0,void 0,b)}function O(a,b){return k(a).nodeify(b)}var P=!1;try{throw new Error}catch(Q){P=!!Q.stack}var R,S,T=i(),U=function(){},V=function(){function a(){for(var a,d;c.next;)c=c.next,a=c.task,c.task=void 0,d=c.domain,d&&(c.domain=void 0,d.enter()),b(a,d);for(;h.length;)a=h.pop(),b(a);e=!1}function b(b,c){try{b()}catch(d){if(g)throw c&&c.exit(),setTimeout(a,0),c&&c.enter(),d;setTimeout(function(){throw d},0)}c&&c.exit()}var c={task:void 0,next:null},d=c,e=!1,f=void 0,g=!1,h=[];if(V=function(a){d=d.next={task:a,domain:g&&process.domain,next:null},e||(e=!0,f())},"object"==typeof process&&"[object process]"===process.toString()&&process.nextTick)g=!0,f=function(){process.nextTick(a)};else if("function"==typeof setImmediate)f="undefined"!=typeof window?setImmediate.bind(window,a):function(){setImmediate(a)};else if("undefined"!=typeof MessageChannel){var i=new MessageChannel;i.port1.onmessage=function(){f=j,i.port1.onmessage=a,a()};var j=function(){i.port2.postMessage(0)};f=function(){setTimeout(a,0),j()}}else f=function(){setTimeout(a,0)};return V.runAfter=function(a){h.push(a),e||(e=!0,f())},V}(),W=Function.call,X=a(Array.prototype.slice),Y=a(Array.prototype.reduce||function(a,b){var c=0,d=this.length;if(1===arguments.length)for(;;){if(c in this){b=this[c++];break}if(++c>=d)throw new TypeError}for(;d>c;c++)c in this&&(b=a(b,this[c],c));return b}),Z=a(Array.prototype.indexOf||function(a){for(var b=0;b2?a.resolve(X(arguments,1)):a.resolve(c)}},k.Promise=m,k.promise=m,m.race=n,m.all=J,m.reject=z,m.resolve=k,k.passByCopy=function(a){return a},o.prototype.passByCopy=function(){return this},k.join=function(a,b){return k(a).join(b)},o.prototype.join=function(a){return k([this,a]).spread(function(a,b){if(a===b)return a;throw new Error("Q can't join: not the same: "+a+" "+b)})},k.race=n,o.prototype.race=function(){return this.then(k.race)},k.makePromise=o,o.prototype.toString=function(){return"[object Promise]"},o.prototype.then=function(a,b,c){function e(b){try{return"function"==typeof a?a(b):b}catch(c){return z(c)}}function f(a){if("function"==typeof b){d(a,h);try{return b(a)}catch(c){return z(c)}}return z(a)}function g(a){return"function"==typeof c?c(a):a}var h=this,i=l(),j=!1;return k.nextTick(function(){h.promiseDispatch(function(a){j||(j=!0,i.resolve(e(a)))},"when",[function(a){j||(j=!0,i.resolve(f(a)))}])}),h.promiseDispatch(void 0,"when",[void 0,function(a){var b,c=!1;try{b=g(a)}catch(d){if(c=!0,!k.onerror)throw d;k.onerror(d)}c||i.notify(b)}]),i.promise},k.tap=function(a,b){return k(a).tap(b)},o.prototype.tap=function(a){return a=k(a),this.then(function(b){return a.fcall(b).thenResolve(b)})},k.when=p,o.prototype.thenResolve=function(a){return this.then(function(){return a})},k.thenResolve=function(a,b){return k(a).thenResolve(b)},o.prototype.thenReject=function(a){return this.then(function(){throw a})},k.thenReject=function(a,b){return k(a).thenReject(b)},k.nearer=q,k.isPromise=r,k.isPromiseAlike=s,k.isPending=t,o.prototype.isPending=function(){return"pending"===this.inspect().state},k.isFulfilled=u,o.prototype.isFulfilled=function(){return"fulfilled"===this.inspect().state},k.isRejected=v,o.prototype.isRejected=function(){return"rejected"===this.inspect().state};var ea=[],fa=[],ga=[],ha=!0;k.resetUnhandledRejections=w,k.getUnhandledReasons=function(){return ea.slice()},k.stopUnhandledRejectionTracking=function(){w(),ha=!1},w(),k.reject=z,k.fulfill=A,k.master=C,k.spread=D,o.prototype.spread=function(a,b){return this.all().then(function(b){return a.apply(void 0,b)},b)},k.async=E,k.spawn=F,k["return"]=G,k.promised=H,k.dispatch=I,o.prototype.dispatch=function(a,b){var c=this,d=l();return k.nextTick(function(){c.promiseDispatch(d.resolve,a,b)}),d.promise},k.get=function(a,b){return k(a).dispatch("get",[b])},o.prototype.get=function(a){return this.dispatch("get",[a])},k.set=function(a,b,c){return k(a).dispatch("set",[b,c])},o.prototype.set=function(a,b){return this.dispatch("set",[a,b])},k.del=k["delete"]=function(a,b){return k(a).dispatch("delete",[b])},o.prototype.del=o.prototype["delete"]=function(a){return this.dispatch("delete",[a])},k.mapply=k.post=function(a,b,c){return k(a).dispatch("post",[b,c])},o.prototype.mapply=o.prototype.post=function(a,b){return this.dispatch("post",[a,b])},k.send=k.mcall=k.invoke=function(a,b){return k(a).dispatch("post",[b,X(arguments,2)])},o.prototype.send=o.prototype.mcall=o.prototype.invoke=function(a){return this.dispatch("post",[a,X(arguments,1)])},k.fapply=function(a,b){return k(a).dispatch("apply",[void 0,b])},o.prototype.fapply=function(a){return this.dispatch("apply",[void 0,a])},k["try"]=k.fcall=function(a){return k(a).dispatch("apply",[void 0,X(arguments,1)])},o.prototype.fcall=function(){return this.dispatch("apply",[void 0,X(arguments)])},k.fbind=function(a){var b=k(a),c=X(arguments,1);return function(){return b.dispatch("apply",[this,c.concat(X(arguments))])}},o.prototype.fbind=function(){var a=this,b=X(arguments);return function(){return a.dispatch("apply",[this,b.concat(X(arguments))])}},k.keys=function(a){return k(a).dispatch("keys",[])},o.prototype.keys=function(){return this.dispatch("keys",[])},k.all=J,o.prototype.all=function(){return J(this)},k.any=K,o.prototype.any=function(){return K(this)},k.allResolved=j(L,"allResolved","allSettled"),o.prototype.allResolved=function(){return L(this)},k.allSettled=M,o.prototype.allSettled=function(){return this.then(function(a){return J($(a,function(a){function b(){return a.inspect()}return a=k(a),a.then(b,b)}))})},k.fail=k["catch"]=function(a,b){return k(a).then(void 0,b)},o.prototype.fail=o.prototype["catch"]=function(a){return this.then(void 0,a)},k.progress=N,o.prototype.progress=function(a){return this.then(void 0,void 0,a)},k.fin=k["finally"]=function(a,b){return k(a)["finally"](b)},o.prototype.fin=o.prototype["finally"]=function(a){if(!a||"function"!=typeof a.apply)throw new Error("Q can't apply finally callback");return a=k(a),this.then(function(b){return a.fcall().then(function(){return b})},function(b){return a.fcall().then(function(){throw b})})},k.done=function(a,b,c,d){return k(a).done(b,c,d)},o.prototype.done=function(a,b,c){var e=function(a){k.nextTick(function(){if(d(a,f),!k.onerror)throw a;k.onerror(a)})},f=a||b||c?this.then(a,b,c):this;"object"==typeof process&&process&&process.domain&&(e=process.domain.bind(e)),f.then(void 0,e)},k.timeout=function(a,b,c){return k(a).timeout(b,c)},o.prototype.timeout=function(a,b){var c=l(),d=setTimeout(function(){b&&"string"!=typeof b||(b=new Error(b||"Timed out after "+a+" ms"),b.code="ETIMEDOUT"),c.reject(b)},a);return this.then(function(a){clearTimeout(d),c.resolve(a)},function(a){clearTimeout(d),c.reject(a)},c.notify),c.promise},k.delay=function(a,b){return void 0===b&&(b=a,a=void 0),k(a).delay(b)},o.prototype.delay=function(a){return this.then(function(b){var c=l();return setTimeout(function(){c.resolve(b)},a),c.promise})},k.nfapply=function(a,b){return k(a).nfapply(b)},o.prototype.nfapply=function(a){var b=l(),c=X(a);return c.push(b.makeNodeResolver()),this.fapply(c).fail(b.reject),b.promise},k.nfcall=function(a){var b=X(arguments,1);return k(a).nfapply(b)},o.prototype.nfcall=function(){var a=X(arguments),b=l();return a.push(b.makeNodeResolver()),this.fapply(a).fail(b.reject),b.promise},k.nfbind=k.denodeify=function(a){if(void 0===a)throw new Error("Q can't wrap an undefined function");var b=X(arguments,1);return function(){var c=b.concat(X(arguments)),d=l();return c.push(d.makeNodeResolver()),k(a).fapply(c).fail(d.reject),d.promise}},o.prototype.nfbind=o.prototype.denodeify=function(){var a=X(arguments);return a.unshift(this),k.denodeify.apply(void 0,a)},k.nbind=function(a,b){var c=X(arguments,2);return function(){function d(){return a.apply(b,arguments)}var e=c.concat(X(arguments)),f=l();return e.push(f.makeNodeResolver()),k(d).fapply(e).fail(f.reject),f.promise}},o.prototype.nbind=function(){var a=X(arguments,0);return a.unshift(this),k.nbind.apply(void 0,a)},k.nmapply=k.npost=function(a,b,c){return k(a).npost(b,c)},o.prototype.nmapply=o.prototype.npost=function(a,b){var c=X(b||[]),d=l();return c.push(d.makeNodeResolver()),this.dispatch("post",[a,c]).fail(d.reject),d.promise},k.nsend=k.nmcall=k.ninvoke=function(a,b){var c=X(arguments,2),d=l();return c.push(d.makeNodeResolver()),k(a).dispatch("post",[b,c]).fail(d.reject),d.promise},o.prototype.nsend=o.prototype.nmcall=o.prototype.ninvoke=function(a){var b=X(arguments,1),c=l();return b.push(c.makeNodeResolver()),this.dispatch("post",[a,b]).fail(c.reject),c.promise},k.nodeify=O,o.prototype.nodeify=function(a){return a?void this.then(function(b){k.nextTick(function(){a(null,b)})},function(b){k.nextTick(function(){a(b)})}):this},k.noConflict=function(){throw new Error("Q.noConflict only works when Q is used as a global")};var ia=i();return k}); \ No newline at end of file From c0db48178bdce4c28fd63c2ce03d3bece656e30c Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 27 Jan 2022 17:45:20 +0100 Subject: [PATCH 53/93] chore: exchange all-contributor badge (#122) --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 9bbf8240..0a403c0b 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,9 @@ - -[logo]: https://img.shields.io/badge/all_contributors-5-orange.svg 'Number of contributors on All-Contributors' - - [![Build Status](https://travis-ci.org/CFenner/MMM-Netatmo.svg?branch=master)](https://travis-ci.org/CFenner/MMM-Netatmo) [![Known Vulnerabilities](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module/badge.svg)](https://snyk.io/test/github/cfenner/magicmirror-netatmo-module) [![code climate](https://codeclimate.com/github/CFenner/MMM-Netatmo/badges/gpa.svg)](https://codeclimate.com/github/CFenner/MMM-Netatmo) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![api](https://img.shields.io/badge/api-Netatmo-orange.svg)](https://dev.netatmo.com/doc) -[![All Contributors][logo]](#link) +[![All Contributors](https://img.shields.io/github/all-contributors/CFenner/MMM-Netatmo/main)](#contributors-) [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://choosealicense.com/licenses/mit/) # MMM-Netatmo From a000c8b331e369264fd6399d08a8b950c0b6b17d Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 28 Jan 2022 14:16:34 +0100 Subject: [PATCH 54/93] docs: update install description (#124) * Update README.md * Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 0a403c0b..f95c3fa8 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,12 @@ cd ~/MagicMirror/modules && git clone git clone https://github.com/CFenner/MMM-N :warning: Note that the checkout folder is named `netatmo` and not `MMM-Netatmo` as the repository. +Navigate into the module folder and install missing dependencies: + +```shell +cd netatmo && npm ci --production --ignore-scripts +``` + ### Connection to Netatmo Service API To be able to access your data, you need to have an Netatmo Application. Create your personal app in the [Netatmo developer portal][dev-portal] and you will get an `APP_ID` and an `APP_SECRET` which you will need to enter in your [mirror configuration](#configuration). From 8881914b0e1ae4282b9f218222256f80792d084a Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 28 Jan 2022 14:21:55 +0100 Subject: [PATCH 55/93] feat: add sample mode (#123) * add sample data * add mockData default * respond mock data * add wind and rain module to sample data * use mock data without token * add second station * fix eslint findings * add description * Update node_helper.js * use path.join --- README.md | 5 ++ netatmo.js | 1 + node_helper.js | 13 +++++ sample/sample.json | 122 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 sample/sample.json diff --git a/README.md b/README.md index f95c3fa8..efe9dfd5 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,10 @@ cd netatmo && npm ci --production --ignore-scripts To be able to access your data, you need to have an Netatmo Application. Create your personal app in the [Netatmo developer portal][dev-portal] and you will get an `APP_ID` and an `APP_SECRET` which you will need to enter in your [mirror configuration](#configuration). +#### Sample Data + +If you don't have a Netatmo station yet, you can request a set of mock data by configuring `mockData: true` in the module configuration. In that case you don't need any user of app credentials. + ### Configuration To run the module properly, you need to add the following data to your config.js file. @@ -83,6 +87,7 @@ The following properties can be configured: |`fontClassMeasurement`|Control font size class of the data entries.|`xsmall`|no| |`thresholdCO2Average`|Control the threshold for the CO2 status when it should turn `average` (`bubbles` design only).|`800`|no| |`thresholdCO2Bad`|Control the threshold for the CO2 status when it should turn `bad` (`bubbles` design only).|`1800`|no| +|`mockData`|Use a set of mock data instead of a real data from the Netatmo API.|`false`|no| ## Contributors ✨ diff --git a/netatmo.js b/netatmo.js index 972f02a8..97df2c80 100755 --- a/netatmo.js +++ b/netatmo.js @@ -30,6 +30,7 @@ Module.register('netatmo', { fontClassMeasurement: 'xsmall', thresholdCO2Average: 800, thresholdCO2Bad: 1800, + mockData: false, }, notifications: { AUTH: 'NETATMO_AUTH', diff --git a/node_helper.js b/node_helper.js index cbebf908..78c1d55b 100644 --- a/node_helper.js +++ b/node_helper.js @@ -5,6 +5,8 @@ * MIT Licensed. */ const NodeHelper = require('node_helper') +const fs = require('fs') +const path = require('path') const https = require('https') const URLSearchParams = require('@ungap/url-search-params') @@ -54,6 +56,13 @@ module.exports = NodeHelper.create({ }, loadData: function (config) { const self = this + if (self.mockData) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: this.mockData(), + status: 'OK', + }) + return + } if (self.token === null) { self.sendSocketNotification(self.notifications.DATA_RESPONSE, { payloadReturn: 400, @@ -83,6 +92,10 @@ module.exports = NodeHelper.create({ }) req.end() }, + mockData: function () { + const sample = fs.readFileSync(path.join(__dirname, 'sample', 'sample.json'), 'utf8') + return JSON.parse(sample) + }, callbackAuthenticate: function (response) { const self = this let result = '' diff --git a/sample/sample.json b/sample/sample.json new file mode 100644 index 00000000..e85a4e36 --- /dev/null +++ b/sample/sample.json @@ -0,0 +1,122 @@ +[ + { + "station_name": "Hamburg (Wohnzimmer)", + "type": "NAMain", + "module_name": "MAIN", + "wifi_status": 50, + "reachable": true, + "co2_calibrating": false, + "data_type": ["Temperature", "CO2", "Humidity", "Noise", "Pressure"], + "place": { + "altitude": 0, + "city": "Hamburg", + "country": "DE", + "timezone": "Europe/Berlin", + "location": [10.0, 10.0] + }, + "home_name": "Hamburg", + "dashboard_data": { + "Temperature": 12.2, + "CO2": 1114, + "Humidity": 84, + "Noise": 39, + "Pressure": 1014.2, + "AbsolutePressure": 1011.2, + "min_temp": 9.3, + "max_temp": 13.3, + "pressure_trend": "stable" + }, + "modules": [ + { + "type": "NAModule1", + "module_name": "OUTDOOR", + "data_type": ["Temperature", "Humidity"], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "Temperature": 15.4, + "temp_trend": "down", + "Humidity": 36, + "min_temp": 2.2, + "max_temp": 19.7 + } + },{ + "type": "NAModule2", + "module_name": "WIND", + "data_type": ["Wind"], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "WindAngle": 221, + "WindStrength": 2, + "GustAngle": 208, + "GustStrength": 4, + "WindHistoric": [], + "min_temp": 0, + "max_temp": 0, + "max_wind_angle": 44, + "max_wind_str": 20 + } + },{ + "type": "NAModule3", + "module_name": "RAIN", + "data_type": ["Rain"], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "Rain": 0, + "sum_rain_24": 0, + "sum_rain_1": 0 + } + },{ + "type": "NAModule4", + "module_name": "INDOOR", + "data_type": ["Temperature", "CO2", "Humidity"], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "Temperature": 12.7, + "CO2": 995, + "Humidity": 72, + "min_temp": 12.2, + "max_temp": 12.8 + } + } + ] + },{ + "station_name": "Altona (Wohnzimmer)", + "type": "NAMain", + "module_name": "MAIN2", + "wifi_status": 50, + "reachable": false, + "co2_calibrating": false, + "data_type": ["Temperature", "CO2", "Humidity", "Noise", "Pressure"], + "place": { + "altitude": 0, + "city": "Altona", + "country": "DE", + "timezone": "Europe/Berlin", + "location": [10.0, 10.0] + }, + "home_name": "Hamburg", + "modules": [ + { + "type": "NAModule1", + "module_name": "OUTDOOR2", + "data_type": ["Temperature", "Humidity"], + "battery_percent": 50, + "reachable": false, + "rf_status": 50, + "battery_vp": 5040 + } + ] + } +] From 401f24fdb42ee44abf259669e68f4249ecaab958 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 28 Jan 2022 14:42:06 +0100 Subject: [PATCH 56/93] fix: wind direction (#125) * fix wind direction * fix function name --- netatmo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index 97df2c80..88382aa0 100755 --- a/netatmo.js +++ b/netatmo.js @@ -242,7 +242,7 @@ Module.register('netatmo', { return value.toFixed(0) + ' m/s' case this.measurement.WIND_ANGLE: case this.measurement.GUST_ANGLE: - return this.direction(value) + ' | ' + value + '°' + return this.getDirection(value) + ' | ' + value + '°' default: return value } From a7d03e297400f29b91ba052103d20b0aa70b6f37 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 28 Jan 2022 14:55:52 +0100 Subject: [PATCH 57/93] docs: fix preview images (#126) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index efe9dfd5..3b84f3f7 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ A module to integrate information from a [Netatmo weather station][weather-station] into the [MagicMirror][mirror]. -![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.classic.png) -![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/master/.github/preview.bubbles.png) +![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/main/.github/preview.classic.png) +![Netatmo visualisation](https://github.com/CFenner/MagicMirror-Netatmo-Module/blob/main/.github/preview.bubbles.png) ## Usage From 54704afdae1014028515a02b4c98f1ccee327f19 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 28 Jan 2022 21:43:12 +0100 Subject: [PATCH 58/93] chore: change json lint package (#128) * change to jsonlint fork * reformat json --- l10n/de.json | 2 - l10n/en.json | 2 - l10n/fr.json | 2 - l10n/hu.json | 2 - l10n/nb.json | 2 - l10n/nn.json | 2 - package-lock.json | 189 ++++++++++----------------------------------- package.json | 4 +- sample/sample.json | 140 ++++++++++++++++++++------------- 9 files changed, 131 insertions(+), 214 deletions(-) diff --git a/l10n/de.json b/l10n/de.json index e33a1eb6..22153a06 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -13,12 +13,10 @@ "WINDANGLE": "Wind (Richtung)", "GUSTSTRENGTH": "Böen", "GUSTANGLE": "Böen (Richtung)", - "UP": "steigend", "STABLE": "stabil", "DOWN": "fallend", "UNDEFINED": "nicht verfügbar", - "WIFI": "WLan", "RADIO": "Funksignal", "BATTERY": "Batterie", diff --git a/l10n/en.json b/l10n/en.json index 6a408c7e..a7d7b12c 100644 --- a/l10n/en.json +++ b/l10n/en.json @@ -13,12 +13,10 @@ "WINDANGLE": "Wind (direction)", "GUSTSTRENGTH": "Gusts", "GUSTANGLE": "Gusts (direction)", - "UP": "rising", "STABLE": "stable", "DOWN": "falling", "UNDEFINED": "not available", - "WIFI": "WiFi", "RADIO": "Radio signal", "BATTERY": "Battery", diff --git a/l10n/fr.json b/l10n/fr.json index 0b47f3cc..b0b3f59e 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -13,12 +13,10 @@ "WINDANGLE": "vent", "GUSTSTRENGTH": "rafale", "GUSTANGLE": "rafale", - "UP": "hausse", "STABLE": "stable", "DOWN": "baisse", "UNDEFINED": "non disponible", - "WIFI": "WiFi", "RADIO": "signal radio", "BATTERY": "batterie", diff --git a/l10n/hu.json b/l10n/hu.json index d6392798..718430fc 100644 --- a/l10n/hu.json +++ b/l10n/hu.json @@ -13,12 +13,10 @@ "WINDANGLE": "Szél (irány)", "GUSTSTRENGTH": "Érzet", "GUSTANGLE": "Érzet (irány)", - "UP": "növekvő", "STABLE": "stabil", "DOWN": "csökkenő", "UNDEFINED": "Nem elérhető", - "WIFI": "WiFi", "RADIO": "Jelerősség", "BATTERY": "Akkumulátor", diff --git a/l10n/nb.json b/l10n/nb.json index 552c1bb7..c6ba7d47 100644 --- a/l10n/nb.json +++ b/l10n/nb.json @@ -13,12 +13,10 @@ "WINDANGLE": "Vind (retning)", "GUSTSTRENGTH": "Vindkast", "GUSTANGLE": "Vindkast (retning)", - "UP": "Økende", "STABLE": "Stabilt", "DOWN": "Fallende", "UNDEFINED": "Ikke tilgjengelig", - "WIFI": "WiFi", "RADIO": "Radio signal", "BATTERY": "Batteri", diff --git a/l10n/nn.json b/l10n/nn.json index 4c690eb3..28841d9a 100644 --- a/l10n/nn.json +++ b/l10n/nn.json @@ -13,12 +13,10 @@ "WINDANGLE": "Vind (retning)", "GUSTSTRENGTH": "Vindkast", "GUSTANGLE": "Vindkast (retning)", - "UP": "Aukande", "STABLE": "Stabilt", "DOWN": "Fallande", "UNDEFINED": "Ikkje tilgjengeleg", - "WIFI": "WiFi", "RADIO": "Radio signal", "BATTERY": "Batteri", diff --git a/package-lock.json b/package-lock.json index 7ccb2b83..8b9902d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,6 +113,35 @@ } } }, + "@gerhobbelt/linewrap": { + "version": "0.2.2-3", + "resolved": "https://registry.npmjs.org/@gerhobbelt/linewrap/-/linewrap-0.2.2-3.tgz", + "integrity": "sha512-u2eUbXgNtqckBI4gxds/uiUNoytT+qIqpePmVDI5isW8A18uB3Qz1P+UxAHgFafGOZWJNrpR0IKnZhl7QhaUng==", + "dev": true + }, + "@gerhobbelt/nomnom": { + "version": "1.8.4-31", + "resolved": "https://registry.npmjs.org/@gerhobbelt/nomnom/-/nomnom-1.8.4-31.tgz", + "integrity": "sha512-Ih0OLfetFcT5KFB4VruQcosf6RB56rYDEpSs12OWyXpF22BFs+ovX/epghaN8tTlOSCHpPmjwOx4va8Dzz/B9w==", + "dev": true, + "requires": { + "@gerhobbelt/linewrap": "0.2.2-3", + "chalk": "4.1.0", + "exit": "0.1.2" + }, + "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", @@ -255,12 +284,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "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.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -478,15 +501,6 @@ "path-type": "^4.0.0" } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -521,15 +535,6 @@ "is-arrayish": "^0.2.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, "es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", @@ -860,6 +865,12 @@ "clone-regexp": "^2.1.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1085,12 +1096,6 @@ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1127,21 +1132,6 @@ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1426,14 +1416,14 @@ "minimist": "^1.2.0" } }, - "jsonlint": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", - "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", + "jsonlint-newline-fork": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jsonlint-newline-fork/-/jsonlint-newline-fork-1.6.8.tgz", + "integrity": "sha512-CS8WYYhU6w17KpjFogdNGF2oQcxD8Z68mKR3Igohg30uhwPTvDaQDONpcqhjrca3i/PTHhHYBobbiCxAfFiggA==", "dev": true, "requires": { - "JSV": "^4.0.x", - "nomnom": "^1.5.x" + "@gerhobbelt/nomnom": "^1.8.4-27", + "JSV": ">= 4.0.x" } }, "kind-of": { @@ -1491,12 +1481,6 @@ "uc.micro": "^1.0.1" } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -1645,12 +1629,6 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1689,12 +1667,6 @@ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, - "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -1725,41 +1697,6 @@ } } }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -1940,18 +1877,6 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2163,16 +2088,6 @@ "strip-indent": "^3.0.0" } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2208,12 +2123,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "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", @@ -2695,12 +2604,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2732,16 +2635,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 50276b0e..f801aae0 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "validate:css": "stylelint **/*.css", "validate:js": "eslint **/*.js", "fix:js": "eslint --fix **/*.js", - "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --in-place ';'", + "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --insert-final-newline --in-place ';'", "validate:md": "markdownlint *.md", "validate": "npm run validate:css && npm run validate:js && npm run validate:json && npm run validate:md", "snyk-protect": "snyk protect", @@ -30,7 +30,7 @@ "eslint-plugin-import": "^2.25.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^5.2.0", - "jsonlint": "^1.6.3", + "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.25.1", "snyk": "^1.317.0", diff --git a/sample/sample.json b/sample/sample.json index e85a4e36..3c31bf67 100644 --- a/sample/sample.json +++ b/sample/sample.json @@ -6,13 +6,22 @@ "wifi_status": 50, "reachable": true, "co2_calibrating": false, - "data_type": ["Temperature", "CO2", "Humidity", "Noise", "Pressure"], + "data_type": [ + "Temperature", + "CO2", + "Humidity", + "Noise", + "Pressure" + ], "place": { "altitude": 0, "city": "Hamburg", "country": "DE", "timezone": "Europe/Berlin", - "location": [10.0, 10.0] + "location": [ + 10, + 10 + ] }, "home_name": "Hamburg", "dashboard_data": { @@ -28,56 +37,70 @@ }, "modules": [ { - "type": "NAModule1", - "module_name": "OUTDOOR", - "data_type": ["Temperature", "Humidity"], - "battery_percent": 50, - "reachable": true, - "rf_status": 50, - "battery_vp": 5040, - "dashboard_data": { - "Temperature": 15.4, - "temp_trend": "down", - "Humidity": 36, - "min_temp": 2.2, - "max_temp": 19.7 - } - },{ - "type": "NAModule2", - "module_name": "WIND", - "data_type": ["Wind"], - "battery_percent": 50, - "reachable": true, - "rf_status": 50, - "battery_vp": 5040, - "dashboard_data": { - "WindAngle": 221, - "WindStrength": 2, - "GustAngle": 208, - "GustStrength": 4, - "WindHistoric": [], - "min_temp": 0, - "max_temp": 0, - "max_wind_angle": 44, - "max_wind_str": 20 - } - },{ + "type": "NAModule1", + "module_name": "OUTDOOR", + "data_type": [ + "Temperature", + "Humidity" + ], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "Temperature": 15.4, + "temp_trend": "down", + "Humidity": 36, + "min_temp": 2.2, + "max_temp": 19.7 + } + }, + { + "type": "NAModule2", + "module_name": "WIND", + "data_type": [ + "Wind" + ], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "WindAngle": 221, + "WindStrength": 2, + "GustAngle": 208, + "GustStrength": 4, + "WindHistoric": [], + "min_temp": 0, + "max_temp": 0, + "max_wind_angle": 44, + "max_wind_str": 20 + } + }, + { "type": "NAModule3", "module_name": "RAIN", - "data_type": ["Rain"], + "data_type": [ + "Rain" + ], "battery_percent": 50, "reachable": true, "rf_status": 50, "battery_vp": 5040, "dashboard_data": { - "Rain": 0, - "sum_rain_24": 0, - "sum_rain_1": 0 + "Rain": 0, + "sum_rain_24": 0, + "sum_rain_1": 0 } - },{ + }, + { "type": "NAModule4", "module_name": "INDOOR", - "data_type": ["Temperature", "CO2", "Humidity"], + "data_type": [ + "Temperature", + "CO2", + "Humidity" + ], "battery_percent": 50, "reachable": true, "rf_status": 50, @@ -91,31 +114,44 @@ } } ] - },{ + }, + { "station_name": "Altona (Wohnzimmer)", "type": "NAMain", "module_name": "MAIN2", "wifi_status": 50, "reachable": false, "co2_calibrating": false, - "data_type": ["Temperature", "CO2", "Humidity", "Noise", "Pressure"], + "data_type": [ + "Temperature", + "CO2", + "Humidity", + "Noise", + "Pressure" + ], "place": { "altitude": 0, "city": "Altona", "country": "DE", "timezone": "Europe/Berlin", - "location": [10.0, 10.0] + "location": [ + 10, + 10 + ] }, "home_name": "Hamburg", "modules": [ { - "type": "NAModule1", - "module_name": "OUTDOOR2", - "data_type": ["Temperature", "Humidity"], - "battery_percent": 50, - "reachable": false, - "rf_status": 50, - "battery_vp": 5040 + "type": "NAModule1", + "module_name": "OUTDOOR2", + "data_type": [ + "Temperature", + "Humidity" + ], + "battery_percent": 50, + "reachable": false, + "rf_status": 50, + "battery_vp": 5040 } ] } From 8c2b238f244cd1c6dccb92b445ff8ad5154d8f1c Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 04:45:01 +0100 Subject: [PATCH 59/93] feat: show station name (#129) * show station name * add readme entry --- README.md | 1 + netatmo.js | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3b84f3f7..ec0d4f6c 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ The following properties can be configured: |`showWiFi`|Control the appearance of the Wifi perception.|`true`|no| |`showTrend`|Control the appearance of the temperature and pressure trend.|`true`|no| |`showMeasurementIcon`|Control the appearance of the data entry icons (`bubbles` design only).|`true`|no| +|`showStationName`|Control the appearance of the station name next to the module name.|`false`|no| |`fontClassModuleName`|Control font size class of the module name.|`xsmall`|no| |`fontClassPrimary`|Control font size class of the primary value (`bubbles` design only).|`large`|no| |`fontClassSecondary`|Control font size class of the secondary value (`bubbles` design only).|`xsmall`|no| diff --git a/netatmo.js b/netatmo.js index 88382aa0..ded8eb31 100755 --- a/netatmo.js +++ b/netatmo.js @@ -31,6 +31,7 @@ Module.register('netatmo', { thresholdCO2Average: 800, thresholdCO2Bad: 1800, mockData: false, + showStationName: false, }, notifications: { AUTH: 'NETATMO_AUTH', @@ -82,10 +83,10 @@ Module.register('netatmo', { updateModuleList: function (station) { let moduleList = [] - moduleList.push(this.getModule(station)) + moduleList.push(this.getModule(station, station.home_name)) station.modules.forEach(function (module) { - moduleList.push(this.getModule(module)) + moduleList.push(this.getModule(module, station.home_name)) }.bind(this)) if (station.reachable) { this.lastUpdate = station.dashboard_data.time_utc } @@ -107,10 +108,13 @@ Module.register('netatmo', { } this.moduleList = moduleList }, - getModule: function (module) { + getModule: function (module, stationName) { const result = {} result.name = module.module_name + if (this.config.showStationName) { + result.name = `${stationName} - ${result.name}` + } result.measurementList = [] if (!module.reachable) return result From c470e80b9c5c4e89827cc330106023c6185f04a9 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 04:45:58 +0100 Subject: [PATCH 60/93] fix: align unit rendering (#127) * change units display * add units to measurements * allow html in values * add unit to secondary values * rename sample medules * change unit rendering * update templates * restore safe usage * fix eslint findings --- netatmo.bubbles.njk | 7 ++--- netatmo.classic.njk | 5 +++- netatmo.js | 66 ++++++++++++++++++++++++++++++++++++--------- sample/sample.json | 10 +++---- 4 files changed, 66 insertions(+), 22 deletions(-) diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk index 9ea1a1f4..fff91d9f 100644 --- a/netatmo.bubbles.njk +++ b/netatmo.bubbles.njk @@ -8,14 +8,14 @@
-
{{ module.primary.value|safe }}
+
{{ module.primary.value | safe }}
{{ module.primary.unit }}
-
{{ module.secondary.value|safe }}
+
{{ module.secondary.value | safe }}{{ module.secondary.unit}}
@@ -27,7 +27,8 @@ {% if showMeasurementIcon and not measurement.icon == '' %} {% endif %} - {{ measurement.value|safe }} + {{ measurement.value|safe }} + {{ measurement.unit }} {% endfor %} {#
letzter Kontakt: vor 37 Minuten
#} diff --git a/netatmo.classic.njk b/netatmo.classic.njk index 03f29f04..fe1ccd51 100644 --- a/netatmo.classic.njk +++ b/netatmo.classic.njk @@ -8,7 +8,10 @@ {% for measurement in module.measurementList %}
{{ measurement.label|safe }}{{ measurement.value|safe }} + {{ measurement.value|safe }} + {{ measurement.unit }} +
diff --git a/netatmo.js b/netatmo.js index ded8eb31..d782018b 100755 --- a/netatmo.js +++ b/netatmo.js @@ -136,7 +136,12 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { secondaryType = this.measurement.CO2 secondaryValue = module.dashboard_data[secondaryType] - result.secondary = { visualClass: this.getCO2Status(secondaryValue), value: this.getValue(secondaryType, secondaryValue), class: this.kebabCase(secondaryType) } + result.secondary = { + visualClass: this.getCO2Status(secondaryValue), + value: this.getValue(secondaryType, secondaryValue), + unit: this.getUnit(secondaryType), + class: this.kebabCase(secondaryType), + } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.CO2)) } @@ -145,7 +150,7 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.TEMPERATURE primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: '', value: this.getValue(primaryType, primaryValue), class: this.kebabCase(primaryType) } + result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.TEMPERATURE)) } @@ -156,10 +161,15 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.WIND_STRENGTH primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: 'm/s', value: primaryValue, class: this.kebabCase(primaryType) } + result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } secondaryType = this.measurement.WIND_ANGLE secondaryValue = module.dashboard_data[secondaryType] - result.secondary = { visualClass: 'xlarge wi wi-direction-up', value: this.getValue(secondaryType, secondaryValue), class: this.kebabCase(secondaryType) } + result.secondary = { + visualClass: 'xlarge wi wi-direction-up', + value: this.getValue(secondaryType, secondaryValue), + unit: this.getUnit(secondaryType), + class: this.kebabCase(secondaryType), + } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.WIND_STRENGTH)) result.measurementList.push(this.getMeasurement(module, this.measurement.WIND_ANGLE)) @@ -172,7 +182,7 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.RAIN primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: 'mm/h', value: primaryValue, class: this.kebabCase(primaryType) } + result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.RAIN)) } @@ -212,6 +222,7 @@ Module.register('netatmo', { return { name: measurement, value: this.getValue(measurement, value), + unit: this.getUnit(measurement), icon: this.getIcon(measurement), label: this.translate(measurement.toUpperCase()), } @@ -225,32 +236,61 @@ Module.register('netatmo', { if (!value) { return value } switch (measurement) { case this.measurement.CO2: - return value.toFixed(0) + ' ppm' + return value.toFixed(0)// + ' ppm' case this.measurement.NOISE: - return value.toFixed(0) + ' dB' + return value.toFixed(0)// + ' dB' case this.measurement.HUMIDITY: case 'battery': case 'wifi': case 'radio': - return value.toFixed(0) + '%' + return value.toFixed(0)// + '%' case this.measurement.PRESSURE: - return value.toFixed(0) + ' mbar' + return value.toFixed(0)// + ' mbar' case this.measurement.TEMPERATURE: - return value.toFixed(1) + '°' + return value.toFixed(1)// + '°C' case this.measurement.RAIN: case this.measurement.RAIN_PER_HOUR: case this.measurement.RAIN_PER_DAY: - return value.toFixed(1) + ' mm/h' + return value.toFixed(1)// + ' mm/h' case this.measurement.WIND_STRENGTH: case this.measurement.GUST_STRENGTH: - return value.toFixed(0) + ' m/s' + return value.toFixed(0)// + ' m/s' case this.measurement.WIND_ANGLE: case this.measurement.GUST_ANGLE: - return this.getDirection(value) + ' | ' + value + '°' + return this.getDirection(value) + ' | ' + value// + '°' default: return value } }, + getUnit: function (measurement) { + switch (measurement) { + case this.measurement.CO2: + return 'ppm' + case this.measurement.NOISE: + return 'dB' + case this.measurement.HUMIDITY: + case 'battery': + case 'wifi': + case 'radio': + return '%' + case this.measurement.PRESSURE: + return 'mbar' + case this.measurement.TEMPERATURE: + return '°C' + case this.measurement.RAIN: + case this.measurement.RAIN_PER_HOUR: + case this.measurement.RAIN_PER_DAY: + return 'mm/h' + case this.measurement.WIND_STRENGTH: + case this.measurement.GUST_STRENGTH: + return 'm/s' + case this.measurement.WIND_ANGLE: + case this.measurement.GUST_ANGLE: + return '°' + default: + return '' + } + }, getDirection: function (value) { if (value < 11.25) return 'N' if (value < 33.75) return 'NNE' diff --git a/sample/sample.json b/sample/sample.json index 3c31bf67..0cc817cf 100644 --- a/sample/sample.json +++ b/sample/sample.json @@ -2,7 +2,7 @@ { "station_name": "Hamburg (Wohnzimmer)", "type": "NAMain", - "module_name": "MAIN", + "module_name": "Main", "wifi_status": 50, "reachable": true, "co2_calibrating": false, @@ -38,7 +38,7 @@ "modules": [ { "type": "NAModule1", - "module_name": "OUTDOOR", + "module_name": "Outdoor", "data_type": [ "Temperature", "Humidity" @@ -57,7 +57,7 @@ }, { "type": "NAModule2", - "module_name": "WIND", + "module_name": "Wind", "data_type": [ "Wind" ], @@ -79,7 +79,7 @@ }, { "type": "NAModule3", - "module_name": "RAIN", + "module_name": "Rain", "data_type": [ "Rain" ], @@ -95,7 +95,7 @@ }, { "type": "NAModule4", - "module_name": "INDOOR", + "module_name": "Indoor", "data_type": [ "Temperature", "CO2", From 0920e7bd7d6913af4b23da8595acd2c6016938a3 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 05:53:02 +0100 Subject: [PATCH 61/93] feat: display all Netatmo stations (#130) * handle all stations * change name of sample station * fix loop * show station name by default --- README.md | 2 +- netatmo.js | 20 +++++++++++--------- sample/sample.json | 46 +++++++++++++++++++++++----------------------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index ec0d4f6c..8e619e37 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ The following properties can be configured: |`showWiFi`|Control the appearance of the Wifi perception.|`true`|no| |`showTrend`|Control the appearance of the temperature and pressure trend.|`true`|no| |`showMeasurementIcon`|Control the appearance of the data entry icons (`bubbles` design only).|`true`|no| -|`showStationName`|Control the appearance of the station name next to the module name.|`false`|no| +|`showStationName`|Control the appearance of the station name next to the module name.|`true`|no| |`fontClassModuleName`|Control font size class of the module name.|`xsmall`|no| |`fontClassPrimary`|Control font size class of the primary value (`bubbles` design only).|`large`|no| |`fontClassSecondary`|Control font size class of the secondary value (`bubbles` design only).|`xsmall`|no| diff --git a/netatmo.js b/netatmo.js index d782018b..7ccaf2e8 100755 --- a/netatmo.js +++ b/netatmo.js @@ -21,6 +21,7 @@ Module.register('netatmo', { showTrend: true, showMeasurementIcon: true, showMeasurementLabel: true, + showStationName: true, apiBase: 'api.netatmo.com', authEndpoint: '/oauth2/token', dataEndpoint: '/api/getstationsdata', @@ -31,7 +32,6 @@ Module.register('netatmo', { thresholdCO2Average: 800, thresholdCO2Bad: 1800, mockData: false, - showStationName: false, }, notifications: { AUTH: 'NETATMO_AUTH', @@ -80,16 +80,18 @@ Module.register('netatmo', { self.sendSocketNotification(self.notifications.DATA, self.config) }, this.config.updateInterval * 60 * 1000 + this.config.initialDelay * 1000) }, - updateModuleList: function (station) { + updateModuleList: function (stationList) { let moduleList = [] - moduleList.push(this.getModule(station, station.home_name)) + for (const station of stationList) { + moduleList.push(this.getModule(station, station.home_name)) - station.modules.forEach(function (module) { - moduleList.push(this.getModule(module, station.home_name)) - }.bind(this)) + station.modules.forEach(function (module) { + moduleList.push(this.getModule(module, station.home_name)) + }.bind(this)) - if (station.reachable) { this.lastUpdate = station.dashboard_data.time_utc } + if (station.reachable) { this.lastUpdate = station.dashboard_data.time_utc } + } this.loaded = true if (JSON.stringify(this.moduleList) === JSON.stringify(moduleList)) { return @@ -395,8 +397,8 @@ Module.register('netatmo', { console.log(payload) if (payload.status === 'OK') { console.log('devices returned') - const station = payload.payloadReturn[0] - self.updateModuleList(station) + const stationList = payload.payloadReturn + self.updateModuleList(stationList) self.updateDom(self.config.animationSpeed) } else if (payload.status === 'INVALID_TOKEN') { // node_module has no valid token, reauthenticate diff --git a/sample/sample.json b/sample/sample.json index 0cc817cf..9c15e401 100644 --- a/sample/sample.json +++ b/sample/sample.json @@ -36,6 +36,26 @@ "pressure_trend": "stable" }, "modules": [ + { + "type": "NAModule4", + "module_name": "Indoor", + "data_type": [ + "Temperature", + "CO2", + "Humidity" + ], + "battery_percent": 50, + "reachable": true, + "rf_status": 50, + "battery_vp": 5040, + "dashboard_data": { + "Temperature": 12.7, + "CO2": 995, + "Humidity": 72, + "min_temp": 12.2, + "max_temp": 12.8 + } + }, { "type": "NAModule1", "module_name": "Outdoor", @@ -92,33 +112,13 @@ "sum_rain_24": 0, "sum_rain_1": 0 } - }, - { - "type": "NAModule4", - "module_name": "Indoor", - "data_type": [ - "Temperature", - "CO2", - "Humidity" - ], - "battery_percent": 50, - "reachable": true, - "rf_status": 50, - "battery_vp": 5040, - "dashboard_data": { - "Temperature": 12.7, - "CO2": 995, - "Humidity": 72, - "min_temp": 12.2, - "max_temp": 12.8 - } } ] }, { "station_name": "Altona (Wohnzimmer)", "type": "NAMain", - "module_name": "MAIN2", + "module_name": "Main", "wifi_status": 50, "reachable": false, "co2_calibrating": false, @@ -139,11 +139,11 @@ 10 ] }, - "home_name": "Hamburg", + "home_name": "Altona", "modules": [ { "type": "NAModule1", - "module_name": "OUTDOOR2", + "module_name": "Outdoor", "data_type": [ "Temperature", "Humidity" From 37645850f9d0899752ec9060f05362a874d00a3e Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 09:35:25 +0100 Subject: [PATCH 62/93] feat: improve icons (#131) * change icons * change battery level on sample * trend icon --- netatmo.js | 42 ++++++++++++++++++++++++++++-------------- sample/sample.json | 6 +++--- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/netatmo.js b/netatmo.js index 7ccaf2e8..463994c1 100755 --- a/netatmo.js +++ b/netatmo.js @@ -218,14 +218,13 @@ Module.register('netatmo', { getMeasurement: function (module, measurement, value) { value = value || module.dashboard_data[measurement] if (measurement === this.measurement.TEMPERATURE_TREND || measurement === this.measurement.PRESSURE_TREND) { - value = value || 'UNDEFINED' - value = this.translate(value.toUpperCase()) + value = value || 'undefined' } return { name: measurement, value: this.getValue(measurement, value), unit: this.getUnit(measurement), - icon: this.getIcon(measurement), + icon: this.getIcon(measurement, value), label: this.translate(measurement.toUpperCase()), } }, @@ -260,6 +259,9 @@ Module.register('netatmo', { case this.measurement.WIND_ANGLE: case this.measurement.GUST_ANGLE: return this.getDirection(value) + ' | ' + value// + '°' + case this.measurement.TEMPERATURE_TREND: + case this.measurement.PRESSURE_TREND: + return this.translate(value.toUpperCase()) default: return value } @@ -318,7 +320,7 @@ Module.register('netatmo', { if (value >= this.config.thresholdCO2Average) return 'average' return 'good' }, - getIcon: function (dataType) { + getIcon: function (dataType, value) { switch (dataType) { // case this.measurement.CO2: // return 'fa-lungs' @@ -326,27 +328,39 @@ Module.register('netatmo', { return 'fa-volume-up' case this.measurement.HUMIDITY: return 'fa-tint' - // case this.measurement.PRESSURE: - // case this.measurement.PRESSURE: + case this.measurement.PRESSURE: + return 'fa-tachometer-alt' + case this.measurement.GUST_STRENGTH: + case this.measurement.WIND_STRENGTH: + return 'fa-wind' // case this.measurement.GUST_ANGLE: - // case this.measurement.GUST_STRENGTH: - // case this.measurement.WIND: // case this.measurement.WIND_ANGLE: - // case this.measurement.WIND_STRENGTH: - // return 'fa-tachometer-alt'; - // case this.measurement.PRESSURE_TREND: - // case this.measurement.TEMPERATURE_TREND: - // return 'fa-long-arrow-alt-right' + case this.measurement.PRESSURE_TREND: + case this.measurement.TEMPERATURE_TREND: + return this.getTrendIcon(value) case 'wifi': return 'fa-wifi' case 'radio': return 'fa-broadcast-tower' case 'battery': - return 'fa-battery-three-quarters' + return this.getBatteryIcon(value) default: return '' } }, + getTrendIcon: function (value) { + if (value === 'stable') return 'fa-chevron-circle-right' + if (value === 'down') return 'fa-chevron-circle-down' + if (value === 'up') return 'fa-chevron-circle-up' + if (value === 'undefined') return 'fa-times-circle' + }, + getBatteryIcon: function (value) { + if (value > 80) return 'fa-battery-full' + if (value > 60) return 'fa-battery-three-quarters' + if (value > 40) return 'fa-battery-half' + if (value > 20) return 'fa-battery-quarter' + if (value > 0) return 'fa-battery-empty' + }, getStyles: function () { return [`${this.name}.${this.config.design}.css`] }, diff --git a/sample/sample.json b/sample/sample.json index 9c15e401..4fbec021 100644 --- a/sample/sample.json +++ b/sample/sample.json @@ -63,7 +63,7 @@ "Temperature", "Humidity" ], - "battery_percent": 50, + "battery_percent": 90, "reachable": true, "rf_status": 50, "battery_vp": 5040, @@ -81,7 +81,7 @@ "data_type": [ "Wind" ], - "battery_percent": 50, + "battery_percent": 10, "reachable": true, "rf_status": 50, "battery_vp": 5040, @@ -103,7 +103,7 @@ "data_type": [ "Rain" ], - "battery_percent": 50, + "battery_percent": 30, "reachable": true, "rf_status": 50, "battery_vp": 5040, From d6f3e225cb58ea8d1292f7391c81144580bd5378 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 11:26:47 +0100 Subject: [PATCH 63/93] fix: mock data always on (#132) --- node_helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_helper.js b/node_helper.js index 78c1d55b..f3a38931 100644 --- a/node_helper.js +++ b/node_helper.js @@ -56,7 +56,7 @@ module.exports = NodeHelper.create({ }, loadData: function (config) { const self = this - if (self.mockData) { + if (self.mockData === true) { self.sendSocketNotification(self.notifications.DATA_RESPONSE, { payloadReturn: this.mockData(), status: 'OK', From 0770caaaf38eea2cc366dc64042a93fea4e585fa Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 29 Jan 2022 11:37:15 +0100 Subject: [PATCH 64/93] fix: mock data always on 2nd try (#133) --- node_helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node_helper.js b/node_helper.js index f3a38931..36a624c3 100644 --- a/node_helper.js +++ b/node_helper.js @@ -56,7 +56,8 @@ module.exports = NodeHelper.create({ }, loadData: function (config) { const self = this - if (self.mockData === true) { + self.config = config + if (self.config.mockData === true) { self.sendSocketNotification(self.notifications.DATA_RESPONSE, { payloadReturn: this.mockData(), status: 'OK', @@ -72,7 +73,6 @@ module.exports = NodeHelper.create({ return } - self.config = config const req = https.request({ hostname: self.config.apiBase, path: self.config.dataEndpoint, From 270d77351b7cfccd657687ca799f518dd72aa7d0 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Wed, 2 Feb 2022 21:03:08 +0100 Subject: [PATCH 65/93] fix: correct decimals of primary value (#134) * fix: correct decimals of primary value * fix eslint findings * replace tabs --- netatmo.bubbles.less | 2 +- netatmo.classic.less | 10 +++++----- netatmo.js | 22 +++++++++++++++++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index 5d361a6f..b7938873 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -4,7 +4,7 @@ @bad: red; .netatmo{ - display: inline-block; + display: inline-block; .netatmo-module{ .name{ diff --git a/netatmo.classic.less b/netatmo.classic.less index 6b3350f9..ec265519 100644 --- a/netatmo.classic.less +++ b/netatmo.classic.less @@ -22,9 +22,9 @@ padding: .125em .25em; } } - .horizontal{ - .netatmo-module{ - display: inline-block; - } - } + .horizontal{ + .netatmo-module{ + display: inline-block; + } + } } diff --git a/netatmo.js b/netatmo.js index 463994c1..26a5e18a 100755 --- a/netatmo.js +++ b/netatmo.js @@ -139,10 +139,10 @@ Module.register('netatmo', { secondaryType = this.measurement.CO2 secondaryValue = module.dashboard_data[secondaryType] result.secondary = { - visualClass: this.getCO2Status(secondaryValue), value: this.getValue(secondaryType, secondaryValue), unit: this.getUnit(secondaryType), class: this.kebabCase(secondaryType), + visualClass: this.getCO2Status(secondaryValue), } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.CO2)) @@ -152,7 +152,11 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.TEMPERATURE primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } + result.primary = { + value: this.getValue(primaryType, primaryValue), + unit: this.getUnit(primaryType), + class: this.kebabCase(primaryType), + } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.TEMPERATURE)) } @@ -163,14 +167,18 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.WIND_STRENGTH primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } + result.primary = { + value: this.getValue(primaryType, primaryValue), + unit: this.getUnit(primaryType), + class: this.kebabCase(primaryType), + } secondaryType = this.measurement.WIND_ANGLE secondaryValue = module.dashboard_data[secondaryType] result.secondary = { - visualClass: 'xlarge wi wi-direction-up', value: this.getValue(secondaryType, secondaryValue), unit: this.getUnit(secondaryType), class: this.kebabCase(secondaryType), + visualClass: 'xlarge wi wi-direction-up', } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.WIND_STRENGTH)) @@ -184,7 +192,11 @@ Module.register('netatmo', { if (this.config.design === 'bubbles') { primaryType = this.measurement.RAIN primaryValue = module.dashboard_data ? module.dashboard_data[primaryType] : '' - result.primary = { unit: this.getUnit(primaryType), value: primaryValue, class: this.kebabCase(primaryType) } + result.primary = { + value: this.getValue(primaryType, primaryValue), + unit: this.getUnit(primaryType), + class: this.kebabCase(primaryType), + } } else { result.measurementList.push(this.getMeasurement(module, this.measurement.RAIN)) } From 178800fd5684a72781f5a09ef052626bde663682 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Wed, 2 Feb 2022 21:22:15 +0100 Subject: [PATCH 66/93] feat: display unreachable status (#135) * add wifi / radio icon if unreachable * make icon flash * fix class name --- netatmo.bubbles.css | 3 +++ netatmo.bubbles.less | 3 +++ netatmo.js | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/netatmo.bubbles.css b/netatmo.bubbles.css index 88d06373..2c451355 100644 --- a/netatmo.bubbles.css +++ b/netatmo.bubbles.css @@ -47,6 +47,9 @@ .netatmo .netatmo-module .data .flash { animation: flasher 1s linear infinite; } +.netatmo .netatmo-module .data .red { + color: red; +} @keyframes flasher { 50% { opacity: 0; diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index b7938873..a78dd0e7 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -58,6 +58,9 @@ .flash { animation: flasher 1s linear infinite; } + .red { + color: @bad + } @keyframes flasher { 50% { opacity: 0; } } diff --git a/netatmo.js b/netatmo.js index 26a5e18a..87809b52 100755 --- a/netatmo.js +++ b/netatmo.js @@ -119,7 +119,24 @@ Module.register('netatmo', { } result.measurementList = [] - if (!module.reachable) return result + if (!module.reachable) { + let measurement = '' + if (module.type === this.moduleType.MAIN) { + measurement = 'wifi' + } else { + measurement = 'radio' + } + + result.measurementList.push({ + name: measurement, + value: this.getValue(measurement, 0), + unit: this.getUnit(measurement), + icon: this.getIcon(measurement, 0) + ' flash red', + label: this.translate(measurement.toUpperCase()), + }) + + return result + } // TODO check module.reachable let primaryType = '' From 7bfc491f5b0a928c62066ab4ec727385b0fa714d Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 3 Feb 2022 21:56:43 +0100 Subject: [PATCH 67/93] fix: add padding to room name (#136) --- netatmo.bubbles.css | 3 ++- netatmo.bubbles.less | 3 ++- netatmo.bubbles.njk | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/netatmo.bubbles.css b/netatmo.bubbles.css index 2c451355..f4862998 100644 --- a/netatmo.bubbles.css +++ b/netatmo.bubbles.css @@ -1,7 +1,8 @@ .netatmo { display: inline-block; } -.netatmo .netatmo-module .name { +.netatmo .netatmo-module .room { + padding: 0.25em 0.5em; text-align: left; } .netatmo .netatmo-module .primary { diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index a78dd0e7..cd2ea06a 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -7,7 +7,8 @@ display: inline-block; .netatmo-module{ - .name{ + .room{ + padding: 0.25em 0.5em; text-align: left; } .primary{ diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk index fff91d9f..05ea6c08 100644 --- a/netatmo.bubbles.njk +++ b/netatmo.bubbles.njk @@ -37,7 +37,7 @@
-
{{ module.name }}
+
{{ module.name }}
{% endfor %} {% else %} From 4eb3bed47a01f235909d632bd4c6f3651166834a Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sat, 5 Feb 2022 19:00:32 +0100 Subject: [PATCH 68/93] feat: flash on low battery (#137) * flash on low battery * Update netatmo.js --- netatmo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netatmo.js b/netatmo.js index 87809b52..922d07e9 100755 --- a/netatmo.js +++ b/netatmo.js @@ -388,7 +388,7 @@ Module.register('netatmo', { if (value > 60) return 'fa-battery-three-quarters' if (value > 40) return 'fa-battery-half' if (value > 20) return 'fa-battery-quarter' - if (value > 0) return 'fa-battery-empty' + return 'fa-battery-empty flash red' }, getStyles: function () { return [`${this.name}.${this.config.design}.css`] From 1d8f8663572759ef066fd9160e17d53b77382f05 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 6 Feb 2022 13:19:20 +0100 Subject: [PATCH 69/93] fix: add HU translations (#139) addition to #108 #109 --- netatmo.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/netatmo.js b/netatmo.js index 922d07e9..34302af3 100755 --- a/netatmo.js +++ b/netatmo.js @@ -416,10 +416,11 @@ Module.register('netatmo', { }, getTranslations: function () { return { - en: 'l10n/en.json', + cs: 'l10n/cs.json', de: 'l10n/de.json', + en: 'l10n/en.json', fr: 'l10n/fr.json', - cs: 'l10n/cs.json', + hu: 'l10n/hu.json', nb: 'l10n/nb.json', nn: 'l10n/nn.json', } From f9704a7c7b61d2e9963617072737866ad7aeb245 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 6 Feb 2022 13:32:49 +0100 Subject: [PATCH 70/93] fix: translate loading text (#140) * translate loading * allod html * add convenient script * fix eslint findings --- netatmo.bubbles.njk | 2 +- netatmo.classic.njk | 2 +- netatmo.js | 1 + package.json | 5 +++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk index 05ea6c08..71aaf8a3 100644 --- a/netatmo.bubbles.njk +++ b/netatmo.bubbles.njk @@ -42,7 +42,7 @@ {% endfor %} {% else %}
- {{ "LOADING" }} + {{ labelLoading|safe }}
{% endif %}
diff --git a/netatmo.classic.njk b/netatmo.classic.njk index fe1ccd51..1191db2b 100644 --- a/netatmo.classic.njk +++ b/netatmo.classic.njk @@ -22,7 +22,7 @@
{% else %}
- {{ "LOADING" }} + {{ labelLoading|safe }}
{% endif %}
diff --git a/netatmo.js b/netatmo.js index 34302af3..6959052f 100755 --- a/netatmo.js +++ b/netatmo.js @@ -412,6 +412,7 @@ Module.register('netatmo', { fontClassPrimary: this.config.fontClassPrimary, fontClassSecondary: this.config.fontClassSecondary, fontClassMeasurement: this.config.fontClassMeasurement, + labelLoading: this.translate('LOADING'), } }, getTranslations: function () { diff --git a/package.json b/package.json index f801aae0..916903ca 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,14 @@ "description": "", "main": "netatmo.js", "scripts": { + "compile": "npm run compile:css", "compile:css": "lessc netatmo.bubbles.less netatmo.bubbles.css && lessc netatmo.classic.less netatmo.classic.css", + "validate": "npm run validate:css && npm run validate:js && npm run validate:json && npm run validate:md", "validate:css": "stylelint **/*.css", "validate:js": "eslint **/*.js", - "fix:js": "eslint --fix **/*.js", "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --insert-final-newline --in-place ';'", "validate:md": "markdownlint *.md", - "validate": "npm run validate:css && npm run validate:js && npm run validate:json && npm run validate:md", + "fix:js": "eslint --fix **/*.js", "snyk-protect": "snyk protect", "prepublish": "npm run snyk-protect" }, From 2b1925ed82269fbdcf04aee3e4c52855ef6778e2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Sun, 6 Feb 2022 20:16:51 +0100 Subject: [PATCH 71/93] feat: horizontal mode for bubbles design (#138) * use unordered list * slow down flashing * add horizontal mode --- README.md | 2 +- netatmo.bubbles.css | 41 +++++++++++++++++++++++++---------------- netatmo.bubbles.less | 15 ++++++++++++--- netatmo.bubbles.njk | 8 +++++--- 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 8e619e37..72a0c778 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ The following properties can be configured: |`moduleOrder`|The rendering order of your weather modules, ommit a module to hide the output. **Example:** `["Kitchen","Kid's Bedroom","Garage","Garden"]` Be aware that you need to use the module names that you set in the netatmo configuration.||no| |`dataOrder`|The rendering order of the data types of a module, ommit a data type to hide the output. **Example:** `["Noise","Pressure","CO2","Humidity","Temperature","Rain"]`||no| |`design`|The design for the module appearance, could be `classic` or `bubbles`.|`classic`|no| -|`horizontal`|Control the direction of the modules (`classic` design only).|`true`|no| +|`horizontal`|Control the direction of the modules.|`true`|no| |`showBattery`|Control the appearance of the battery status.|`true`|no| |`showRadio`|Control the appearance of the radio perception.|`true`|no| |`showWiFi`|Control the appearance of the Wifi perception.|`true`|no| diff --git a/netatmo.bubbles.css b/netatmo.bubbles.css index f4862998..06c2a7c5 100644 --- a/netatmo.bubbles.css +++ b/netatmo.bubbles.css @@ -1,54 +1,60 @@ .netatmo { display: inline-block; } -.netatmo .netatmo-module .room { +.netatmo ul { + list-style-type: none; + padding: 0; + margin: 0; +} +.netatmo ul .room { padding: 0.25em 0.5em; text-align: left; } -.netatmo .netatmo-module .primary { +.netatmo ul .primary { text-align: right; } -.netatmo .netatmo-module .secondary, -.netatmo .netatmo-module .data { +.netatmo ul .name, +.netatmo ul .secondary, +.netatmo ul .data { text-align: left; } -.netatmo .netatmo-module .secondary { +.netatmo ul .secondary { text-align: center; width: 5em; } -.netatmo .netatmo-module .secondary .co2 .visual { +.netatmo ul .secondary .co2 .visual { border-radius: 1em; box-shadow: 0 0 0.9em 1em; height: 0.1em; margin: 1.5em auto; width: 0.1em; } -.netatmo .netatmo-module .secondary .co2 .good { +.netatmo ul .secondary .co2 .good { background-color: limegreen; color: limegreen; } -.netatmo .netatmo-module .secondary .co2 .average { +.netatmo ul .secondary .co2 .average { background-color: orange; color: orange; } -.netatmo .netatmo-module .secondary .co2 .bad { +.netatmo ul .secondary .co2 .bad { background-color: red; color: red; } -.netatmo .netatmo-module .secondary .co2 .undefined { +.netatmo ul .secondary .co2 .undefined { background-color: #000; color: #000; } -.netatmo .netatmo-module .secondary .wind-angle .visual { +.netatmo ul .secondary .wind-angle .visual { display: inline-block; } -.netatmo .netatmo-module .data { +.netatmo ul .data { width: 8em; } -.netatmo .netatmo-module .data .flash { - animation: flasher 1s linear infinite; +.netatmo ul .data .flash { + animation: flasher 3s linear infinite; } -.netatmo .netatmo-module .data .red { +.netatmo ul .data .red { color: red; } @keyframes flasher { @@ -56,6 +62,9 @@ opacity: 0; } } -.netatmo .netatmo-module .data div * { +.netatmo ul .data div * { margin: 0 2px; } +.netatmo.horizontal ul > li { + display: inline-block; +} diff --git a/netatmo.bubbles.less b/netatmo.bubbles.less index cd2ea06a..211bd49b 100644 --- a/netatmo.bubbles.less +++ b/netatmo.bubbles.less @@ -6,7 +6,11 @@ .netatmo{ display: inline-block; - .netatmo-module{ + ul { + list-style-type: none; + padding: 0; + margin: 0; + .room{ padding: 0.25em 0.5em; text-align: left; @@ -14,11 +18,11 @@ .primary{ text-align: right; } + .name, .secondary, .data{ text-align: left; } - .primary{} .secondary{ text-align: center; width: 5em; @@ -57,7 +61,7 @@ .data{ width: 8em; .flash { - animation: flasher 1s linear infinite; + animation: flasher 3s linear infinite; } .red { color: @bad @@ -71,3 +75,8 @@ } } } +.netatmo.horizontal{ + ul>li{ + display: inline-block; + } +} diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk index 71aaf8a3..99abc539 100644 --- a/netatmo.bubbles.njk +++ b/netatmo.bubbles.njk @@ -1,7 +1,8 @@ -
+
{% if loaded %} +
    {% for module in moduleList %} -
    +
  • @@ -38,8 +39,9 @@
    {{ module.name }}
    -
  • + {% endfor %} +
{% else %}
{{ labelLoading|safe }} From 2d5ca28be02f62ef00fcad06cba936e040ac7885 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 15 Feb 2022 08:30:11 +0100 Subject: [PATCH 72/93] chore: improve log message (#141) --- netatmo.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/netatmo.js b/netatmo.js index 6959052f..c744c988 100755 --- a/netatmo.js +++ b/netatmo.js @@ -431,7 +431,6 @@ Module.register('netatmo', { Log.debug('received ' + notification) switch (notification) { case self.notifications.AUTH_RESPONSE: - console.log(payload) if (payload.status === 'OK') { self.sendSocketNotification(self.notifications.DATA, self.config) } else { @@ -439,9 +438,8 @@ Module.register('netatmo', { } break case self.notifications.DATA_RESPONSE: - console.log(payload) if (payload.status === 'OK') { - console.log('devices returned') + console.log('Devices %o', payload.payloadReturn) const stationList = payload.payloadReturn self.updateModuleList(stationList) self.updateDom(self.config.animationSpeed) From 723b6c5e83a1491a9d84dc90ba8b8dde7b524747 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 15 Feb 2022 09:53:59 +0100 Subject: [PATCH 73/93] feat: show module name on top (#142) * show module name on top * add docs --- README.md | 1 + netatmo.bubbles.njk | 7 ++++++- netatmo.classic.njk | 7 ++++++- netatmo.js | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 72a0c778..45a1de5d 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ The following properties can be configured: |`showTrend`|Control the appearance of the temperature and pressure trend.|`true`|no| |`showMeasurementIcon`|Control the appearance of the data entry icons (`bubbles` design only).|`true`|no| |`showStationName`|Control the appearance of the station name next to the module name.|`true`|no| +|`showModuleNameOnTop`|Control the position of the module name.|`false`|no| |`fontClassModuleName`|Control font size class of the module name.|`xsmall`|no| |`fontClassPrimary`|Control font size class of the primary value (`bubbles` design only).|`large`|no| |`fontClassSecondary`|Control font size class of the secondary value (`bubbles` design only).|`xsmall`|no| diff --git a/netatmo.bubbles.njk b/netatmo.bubbles.njk index 99abc539..5ec1d62e 100644 --- a/netatmo.bubbles.njk +++ b/netatmo.bubbles.njk @@ -3,6 +3,9 @@
    {% for module in moduleList %}
  • + {% if showModuleNameOnTop %} +
    {{ module.name }}
    + {% endif %}
    @@ -38,7 +41,9 @@
    -
    {{ module.name }}
    + {% if not showModuleNameOnTop %} +
    {{ module.name }}
    + {% endif %}
  • {% endfor %}
diff --git a/netatmo.classic.njk b/netatmo.classic.njk index 1191db2b..27a1748c 100644 --- a/netatmo.classic.njk +++ b/netatmo.classic.njk @@ -3,6 +3,9 @@
{% for module in moduleList %}
+ {% if showModuleNameOnTop %} +
{{ module.name }}
+ {% endif %}
{% for measurement in module.measurementList %} @@ -16,7 +19,9 @@ {% endfor %}
-
{{ module.name }}
+ {% if not showModuleNameOnTop %} +
{{ module.name }}
+ {% endif %}
{% endfor %}
diff --git a/netatmo.js b/netatmo.js index c744c988..81247faf 100755 --- a/netatmo.js +++ b/netatmo.js @@ -22,6 +22,7 @@ Module.register('netatmo', { showMeasurementIcon: true, showMeasurementLabel: true, showStationName: true, + showModuleNameOnTop: false, apiBase: 'api.netatmo.com', authEndpoint: '/oauth2/token', dataEndpoint: '/api/getstationsdata', @@ -406,6 +407,7 @@ Module.register('netatmo', { showTrend: this.config.showTrend, showMeasurementIcon: this.config.showMeasurementIcon, showMeasurementLabel: this.config.showMeasurementLabel, + showModuleNameOnTop: this.config.showModuleNameOnTop, horizontal: this.config.horizontal, moduleList: this.moduleList, fontClassModuleName: this.config.fontClassModuleName, From 05e74687bd924b5dfa4528d23b11b720279ed437 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 14 Mar 2022 11:12:26 +0100 Subject: [PATCH 74/93] docs: correct install instructions (#144) fixes #143 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45a1de5d..7e549a03 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ To use this module you need to have access to a [Netatmo weather station][weathe Navigate into your MagicMirror's modules folder and clone the repository: ```shell -cd ~/MagicMirror/modules && git clone git clone https://github.com/CFenner/MMM-Netatmo.git netatmo +cd ~/MagicMirror/modules && git clone https://github.com/CFenner/MMM-Netatmo.git netatmo ``` :warning: Note that the checkout folder is named `netatmo` and not `MMM-Netatmo` as the repository. From 4de9a99ef4b63bd8e9e894fcc5bb211ff29cdda8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 14 Mar 2022 11:21:25 +0100 Subject: [PATCH 75/93] docs: add cyber152 as a contributor for doc (#145) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] * Update .all-contributorsrc * Revert dummy change Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: Christopher Fenner --- .all-contributorsrc | 9 +++++++++ README.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 33364d3c..588d15eb 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -49,6 +49,15 @@ "contributions": [ "translation" ] + }, + { + "login": "cyber152", + "name": "cyber152", + "avatar_url": "https://avatars.githubusercontent.com/u/96107993?v=4", + "profile": "https://github.com/cyber152", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 7e549a03..ac387bfa 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Tom-Inge Larsen

🌍
jegerikke

🌍
gilmrt

🌍 +
cyber152

📖 From 340cb402b248d4133fab4a730f83ad3b0dd5c100 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jul 2023 10:30:01 +0200 Subject: [PATCH 76/93] chore(deps): bump minimist from 1.2.5 to 1.2.8 (#155) Bumps [minimist](https://github.com/minimistjs/minimist) from 1.2.5 to 1.2.8. - [Release notes](https://github.com/minimistjs/minimist/releases) - [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md) - [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.8) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b9902d4..cecf3384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1639,9 +1639,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minimist-options": { From 20ecb341a45633df3e33f7a17261f3ef744401f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 20:54:36 +0200 Subject: [PATCH 77/93] chore(deps): Add renovate.json (#160) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- renovate.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..39a2b6e9 --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ] +} From 98048a34b537b2ef92c3091a9b513fafbddb8026 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 20:58:26 +0200 Subject: [PATCH 78/93] chore(deps): update dependency eslint to v8.47.0 (#162) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 3016 ++++++++++++++++++++++++++++++--------------- 1 file changed, 2045 insertions(+), 971 deletions(-) diff --git a/package-lock.json b/package-lock.json index cecf3384..5913d506 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,546 +1,773 @@ { "name": "netatmo", "version": "2.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { + "packages": { + "": { + "name": "netatmo", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@ungap/url-search-params": "^0.2.2" + }, + "devDependencies": { + "eslint": "^8.7.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.2.0", + "jsonlint-newline-fork": "^1.6.8", + "less": "^4.1.2", + "markdownlint": "^0.25.1", + "snyk": "^1.317.0", + "stylelint": "^14.2.0", + "stylelint-config-standard": "^24.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.16.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, - "@eslint/eslintrc": { + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "@gerhobbelt/linewrap": { + "node_modules/@gerhobbelt/linewrap": { "version": "0.2.2-3", "resolved": "https://registry.npmjs.org/@gerhobbelt/linewrap/-/linewrap-0.2.2-3.tgz", "integrity": "sha512-u2eUbXgNtqckBI4gxds/uiUNoytT+qIqpePmVDI5isW8A18uB3Qz1P+UxAHgFafGOZWJNrpR0IKnZhl7QhaUng==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "@gerhobbelt/nomnom": { + "node_modules/@gerhobbelt/nomnom": { "version": "1.8.4-31", "resolved": "https://registry.npmjs.org/@gerhobbelt/nomnom/-/nomnom-1.8.4-31.tgz", "integrity": "sha512-Ih0OLfetFcT5KFB4VruQcosf6RB56rYDEpSs12OWyXpF22BFs+ovX/epghaN8tTlOSCHpPmjwOx4va8Dzz/B9w==", "dev": true, - "requires": { + "dependencies": { "@gerhobbelt/linewrap": "0.2.2-3", "chalk": "4.1.0", "exit": "0.1.2" }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@gerhobbelt/nomnom/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, - "requires": { + "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "@humanwhocodes/object-schema": { + "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": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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 }, - "@nodelib/fs.scandir": { + "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, - "requires": { + "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@nodelib/fs.stat": { + "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 + "dev": true, + "engines": { + "node": ">= 8" + } }, - "@nodelib/fs.walk": { + "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, - "requires": { + "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@types/json5": { + "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "@types/minimist": { + "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "@types/normalize-package-data": { + "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/parse-json": { + "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "@ungap/url-search-params": { + "node_modules/@ungap/url-search-params": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw==" }, - "JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-jsx": { + "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 + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "ajv": { + "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, - "requires": { + "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" } }, - "ansi-regex": { + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "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, - "requires": { + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "argparse": { + "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 }, - "array-includes": { + "node_modules/array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array-union": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "array.prototype.flat": { + "node_modules/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "arrify": { + "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "balanced-match": { + "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==", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "camelcase-keys": { + "node_modules/camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "chalk": { + "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, - "requires": { + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "clone-regexp": { + "node_modules/clone-regexp": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, - "requires": { + "dependencies": { "is-regexp": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "color-convert": { + "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, - "requires": { + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "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 }, - "colord": { + "node_modules/colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, - "concat-map": { + "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=", "dev": true }, - "copy-anything": { + "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, - "requires": { + "dependencies": { "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "cosmiconfig": { + "node_modules/cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, - "requires": { + "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "cssesc": { + "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } }, - "debug": { + "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, - "requires": { + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "decamelize-keys": { + "node_modules/decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, - "requires": { + "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "requires": { + "dependencies": { "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "dir-glob": { + "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { + "dependencies": { "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "doctrine": { + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "entities": { + "node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "errno": { + "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, "optional": true, - "requires": { + "dependencies": { "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es-abstract": { + "node_modules/es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -561,149 +788,213 @@ "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-to-primitive": { + "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "node_modules/eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-config-standard": { + "node_modules/eslint-config-standard": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + } }, - "eslint-import-resolver-node": { + "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, - "requires": { + "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" - }, + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "ms": "^2.1.1" } }, - "eslint-module-utils": { + "node_modules/eslint-module-utils": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", "dev": true, - "requires": { + "dependencies": { "debug": "^3.2.7", "find-up": "^2.1.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "ms": "^2.1.1" } }, - "eslint-plugin-es": { + "node_modules/eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "requires": { + "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" } }, - "eslint-plugin-import": { + "node_modules/eslint-plugin-import": { "version": "2.25.4", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, - "requires": { + "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", @@ -718,39 +1009,46 @@ "resolve": "^1.20.0", "tsconfig-paths": "^3.12.0" }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/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": { - "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" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "eslint-plugin-node": { + "node_modules/eslint-plugin-import/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/eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "requires": { + "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", @@ -758,826 +1056,1191 @@ "resolve": "^1.10.1", "semver": "^6.1.0" }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "eslint-plugin-promise": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", - "dev": true + "dev": true, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0" + } }, - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "requires": { + "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", - "dev": true + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "execall": { + "node_modules/execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, - "requires": { + "dependencies": { "clone-regexp": "^2.1.0" + }, + "engines": { + "node": ">=8" } }, - "exit": { + "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-glob": { + "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastest-levenshtein": { + "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "fastq": { + "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "requires": { + "dependencies": { "reusify": "^1.0.4" } }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "find-up": { + "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, - "requires": { + "dependencies": { "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { + "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { + "node_modules/flatted": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-stdin": { + "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "get-symbol-description": { + "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, - "requires": { + "dependencies": { "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globjoin": { + "node_modules/globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true, "optional": true }, - "hard-rejection": { + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { + "node_modules/has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hosted-git-info": { + "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "html-tags": { + "node_modules/html-tags": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "iconv-lite": { + "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, "optional": true, - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ignore": { + "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4" + } }, - "image-size": { + "node_modules/image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, - "optional": true + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-lazy": { + "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "indent-string": { + "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "internal-slot": { + "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { + "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "requires": { + "dependencies": { "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-boolean-object": { + "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-negative-zero": { + "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-number": { + "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 + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-number-object": { + "node_modules/is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-regexp": { + "node_modules/is-regexp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "is-shared-array-buffer": { + "node_modules/is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-string": { + "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-weakref": { + "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-what": { + "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, - "isexe": { + "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 }, - "js-tokens": { + "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 }, - "js-yaml": { + "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, - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { + "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, - "requires": { + "dependencies": { "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "jsonlint-newline-fork": { + "node_modules/jsonlint-newline-fork": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/jsonlint-newline-fork/-/jsonlint-newline-fork-1.6.8.tgz", "integrity": "sha512-CS8WYYhU6w17KpjFogdNGF2oQcxD8Z68mKR3Igohg30uhwPTvDaQDONpcqhjrca3i/PTHhHYBobbiCxAfFiggA==", "dev": true, - "requires": { + "dependencies": { "@gerhobbelt/nomnom": "^1.8.4-27", "JSV": ">= 4.0.x" + }, + "bin": { + "jsonlint": "lib/cli.js" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true, + "engines": { + "node": "*" } }, - "kind-of": { + "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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "known-css-properties": { + "node_modules/known-css-properties": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", "dev": true }, - "less": { + "node_modules/less": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", "dev": true, - "requires": { + "dependencies": { "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", "needle": "^2.5.2", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" + "source-map": "~0.6.0" } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "linkify-it": { + "node_modules/linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, - "requires": { + "dependencies": { "uc.micro": "^1.0.1" } }, - "locate-path": { + "node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, - "requires": { + "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.truncate": { + "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "lru-cache": { + "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "make-dir": { + "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, "optional": true, - "requires": { + "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - } + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" } }, - "map-obj": { + "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "markdown-it": { + "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, - "requires": { + "dependencies": { "argparse": "^2.0.1", "entities": "~2.1.0", "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "markdownlint": { + "node_modules/markdownlint": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz", "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==", "dev": true, - "requires": { + "dependencies": { "markdown-it": "12.3.2" + }, + "engines": { + "node": ">=12" } }, - "mathml-tag-names": { + "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "mdurl": { + "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, - "meow": { + "node_modules/meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "requires": { + "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize": "^1.2.0", @@ -1591,733 +2254,1025 @@ "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "merge2": { + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "optional": true + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "min-indent": { + "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "minimist-options": { + "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "requires": { + "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "nanoid": { + "node_modules/nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": true + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "needle": { + "node_modules/needle": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dev": true, "optional": true, - "requires": { + "dependencies": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - } + "ms": "^2.1.1" } }, - "normalize-package-data": { + "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "requires": { + "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "normalize-path": { + "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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "normalize-selector": { + "node_modules/normalize-selector": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", "dev": true }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { + "node_modules/object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "requires": { + "dependencies": { "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "p-locate": { + "node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "requires": { + "dependencies": { "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "p-try": { + "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-node-version": { + "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "path-exists": { + "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "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, - "optional": true + "optional": true, + "engines": { + "node": ">=6" + } }, - "postcss": { + "node_modules/postcss": { "version": "8.4.5", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, - "requires": { + "dependencies": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "postcss-media-query-parser": { + "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", "dev": true }, - "postcss-resolve-nested-selector": { + "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", "dev": true }, - "postcss-safe-parser": { + "node_modules/postcss-safe-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "prr": { + "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true, "optional": true }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "quick-lru": { + "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "read-pkg": { + "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "requires": { + "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "read-pkg-up": { + "node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "redent": { + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/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/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "requires": { + "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "regexpp": { + "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "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 + "dev": true, + "engines": { + "node": ">=4" + } }, - "reusify": { + "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 + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, - "sax": { + "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, - "semver": { + "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 + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "snyk": { + "node_modules/snyk": { "version": "1.836.0", "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.836.0.tgz", "integrity": "sha512-iPJ4SCAEArquqo1Aq11KbHOWEu0OFauRn/4Acoq+hDqgTYN9IV8i5d6uHPAo3ePV2g24nF0Pb9N0sxIGgp833w==", - "dev": true + "deprecated": "A medium severity vulnerability was found in the Snyk CLI version you are using. We fixed the vulnerability in version 1.996.0. We recommend updating to the latest version. More details here: https://snyk.co/ue1NS", + "dev": true, + "bin": { + "snyk": "bin/snyk" + }, + "engines": { + "node": ">=10" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { + "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "spdx-correct": { + "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { + "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { + "node_modules/spdx-license-ids": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, - "specificity": { + "node_modules/specificity": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true + "dev": true, + "bin": { + "specificity": "bin/specificity" + } }, - "string.prototype.trimend": { + "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { + "node_modules/string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "strip-indent": { + "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "requires": { + "dependencies": { "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-search": { + "node_modules/style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", "dev": true }, - "stylelint": { + "node_modules/stylelint": { "version": "14.3.0", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz", "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^2.0.0", "colord": "^2.9.2", "cosmiconfig": "^7.0.1", @@ -2359,345 +3314,464 @@ "v8-compile-cache": "^2.3.0", "write-file-atomic": "^4.0.0" }, - "dependencies": { - "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "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==", - "dev": true - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "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 - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" } }, - "stylelint-config-recommended": { + "node_modules/stylelint-config-recommended": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", - "dev": true + "dev": true, + "peerDependencies": { + "stylelint": "^14.0.0" + } }, - "stylelint-config-standard": { + "node_modules/stylelint-config-standard": { "version": "24.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz", "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==", "dev": true, - "requires": { + "dependencies": { "stylelint-config-recommended": "^6.0.0" + }, + "peerDependencies": { + "stylelint": "^14.0.0" } }, - "supports-color": { + "node_modules/stylelint/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/stylelint/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/node_modules/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==", + "dev": true + }, + "node_modules/stylelint/node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stylelint/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stylelint/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/stylelint/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": ">=8" + } + }, + "node_modules/stylelint/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/stylelint/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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, - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-hyperlinks": { + "node_modules/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "svg-tags": { + "node_modules/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "trim-newlines": { + "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "tsconfig-paths": { + "node_modules/tsconfig-paths": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, - "requires": { + "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" } }, - "tslib": { + "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, - "type-check": { + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-fest": { + "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 + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "uc.micro": { + "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "uri-js": { + "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, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "v8-compile-cache": { + "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dev": true - }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz", "integrity": "sha512-JhcWoKffJNF7ivO9yflBhc7tn3wKnokMUfWpBriM9yCXj4ePQnRPcWglBkkg1AHC8nsW/EfxwwhqsLtOy59djA==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } From b1d07535b5ee7e64064e55dbf7cf11b15a6aab95 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:00:28 +0200 Subject: [PATCH 79/93] chore(deps): update actions/setup-node action to v3 (#167) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/validation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index f880457d..cf4c1c7e 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -29,7 +29,7 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: "npm" @@ -47,7 +47,7 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: "npm" From 21294478529bbdc9a639cde7992c2e7cf5b531cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:01:08 +0200 Subject: [PATCH 80/93] chore(deps): update actions/checkout action to v3 (#166) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/validation.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index cf4c1c7e..c1422ed9 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -14,7 +14,7 @@ jobs: name: 'MarkdownLint' steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Validate Markdown Sources uses: nosborn/github-action-markdown-cli@v1.1.1 with: @@ -27,7 +27,7 @@ jobs: node-version: [14.x] steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -45,7 +45,7 @@ jobs: node-version: [14.x] steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: From 02ecce676a7237a72c3507e37cc33665ead428de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:01:55 +0200 Subject: [PATCH 81/93] chore(deps): update nosborn/github-action-markdown-cli action to v3 (#168) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index c1422ed9..f2cf6078 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -16,7 +16,7 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 - name: Validate Markdown Sources - uses: nosborn/github-action-markdown-cli@v1.1.1 + uses: nosborn/github-action-markdown-cli@v3.3.0 with: files: . eslint: From eba3cb060ee4650a84281ac448f31a5d081eecab Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:24:50 +0200 Subject: [PATCH 82/93] chore(pipeline): run workflows with node 16 (#174) --- .github/workflows/validation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index f2cf6078..e1f24580 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -24,7 +24,7 @@ jobs: name: 'ESLint' strategy: matrix: - node-version: [14.x] + node-version: [14.x, 16.x] steps: - name: Checkout Code uses: actions/checkout@v3 @@ -42,7 +42,7 @@ jobs: name: 'Stylelint' strategy: matrix: - node-version: [14.x] + node-version: [14.x, 16.x] steps: - name: Checkout Code uses: actions/checkout@v3 From ad587a08443f612caee05b19efadb758509a73dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:26:29 +0200 Subject: [PATCH 83/93] chore(deps-dev): bump snyk from 1.836.0 to 1.1064.0 (#165) Bumps [snyk](https://github.com/snyk/snyk) from 1.836.0 to 1.1064.0. - [Release notes](https://github.com/snyk/snyk/releases) - [Commits](https://github.com/snyk/snyk/compare/v1.836.0...v1.1064.0) --- updated-dependencies: - dependency-name: snyk dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5913d506..e0bae2b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3118,16 +3118,15 @@ } }, "node_modules/snyk": { - "version": "1.836.0", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.836.0.tgz", - "integrity": "sha512-iPJ4SCAEArquqo1Aq11KbHOWEu0OFauRn/4Acoq+hDqgTYN9IV8i5d6uHPAo3ePV2g24nF0Pb9N0sxIGgp833w==", - "deprecated": "A medium severity vulnerability was found in the Snyk CLI version you are using. We fixed the vulnerability in version 1.996.0. We recommend updating to the latest version. More details here: https://snyk.co/ue1NS", + "version": "1.1064.0", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1064.0.tgz", + "integrity": "sha512-f9mNO5rUc5nVVZ1sN+do2i5/RGHKlOQoNk5HiEO9WkPEn2pFllJv2XAw5Bn7sFj1eLXNFVUOUlo6SVqGnX7lXw==", "dev": true, "bin": { "snyk": "bin/snyk" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/source-map": { From 6c96d9aaae88faa9542bc225ee43171bc8db21b6 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:32:07 +0200 Subject: [PATCH 84/93] chore(deps): update dependency eslint-plugin-promise to v6 eslint-config-standard to v17 (#171) * update eslint * replace eslint-plugin-node --- package-lock.json | 194 ++++++++++++++++++++-------------------------- package.json | 6 +- 2 files changed, 89 insertions(+), 111 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0bae2b2..3668c9b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,10 @@ }, "devDependencies": { "eslint": "^8.7.0", - "eslint-config-standard": "^16.0.3", + "eslint-config-standard": "^17.0.0", "eslint-plugin-import": "^2.25.4", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.2.0", + "eslint-plugin-n": "^16.0.1", + "eslint-plugin-promise": "^6.0.0", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.25.1", @@ -481,6 +481,30 @@ "node": ">=8" } }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -880,9 +904,9 @@ } }, "node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -898,11 +922,14 @@ "url": "https://feross.org/support" } ], + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-import-resolver-node": { @@ -946,47 +973,23 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/eslint-plugin-es-x": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", + "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0" }, "engines": { - "node": ">=8.10.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { @@ -1043,60 +1046,56 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", "dev": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5.16.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/eslint-plugin-promise": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", - "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^7.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-scope": { @@ -1634,9 +1633,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -1781,9 +1780,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2949,18 +2948,6 @@ "node": ">=8" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -2971,12 +2958,12 @@ } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3058,15 +3045,6 @@ "dev": true, "optional": true }, - "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/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index 916903ca..6b7fcdc8 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,10 @@ "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { "eslint": "^8.7.0", - "eslint-config-standard": "^16.0.3", + "eslint-config-standard": "^17.0.0", "eslint-plugin-import": "^2.25.4", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.2.0", + "eslint-plugin-n": "^16.0.1", + "eslint-plugin-promise": "^6.0.0", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.25.1", From 12bf1a71df3ec44687433df4aa9b57c1c3242d18 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:37:05 +0200 Subject: [PATCH 85/93] chore(deps): update dependency stylelint to v15 (#172) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6b7fcdc8..1908f4c0 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "less": "^4.1.2", "markdownlint": "^0.25.1", "snyk": "^1.317.0", - "stylelint": "^14.2.0", + "stylelint": "^15.0.0", "stylelint-config-standard": "^24.0.0" }, "snyk": true, From bd685983cf2bd6bebb4f1641664a13791c7ef652 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:39:07 +0200 Subject: [PATCH 86/93] chore(deps): update dependency stylelint-config-standard to v34 (#173) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 1125 +++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 616 insertions(+), 511 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3668c9b3..692a8b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,8 +21,8 @@ "less": "^4.1.2", "markdownlint": "^0.25.1", "snyk": "^1.317.0", - "stylelint": "^14.2.0", - "stylelint-config-standard": "^24.0.0" + "stylelint": "^15.0.0", + "stylelint-config-standard": "^34.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -35,34 +35,106 @@ } }, "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.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/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/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "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.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -107,13 +179,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -122,7 +194,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -140,6 +212,92 @@ "node": ">=4" } }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -321,12 +479,6 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "node_modules/@ungap/url-search-params": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", @@ -447,12 +599,21 @@ "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -490,21 +651,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -528,26 +674,42 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -569,18 +731,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -600,9 +750,9 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/concat-map": { @@ -624,19 +774,21 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, "node_modules/cross-spawn": { @@ -653,6 +805,28 @@ "node": ">= 8" } }, + "node_modules/css-functions-list": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -666,9 +840,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "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" @@ -683,23 +857,38 @@ } }, "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -707,7 +896,7 @@ "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -755,6 +944,12 @@ "node": ">=6.0.0" } }, + "node_modules/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==", + "dev": true + }, "node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -1071,21 +1266,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", @@ -1255,18 +1435,6 @@ "node": ">=0.10.0" } }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -1283,9 +1451,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1323,10 +1491,13 @@ "dev": true }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { "version": "1.13.0", @@ -1418,18 +1589,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1611,12 +1770,15 @@ } }, "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/iconv-lite": { @@ -1689,12 +1851,15 @@ } }, "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { @@ -1736,7 +1901,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-bigint": { @@ -1815,8 +1980,17 @@ "node": ">=0.10.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, @@ -1875,7 +2049,7 @@ "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1897,15 +2071,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", @@ -1945,12 +2110,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2058,9 +2217,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", + "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", "dev": true }, "node_modules/less": { @@ -2139,7 +2298,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "node_modules/lru-cache": { @@ -2228,6 +2387,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -2235,35 +2400,35 @@ "dev": true }, "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" @@ -2282,13 +2447,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -2358,10 +2523,16 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2418,21 +2589,6 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2442,12 +2598,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true - }, "node_modules/object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", @@ -2670,29 +2820,33 @@ } }, "node_modules/postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "version": "8.4.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", + "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "nanoid": "^3.1.30", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" + "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -2716,9 +2870,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -2780,105 +2934,111 @@ ] }, "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg-up/node_modules/path-exists": { @@ -2891,61 +3051,43 @@ } }, "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/require-from-string": { @@ -3045,6 +3187,21 @@ "dev": true, "optional": true }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3081,10 +3238,16 @@ } }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/slash": { "version": "3.0.0", @@ -3095,6 +3258,23 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/snyk": { "version": "1.1064.0", "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1064.0.tgz", @@ -3127,9 +3307,9 @@ } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -3153,18 +3333,23 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "bin": { - "specificity": "bin/specificity" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/string.prototype.trimend": { @@ -3215,15 +3400,18 @@ } }, "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "dependencies": { - "min-indent": "^1.0.0" + "min-indent": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-json-comments": { @@ -3245,57 +3433,57 @@ "dev": true }, "node_modules/stylelint": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz", - "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==", + "version": "15.10.2", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.2.tgz", + "integrity": "sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==", "dev": true, "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.0", + "@csstools/css-tokenizer": "^2.1.1", + "@csstools/media-query-list-parser": "^2.1.2", + "@csstools/selector-specificity": "^3.0.0", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "debug": "^4.3.3", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.0", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.0", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.1.0", - "ignore": "^5.2.0", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", + "known-css-properties": "^0.27.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.4", + "meow": "^10.1.5", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", "picocolors": "^1.0.0", - "postcss": "^8.4.5", - "postcss-media-query-parser": "^0.2.3", + "postcss": "^8.4.25", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "specificity": "^0.4.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.0" + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" }, "bin": { - "stylelint": "bin/stylelint.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -3303,49 +3491,30 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", - "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", "dev": true, - "peerDependencies": { - "stylelint": "^14.0.0" - } - }, - "node_modules/stylelint-config-standard": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz", - "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==", - "dev": true, - "dependencies": { - "stylelint-config-recommended": "^6.0.0" + "engines": { + "node": "^14.13.1 || >=16.0.0" }, "peerDependencies": { - "stylelint": "^14.0.0" + "stylelint": "^15.10.0" } }, - "node_modules/stylelint/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "node_modules/stylelint-config-standard": { + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "stylelint-config-recommended": "^13.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/stylelint/node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, "engines": { - "node": ">=8" + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -3354,12 +3523,6 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/stylelint/node_modules/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==", - "dev": true - }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -3386,15 +3549,6 @@ "node": ">=6" } }, - "node_modules/stylelint/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/stylelint/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -3404,12 +3558,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3419,53 +3567,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/stylelint/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3491,16 +3592,16 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.18" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -3521,6 +3622,44 @@ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3540,12 +3679,15 @@ } }, "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsconfig-paths": { @@ -3590,26 +3732,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", - "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -3643,13 +3765,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/validate-npm-package-license": { @@ -3700,18 +3816,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.0.tgz", - "integrity": "sha512-JhcWoKffJNF7ivO9yflBhc7tn3wKnokMUfWpBriM9yCXj4ePQnRPcWglBkkg1AHC8nsW/EfxwwhqsLtOy59djA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^4.0.0" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/yallist": { @@ -3720,15 +3834,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", diff --git a/package.json b/package.json index 1908f4c0..27e223ce 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "markdownlint": "^0.25.1", "snyk": "^1.317.0", "stylelint": "^15.0.0", - "stylelint-config-standard": "^24.0.0" + "stylelint-config-standard": "^34.0.0" }, "snyk": true, "dependencies": { From efb7e3d564a38a7bbae848b8217a8ee5c03c2657 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:41:24 +0200 Subject: [PATCH 87/93] chore(deps): update dependency eslint-plugin-import to v2.28.0 (#175) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 758 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 570 insertions(+), 188 deletions(-) diff --git a/package-lock.json b/package-lock.json index 692a8b92..751256cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -551,16 +551,29 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -579,15 +592,73 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -614,6 +685,18 @@ "node": ">=8" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -909,15 +992,19 @@ "dev": true }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/dir-glob": { @@ -982,31 +1069,50 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -1015,6 +1121,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -1128,13 +1257,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -1147,16 +1277,20 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -1188,24 +1322,29 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.12.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -1215,12 +1354,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -1235,11 +1374,14 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/eslint-plugin-n": { "version": "16.0.1", @@ -1532,18 +1674,6 @@ "node": ">=8" } }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1563,6 +1693,15 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1575,15 +1714,43 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1652,6 +1819,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -1678,6 +1860,18 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -1713,9 +1907,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1730,10 +1924,34 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -1885,12 +2103,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -1898,6 +2116,20 @@ "node": ">= 0.4" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1933,9 +2165,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -2023,9 +2255,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -2072,10 +2304,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2110,6 +2345,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2128,6 +2378,12 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2171,9 +2427,9 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -2276,19 +2532,6 @@ "uc.micro": "^1.0.1" } }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2599,9 +2842,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2617,14 +2860,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -2634,15 +2877,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -2677,39 +2949,6 @@ "node": ">= 0.8.0" } }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2749,15 +2988,6 @@ "node": ">= 0.10" } }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3090,6 +3320,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -3173,6 +3420,38 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3352,27 +3631,46 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3691,14 +3989,14 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, @@ -3732,6 +4030,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -3739,14 +4102,14 @@ "dev": true }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -3809,6 +4172,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", From 5d3812adf93d1991c1fa4d2b56567c7f4a159c35 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:42:43 +0200 Subject: [PATCH 88/93] chore(deps): update dependency less to v4.2.0 (#176) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 751256cd..75f6acd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2000,13 +2000,13 @@ } }, "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==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -2479,9 +2479,9 @@ "dev": true }, "node_modules/less": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", - "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, "dependencies": { "copy-anything": "^2.0.1", @@ -2500,7 +2500,7 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "needle": "^2.5.2", + "needle": "^3.1.0", "source-map": "~0.6.0" } }, @@ -2790,14 +2790,14 @@ "dev": true }, "node_modules/needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", "dev": true, "optional": true, "dependencies": { "debug": "^3.2.6", - "iconv-lite": "^0.4.4", + "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, "bin": { From 0b6cfd6725b31da896c7cf686144866cf0e032a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:43:55 +0200 Subject: [PATCH 89/93] chore(deps): update dependency markdownlint to ^0.30.0 (#164) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 47 ++++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75f6acd6..09bfdb2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "eslint-plugin-promise": "^6.0.0", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", - "markdownlint": "^0.25.1", + "markdownlint": "^0.30.0", "snyk": "^1.317.0", "stylelint": "^15.0.0", "stylelint-config-standard": "^34.0.0" @@ -1038,10 +1038,13 @@ "dev": true }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -2524,9 +2527,9 @@ "dev": true }, "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dev": true, "dependencies": { "uc.micro": "^1.0.1" @@ -2593,14 +2596,14 @@ } }, "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, "dependencies": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, @@ -2609,15 +2612,25 @@ } }, "node_modules/markdownlint": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz", - "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.30.0.tgz", + "integrity": "sha512-nInuFvI/rEzanAOArW5490Ez4EYpB5ODqVM0mcDYCPx9DKJWCQqCgejjiCvbSeE7sjbDscVtZmwr665qpF5xGA==", "dev": true, "dependencies": { - "markdown-it": "12.3.2" + "markdown-it": "13.0.1", + "markdownlint-micromark": "0.1.7" }, "engines": { - "node": ">=12" + "node": ">=16" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz", + "integrity": "sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==", + "dev": true, + "engines": { + "node": ">=16" } }, "node_modules/mathml-tag-names": { diff --git a/package.json b/package.json index 27e223ce..8ee4a138 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint-plugin-promise": "^6.0.0", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", - "markdownlint": "^0.25.1", + "markdownlint": "^0.30.0", "snyk": "^1.317.0", "stylelint": "^15.0.0", "stylelint-config-standard": "^34.0.0" From eaeb87888c6d4afa60990641eea2bacf92917710 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:47:12 +0200 Subject: [PATCH 90/93] chore(deps): update dependency snyk to v1.1200.0 (#177) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 236 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 230 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09bfdb2c..cf8e4d05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -461,6 +461,76 @@ "node": ">= 8" } }, + "node_modules/@sentry-internal/tracing": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.63.0.tgz", + "integrity": "sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg==", + "dev": true, + "dependencies": { + "@sentry/core": "7.63.0", + "@sentry/types": "7.63.0", + "@sentry/utils": "7.63.0", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.63.0.tgz", + "integrity": "sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg==", + "dev": true, + "dependencies": { + "@sentry/types": "7.63.0", + "@sentry/utils": "7.63.0", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.63.0.tgz", + "integrity": "sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ==", + "dev": true, + "dependencies": { + "@sentry-internal/tracing": "7.63.0", + "@sentry/core": "7.63.0", + "@sentry/types": "7.63.0", + "@sentry/utils": "7.63.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/types": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.63.0.tgz", + "integrity": "sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.63.0.tgz", + "integrity": "sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw==", + "dev": true, + "dependencies": { + "@sentry/types": "7.63.0", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -505,6 +575,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.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==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -703,6 +785,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -844,6 +932,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -1007,6 +1104,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1164,6 +1267,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1807,6 +1916,23 @@ "node": ">=10.13.0" } }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, "node_modules/globals": { "version": "13.21.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", @@ -2002,6 +2128,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2429,6 +2568,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -2547,6 +2692,12 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2633,6 +2784,18 @@ "node": ">=16" } }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -3410,6 +3573,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3494,6 +3674,39 @@ "node": ">=10" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3568,10 +3781,15 @@ } }, "node_modules/snyk": { - "version": "1.1064.0", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1064.0.tgz", - "integrity": "sha512-f9mNO5rUc5nVVZ1sN+do2i5/RGHKlOQoNk5HiEO9WkPEn2pFllJv2XAw5Bn7sFj1eLXNFVUOUlo6SVqGnX7lXw==", + "version": "1.1200.0", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1200.0.tgz", + "integrity": "sha512-sWC5mC489SN7jylQuFDN9HyYI2eAiFbRjx+R0me902/+k20I/WHMdIwyJEcPz/rCYDUy9xALpVGb7r1GBwoKjQ==", "dev": true, + "hasInstallScript": true, + "dependencies": { + "@sentry/node": "^7.36.0", + "global-agent": "^3.0.0" + }, "bin": { "snyk": "bin/snyk" }, @@ -3630,6 +3848,12 @@ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4014,9 +4238,9 @@ } }, "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.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", "dev": true }, "node_modules/type-check": { From e52ae9559126c4eca05041cc779be3ce4b88f6bd Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 14 Aug 2023 11:19:48 +0200 Subject: [PATCH 91/93] chore(deps): change to @snyk/protect (#181) * chore(deps): change to @snyk/protect * change packages --- package-lock.json | 240 ++-------------------------------------------- package.json | 4 +- 2 files changed, 10 insertions(+), 234 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf8e4d05..381b3328 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@ungap/url-search-params": "^0.2.2" }, "devDependencies": { + "@snyk/protect": "^1.1200.0", "eslint": "^8.7.0", "eslint-config-standard": "^17.0.0", "eslint-plugin-import": "^2.25.4", @@ -20,7 +21,6 @@ "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.30.0", - "snyk": "^1.317.0", "stylelint": "^15.0.0", "stylelint-config-standard": "^34.0.0" } @@ -461,74 +461,16 @@ "node": ">= 8" } }, - "node_modules/@sentry-internal/tracing": { - "version": "7.63.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.63.0.tgz", - "integrity": "sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg==", - "dev": true, - "dependencies": { - "@sentry/core": "7.63.0", - "@sentry/types": "7.63.0", - "@sentry/utils": "7.63.0", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/core": { - "version": "7.63.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.63.0.tgz", - "integrity": "sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg==", - "dev": true, - "dependencies": { - "@sentry/types": "7.63.0", - "@sentry/utils": "7.63.0", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/node": { - "version": "7.63.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.63.0.tgz", - "integrity": "sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ==", - "dev": true, - "dependencies": { - "@sentry-internal/tracing": "7.63.0", - "@sentry/core": "7.63.0", - "@sentry/types": "7.63.0", - "@sentry/utils": "7.63.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/types": { - "version": "7.63.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.63.0.tgz", - "integrity": "sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils": { - "version": "7.63.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.63.0.tgz", - "integrity": "sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw==", + "node_modules/@snyk/protect": { + "version": "1.1200.0", + "resolved": "https://registry.npmjs.org/@snyk/protect/-/protect-1.1200.0.tgz", + "integrity": "sha512-YlCTFVwyfxQlqEXyHtUPHsmhONvR0rLlVHmykzNhd5ggX97gUryLNpwFIhWziQIyCwnOVXjJxDy1Xc9bNP4Nqw==", "dev": true, - "dependencies": { - "@sentry/types": "7.63.0", - "tslib": "^2.4.1 || ^1.9.3" + "bin": { + "snyk-protect": "bin/snyk-protect" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/@types/json5": { @@ -575,18 +517,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.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==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -785,12 +715,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -932,15 +856,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -1104,12 +1019,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1267,12 +1176,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1916,23 +1819,6 @@ "node": ">=10.13.0" } }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, "node_modules/globals": { "version": "13.21.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", @@ -2128,19 +2014,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2568,12 +2441,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -2692,12 +2559,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2784,18 +2645,6 @@ "node": ">=16" } }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -3573,23 +3422,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3674,39 +3506,6 @@ "node": ">=10" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3780,23 +3579,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snyk": { - "version": "1.1200.0", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1200.0.tgz", - "integrity": "sha512-sWC5mC489SN7jylQuFDN9HyYI2eAiFbRjx+R0me902/+k20I/WHMdIwyJEcPz/rCYDUy9xALpVGb7r1GBwoKjQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@sentry/node": "^7.36.0", - "global-agent": "^3.0.0" - }, - "bin": { - "snyk": "bin/snyk" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3848,12 +3630,6 @@ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", diff --git a/package.json b/package.json index 8ee4a138..5c905010 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --insert-final-newline --in-place ';'", "validate:md": "markdownlint *.md", "fix:js": "eslint --fix **/*.js", - "snyk-protect": "snyk protect", + "snyk-protect": "snyk-protect", "prepublish": "npm run snyk-protect" }, "repository": { @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/CFenner/MagicMirror-Netatmo-Module#readme", "devDependencies": { + "@snyk/protect": "^1.1200.0", "eslint": "^8.7.0", "eslint-config-standard": "^17.0.0", "eslint-plugin-import": "^2.25.4", @@ -34,7 +35,6 @@ "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.30.0", - "snyk": "^1.317.0", "stylelint": "^15.0.0", "stylelint-config-standard": "^34.0.0" }, From 71e4a29f4b99d5871ee07793f0911923c578c2db Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 14 Aug 2023 11:21:23 +0200 Subject: [PATCH 92/93] chore(pipeline): use npm clean-install (#180) * chore(pipeline): use npm clean-install * Update validation.yml * Update validation.yml --- .github/workflows/validation.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index e1f24580..3f1661b3 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -24,7 +24,7 @@ jobs: name: 'ESLint' strategy: matrix: - node-version: [14.x, 16.x] + node-version: [16.x] steps: - name: Checkout Code uses: actions/checkout@v3 @@ -34,7 +34,7 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install Dependencies - run: npm install + run: npm clean-install - name: Validate JS Sources run: npm run validate:js stylelint: @@ -42,7 +42,7 @@ jobs: name: 'Stylelint' strategy: matrix: - node-version: [14.x, 16.x] + node-version: [16.x] steps: - name: Checkout Code uses: actions/checkout@v3 @@ -52,7 +52,7 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install Dependencies - run: npm install + run: npm clean-install - name: Validate CSS Sources run: npm run validate:css From 8ed3806b3d3497386209d8c811add7ad47aa524d Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 14 Aug 2023 11:26:32 +0200 Subject: [PATCH 93/93] chore(tests): add jest test framework (#179) * add jest * configure eslint to respect jest * add workflow * add test case * use npm install * Update validation.yml * fix package-lock.json * move --- .eslintrc.yml | 3 +- .github/workflows/validation.yml | 18 + node_helper.js | 160 +- node_helper_impl.js | 165 + node_helper_impl.test.js | 11 + package-lock.json | 5419 ++++++++++++++++++++++-------- package.json | 3 + 7 files changed, 4244 insertions(+), 1535 deletions(-) create mode 100644 node_helper_impl.js create mode 100644 node_helper_impl.test.js diff --git a/.eslintrc.yml b/.eslintrc.yml index e2718c74..ab10f0af 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -2,6 +2,7 @@ env: browser: true es2021: true node: true + jest: true extends: - standard parserOptions: @@ -12,4 +13,4 @@ globals: Log: true rules: "comma-dangle": ["error", "always-multiline"] - + diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 3f1661b3..c3f2c5c5 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -55,4 +55,22 @@ jobs: run: npm clean-install - name: Validate CSS Sources run: npm run validate:css + unit: + runs-on: ubuntu-latest + name: 'Unit Tests' + strategy: + matrix: + node-version: [16.x] + steps: + - name: Checkout Code + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - name: Install Dependencies + run: npm clean-install + - name: Validate JS Sources + run: npm run test diff --git a/node_helper.js b/node_helper.js index 36a624c3..3fb6fa94 100644 --- a/node_helper.js +++ b/node_helper.js @@ -5,162 +5,6 @@ * MIT Licensed. */ const NodeHelper = require('node_helper') -const fs = require('fs') -const path = require('path') -const https = require('https') -const URLSearchParams = require('@ungap/url-search-params') +const api = require('./api') -module.exports = NodeHelper.create({ - start: function () { - console.log('Netatmo helper started ...') - this.token = null - this.token_time = null - }, - notifications: { - AUTH: 'NETATMO_AUTH', - AUTH_RESPONSE: 'NETATMO_AUTH_RESPONSE', - DATA: 'NETATMO_DATA', - DATA_RESPONSE: 'NETATMO_DATA_RESPONSE', - }, - authenticate: function (config) { - const self = this - self.config = config - - // TODO: only update if token is invalid - - const req = https.request({ - hostname: self.config.apiBase, - path: self.config.authEndpoint, - method: 'POST', - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - }, self.callbackAuthenticate.bind(self)) - - req.on('error', function (e) { - console.log('There is a problem with your request:', e.message) - self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { - // instanceID: self.config.instanceID, - payloadReturn: e.message, - }) - }) - - req.write(new URLSearchParams({ - scope: 'read_station', - grant_type: 'password', - username: self.config.username, - password: self.config.password, - client_id: self.config.clientId, - client_secret: self.config.clientSecret, - }).toString()) - - req.end() - }, - loadData: function (config) { - const self = this - self.config = config - if (self.config.mockData === true) { - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: this.mockData(), - status: 'OK', - }) - return - } - if (self.token === null) { - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: 400, - status: 'INVALID_TOKEN', - message: 'token not set', - }) - return - } - - const req = https.request({ - hostname: self.config.apiBase, - path: self.config.dataEndpoint, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${self.token}`, - }, - }, self.callbackData.bind(self)) - - req.on('error', function (e) { - console.log('There is a problem with your request:', e.message) - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: e.message, - status: 'NOTOK', - message: e.message, - }) - }) - req.end() - }, - mockData: function () { - const sample = fs.readFileSync(path.join(__dirname, 'sample', 'sample.json'), 'utf8') - return JSON.parse(sample) - }, - callbackAuthenticate: function (response) { - const self = this - let result = '' - - response.on('error', function (e) { console.log('error', e) }) - response.on('data', function (chunk) { result += chunk }) - response.on('end', function () { - result = JSON.parse(result) - if (response.statusCode === 200) { - console.log('UPDATING TOKEN ' + result.access_token) - self.token = result.access_token - self.token_time = new Date() - // we got a new token, save it to main file to allow it to request the datas - self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { - status: 'OK', - }) - } else { - console.log('status code:', response.statusCode, '\n', result) - self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { - // instanceID: self.config.instanceID, - payloadReturn: response.statusCode, - status: 'NOTOK', - message: result, - }) - } - }) - }, - callbackData: function (response) { - const self = this - let result = '' - - response.on('error', function (e) { console.log('error', e) }) - response.on('data', function (chunk) { result += chunk }) - response.on('end', function () { - result = JSON.parse(result) - if (response.statusCode === 200) { - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: result.body.devices, - status: 'OK', - }) - } else if (response.statusCode === 403) { - console.log('status code:', response.statusCode, '\n', result) - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: response.statusCode, - status: 'INVALID_TOKEN', - message: result, - }) - } else { - console.log('status code:', response.statusCode, '\n', result) - self.sendSocketNotification(self.notifications.DATA_RESPONSE, { - payloadReturn: response.statusCode, - status: 'NOTOK', - message: result, - }) - } - }) - }, - socketNotificationReceived: function (notification, payload) { - switch (notification) { - case this.notifications.AUTH: - this.authenticate(payload) - break - case this.notifications.DATA: - this.loadData(payload) - break - } - }, -}) +module.exports = NodeHelper.create(api) diff --git a/node_helper_impl.js b/node_helper_impl.js new file mode 100644 index 00000000..44481bf3 --- /dev/null +++ b/node_helper_impl.js @@ -0,0 +1,165 @@ +/* Magic Mirror + * Module: MagicMirror-Netatmo-Module + * + * By Christopher Fenner https://github.com/CFenner + * MIT Licensed. + */ +const fs = require('fs') +const path = require('path') +const https = require('https') +const URLSearchParams = require('@ungap/url-search-params') + +module.exports = { + notifications: { + AUTH: 'NETATMO_AUTH', + AUTH_RESPONSE: 'NETATMO_AUTH_RESPONSE', + DATA: 'NETATMO_DATA', + DATA_RESPONSE: 'NETATMO_DATA_RESPONSE', + }, + start: function () { + console.log('Netatmo helper started ...') + this.token = null + this.token_time = null + }, + authenticate: function (config) { + const self = this + self.config = config + + // TODO: only update if token is invalid + + const req = https.request({ + hostname: self.config.apiBase, + path: self.config.authEndpoint, + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }, self.callbackAuthenticate.bind(self)) + + req.on('error', function (e) { + console.log('There is a problem with your request:', e.message) + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + // instanceID: self.config.instanceID, + payloadReturn: e.message, + }) + }) + + req.write(new URLSearchParams({ + scope: 'read_station', + grant_type: 'password', + username: self.config.username, + password: self.config.password, + client_id: self.config.clientId, + client_secret: self.config.clientSecret, + }).toString()) + + req.end() + }, + loadData: function (config) { + const self = this + self.config = config + if (self.config.mockData === true) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: this.mockData(), + status: 'OK', + }) + return + } + if (self.token === null) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: 400, + status: 'INVALID_TOKEN', + message: 'token not set', + }) + return + } + + const req = https.request({ + hostname: self.config.apiBase, + path: self.config.dataEndpoint, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${self.token}`, + }, + }, self.callbackData.bind(self)) + + req.on('error', function (e) { + console.log('There is a problem with your request:', e.message) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: e.message, + status: 'NOTOK', + message: e.message, + }) + }) + req.end() + }, + mockData: function () { + const sample = fs.readFileSync(path.join(__dirname, 'sample', 'sample.json'), 'utf8') + return JSON.parse(sample) + }, + callbackAuthenticate: function (response) { + const self = this + let result = '' + + response.on('error', function (e) { console.log('error', e) }) + response.on('data', function (chunk) { result += chunk }) + response.on('end', function () { + result = JSON.parse(result) + if (response.statusCode === 200) { + console.log('UPDATING TOKEN ' + result.access_token) + self.token = result.access_token + self.token_time = new Date() + // we got a new token, save it to main file to allow it to request the datas + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + status: 'OK', + }) + } else { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.AUTH_RESPONSE, { + // instanceID: self.config.instanceID, + payloadReturn: response.statusCode, + status: 'NOTOK', + message: result, + }) + } + }) + }, + callbackData: function (response) { + const self = this + let result = '' + + response.on('error', function (e) { console.log('error', e) }) + response.on('data', function (chunk) { result += chunk }) + response.on('end', function () { + result = JSON.parse(result) + if (response.statusCode === 200) { + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: result.body.devices, + status: 'OK', + }) + } else if (response.statusCode === 403) { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: response.statusCode, + status: 'INVALID_TOKEN', + message: result, + }) + } else { + console.log('status code:', response.statusCode, '\n', result) + self.sendSocketNotification(self.notifications.DATA_RESPONSE, { + payloadReturn: response.statusCode, + status: 'NOTOK', + message: result, + }) + } + }) + }, + socketNotificationReceived: function (notification, payload) { + switch (notification) { + case this.notifications.AUTH: + this.authenticate(payload) + break + case this.notifications.DATA: + this.loadData(payload) + break + } + }, +} diff --git a/node_helper_impl.test.js b/node_helper_impl.test.js new file mode 100644 index 00000000..47a33742 --- /dev/null +++ b/node_helper_impl.test.js @@ -0,0 +1,11 @@ +const moduleName = 'node_helper_impl' +const moduleUnderTest = require('./' + moduleName + '.js') + +describe(moduleName, () => { + test('test notifications map', () => { + expect(moduleUnderTest.notifications).toHaveProperty('AUTH', 'NETATMO_AUTH') + expect(moduleUnderTest.notifications).toHaveProperty('AUTH_RESPONSE', 'NETATMO_AUTH_RESPONSE') + expect(moduleUnderTest.notifications).toHaveProperty('DATA', 'NETATMO_DATA') + expect(moduleUnderTest.notifications).toHaveProperty('DATA_RESPONSE', 'NETATMO_DATA_RESPONSE') + }) +}) diff --git a/package-lock.json b/package-lock.json index 381b3328..af99de08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "eslint-plugin-import": "^2.25.4", "eslint-plugin-n": "^16.0.1", "eslint-plugin-promise": "^6.0.0", + "jest": "^29.6.2", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.30.0", @@ -34,6 +35,19 @@ "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", @@ -118,6 +132,234 @@ "node": ">=4" } }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.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.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "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-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", @@ -127,6 +369,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/highlight": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", @@ -212,123 +477,376 @@ "node": ">=4" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", - "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "node_modules/@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=6.0.0" + } + }, + "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": { - "@csstools/css-tokenizer": "^2.2.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", - "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "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": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "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": { - "ajv": "^6.12.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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/@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": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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-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": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", @@ -426,535 +944,667 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "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/@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": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "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" + "node": ">=8" } }, - "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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "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/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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": ">= 8" + "node": ">=8" } }, - "node_modules/@snyk/protect": { - "version": "1.1200.0", - "resolved": "https://registry.npmjs.org/@snyk/protect/-/protect-1.1200.0.tgz", - "integrity": "sha512-YlCTFVwyfxQlqEXyHtUPHsmhONvR0rLlVHmykzNhd5ggX97gUryLNpwFIhWziQIyCwnOVXjJxDy1Xc9bNP4Nqw==", + "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, - "bin": { - "snyk-protect": "bin/snyk-protect" + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", + "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@ungap/url-search-params": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", - "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw==" + "node_modules/@jest/core": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", + "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.2", + "@jest/reporters": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-resolve-dependencies": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "jest-watcher": "^29.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "node_modules/@jest/environment": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", + "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.2" }, "engines": { - "node": ">=0.4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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/@jest/expect": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "expect": "^29.6.2", + "jest-snapshot": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/@jest/expect-utils": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", + "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "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" + "jest-get-type": "^29.4.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/@jest/fake-timers": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", + "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/@jest/globals": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", + "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/@jest/reporters": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", + "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "node_modules/@jest/test-result": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", + "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "@jest/console": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "node_modules/@jest/test-sequencer": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", + "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "@jest/test-result": "^29.6.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/@jest/transform": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", + "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "node_modules/@jest/transform/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">= 0.4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "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==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "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": { - "fill-range": "^7.0.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "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, - "dependencies": { - "semver": "^7.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "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": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "node_modules/@snyk/protect": { + "version": "1.1200.0", + "resolved": "https://registry.npmjs.org/@snyk/protect/-/protect-1.1200.0.tgz", + "integrity": "sha512-YlCTFVwyfxQlqEXyHtUPHsmhONvR0rLlVHmykzNhd5ggX97gUryLNpwFIhWziQIyCwnOVXjJxDy1Xc9bNP4Nqw==", "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" + "bin": { + "snyk-protect": "bin/snyk-protect" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "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/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "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" + "@babel/types": "^7.0.0" } }, - "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/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "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/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, - "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=", + "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/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "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==", "dev": true, "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "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==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" + "@types/istanbul-lib-report": "*" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", + "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "@types/yargs-parser": "*" } }, - "node_modules/css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "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/@ungap/url-search-params": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", + "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw==" + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=12.22" + "node": ">=0.4.0" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "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, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "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, - "bin": { - "cssesc": "bin/cssesc" + "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" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "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/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": { - "ms": "2.1.2" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "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" @@ -963,171 +1613,157 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "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/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "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, - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/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==", - "dev": true - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, - "optional": true, "dependencies": { - "prr": "~1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", + "define-properties": "^1.2.0", "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1136,39 +1772,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "dependencies": { - "has": "^1.0.3" + "engines": { + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, "engines": { "node": ">= 0.4" }, @@ -1176,569 +1802,1903 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/babel-jest": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", + "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, + "dependencies": { + "@jest/transform": "^29.6.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "engines": { - "node": ">=12.0.0" + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "node-int64": "^0.4.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "semver": "^7.0.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { - "debug": "^3.2.7" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001520", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz", + "integrity": "sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "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/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/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "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=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "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/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.490", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", + "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", + "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.12.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.2", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", - "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", - "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.12.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "resolve": "^1.22.3", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=4" + "node": "*" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-n": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", - "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.1.0", - "ignore": "^5.2.4", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=6" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "function-bind": "^1.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "get-intrinsic": "^1.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "dependencies": { - "p-locate": "^5.0.0" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, "engines": { - "node": ">=0.10" + "node": ">=10.17.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, "dependencies": { - "estraverse": "^5.2.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">=8" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { - "node": ">= 4.9.1" + "node": ">=0.8.19" } }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -1747,38 +3707,37 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -1787,61 +3746,50 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "is-extglob": "^2.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -1849,113 +3797,96 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "optional": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "engines": { + "node": ">=8" + } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-bigints": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "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/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1963,11 +3894,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -1975,13 +3909,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -1990,421 +3924,678 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "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/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">= 4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/jest": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", + "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, + "dependencies": { + "@jest/core": "^29.6.2", + "@jest/types": "^29.6.1", + "import-local": "^3.0.2", + "jest-cli": "^29.6.2" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/jest-circus": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", + "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.2", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.2", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/jest-config": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", + "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.2", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.2", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.2", + "jest-environment-node": "^29.6.2", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "node_modules/jest-diff": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/jest-each": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", + "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.2", + "pretty-format": "^29.6.2" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", + "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "node_modules/jest-haste-map": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", + "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@jest/types": "^29.6.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + }, + "node_modules/jest-leak-detector": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", + "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/jest-matcher-utils": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", + "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.2", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-message-util": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", + "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-mock": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", + "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-util": "^29.6.2" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "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==", + "node_modules/jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/jest-resolve": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", + "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", + "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-runner": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", + "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, + "dependencies": { + "@jest/console": "^29.6.2", + "@jest/environment": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-leak-detector": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-resolve": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-util": "^29.6.2", + "jest-watcher": "^29.6.2", + "jest-worker": "^29.6.2", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", + "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/globals": "^29.6.2", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jest-snapshot": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", + "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.2", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.2", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.2", + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/jest-util": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", + "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jest-validate": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", + "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jest-watcher": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", + "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.2", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "node_modules/jest-worker": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "@types/node": "*", + "jest-util": "^29.6.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "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/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2423,6 +4614,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -2487,6 +4690,15 @@ "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/known-css-properties": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", @@ -2519,6 +4731,15 @@ "source-map": "~0.6.0" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2547,6 +4768,18 @@ "uc.micro": "^1.0.1" } }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2595,6 +4828,15 @@ "semver": "bin/semver" } }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -2705,6 +4947,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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", @@ -2740,6 +4988,15 @@ "node": ">=4" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -2842,6 +5099,18 @@ "ms": "^2.1.1" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -2866,6 +5135,18 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -2954,24 +5235,90 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { - "wrappy": "1" + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" } }, "node_modules/parent-module": { @@ -3013,6 +5360,15 @@ "node": ">= 0.10" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3074,6 +5430,27 @@ "node": ">=6" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postcss": { "version": "8.4.27", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", @@ -3152,6 +5529,45 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -3168,6 +5584,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3200,6 +5632,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -3266,21 +5704,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -3296,15 +5719,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", @@ -3362,6 +5776,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -3388,6 +5811,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/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": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3397,6 +5841,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3553,6 +6006,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3584,7 +6043,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true, "engines": { "node": ">=0.10.0" } @@ -3598,6 +6056,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -3630,6 +6098,46 @@ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3710,6 +6218,15 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", @@ -3971,12 +6488,41 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "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", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4031,6 +6577,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -4129,6 +6684,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "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", @@ -4144,6 +6729,26 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -4154,6 +6759,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4204,6 +6818,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4223,12 +6854,39 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -4238,6 +6896,15 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 5c905010..b0ca9d65 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "validate:json": "find . -type f -name '*.json' ! -path './node_modules/*' -exec jsonlint {} --insert-final-newline --in-place ';'", "validate:md": "markdownlint *.md", "fix:js": "eslint --fix **/*.js", + "test": "npm run test:js", + "test:js": "jest *.test.js", "snyk-protect": "snyk-protect", "prepublish": "npm run snyk-protect" }, @@ -32,6 +34,7 @@ "eslint-plugin-import": "^2.25.4", "eslint-plugin-n": "^16.0.1", "eslint-plugin-promise": "^6.0.0", + "jest": "^29.6.2", "jsonlint-newline-fork": "^1.6.8", "less": "^4.1.2", "markdownlint": "^0.30.0",