diff --git a/CHANGELOG.md b/CHANGELOG.md index f5d2a96..fb632e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog for apl-viewhost-web +## [2024.3] +This release adds support for version 2024.3 of the APL specification. Please also see APL Core Library for changes: [apl-core-library CHANGELOG](https://github.com/alexa/apl-core-library/blob/master/CHANGELOG.md) + +## Added +- Add support for text selection +- Add support for accessibility labels +- Add support for bulleted lists +- Add support for performance metrics +- Add support for pause and resume + +## Changed +- Update webpack to 5 and typescript to 4 +- Bug fixes + ## [2024.2] This release adds support for version 2024.2 of the APL specification. Please also see APL Core Library for changes: [apl-core-library CHANGELOG](https://github.com/alexa/apl-core-library/blob/master/CHANGELOG.md) @@ -7,7 +21,7 @@ This release adds support for version 2024.2 of the APL specification. Please al - New interface APLViewhostWASM and DocumentHandle - Add support for Host Component - Add IEmbeddedDocumentFactory to fetch embedded document from runtime - + ### Changed - Migrate to new core text measurement method - Migrate to core PackageManager interface to support ImportPackage command diff --git a/CMakeLists.txt b/CMakeLists.txt index d80be9a..a9e8fd7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,14 @@ cmake_minimum_required(VERSION 3.6) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) -project (apl-wasm VERSION 1.0.0 LANGUAGES C CXX) + +project(apl-wasm VERSION 1.0.0 LANGUAGES C CXX) option(APL_CORE_PATH "Path to APLCoreEngine" OFF) # Web Assembly option(WASM "Build WebAssembly binary" OFF) +option(BUNDLE_MODE "Bundle the WebAssembly binary to the js" ON) option(ASMJS "Build ASM.js" OFF) option(WEBSOCKET "Build Websocket Server" OFF) option(EMSCRIPTEN_SOURCEMAPS "Builds source maps." OFF) @@ -16,6 +18,9 @@ if(WASM) # make sure we enable exception support when building APL core, since PEGTL # relies on it set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") + if(BUNDLE_MODE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s SINGLE_FILE=1") + endif() endif() if(${APL_CORE_PATH} STREQUAL "OFF") @@ -39,9 +44,4 @@ include_directories(${PEGTL_INCLUDE}) include_directories(${RAPIDJSON_INCLUDE}) include_directories(${YOGA_INCLUDE}) -# build either the wasm or websocket backend -if(WASM OR ASMJS) - add_subdirectory(wasm) -elseif(WEBSOCKET) - add_subdirectory(websocket) -endif() +add_subdirectory(wasm) diff --git a/README.md b/README.md index 44665ba..14d80d5 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # Alexa Presentation Language (APL) Viewhost Web

- - - - + + + +

## Introduction diff --git a/THIRD-PARTY.txt b/THIRD-PARTY.txt index 33b1afe..e769728 100644 --- a/THIRD-PARTY.txt +++ b/THIRD-PARTY.txt @@ -139,7 +139,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---------------- Package: jquery Version: 3.5.1 @@ -300,7 +299,7 @@ SOFTWARE. ---------------- Package: path-browserify -Version: 0.0.1 +Version: 1.0.1 Description: the path module from node core for browsers License: MIT Copyright (c) 2013 James Halliday @@ -581,9 +580,65 @@ License: Apache-2.0 See the License for the specific language governing permissions and limitations under the License. +---------------- +Package: ts-loader +Version: 9.3.1 +Description: +License: MIT + +The MIT License (MIT) + +Copyright (c) 2015-present TypeStrong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +---------------- +Package: ts-node +Version: 10.7.0 +Description: +License: MIT + +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + ---------------- Package: typescript -Version: 2.7.2 +Version: 4.9.5 Description: TypeScript is a language for application scale JavaScript development License: Apache-2.0 Apache License @@ -878,7 +933,7 @@ License: Apache-2.0 ---------------- Package: webpack -Version: 4.43.0 +Version: 5.75.0 Description: Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff. License: MIT Copyright JS Foundation and other contributors @@ -902,6 +957,60 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------- +Package: webpack-bundle-analyzer +Version: 4.10.2 +Description: +License: MIT + +Copyright JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- +Package: webpack-merge +Version: 5.10.0 +Description: +License: MIT + +Copyright (c) 2015 Juho Vepsalainen + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ---------------- Package: xregexp Version: 4.2.4 @@ -928,3 +1037,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/js/apl-html/lib/dts/Component.d.ts b/js/apl-html/lib/dts/Component.d.ts index 84ed8cf..d89592f 100644 --- a/js/apl-html/lib/dts/Component.d.ts +++ b/js/apl-html/lib/dts/Component.d.ts @@ -12,12 +12,12 @@ public getUniqueId() : string; public getId() : string; public getParent() : Component; + public isFocusable() : boolean; public update(type : number, value : number) : void; public updateEditText(type : number, value : string) : void; public pressed() : void; public updateScrollPosition(position : number); public updatePagerPosition(position : number); - public updateMediaState(state : APL.IMediaState, fromEvent : boolean); public updateGraphic(json : string); public getChildCount() : number; public getChildAt(index : number) : Component; diff --git a/js/apl-html/lib/dts/Content.d.ts b/js/apl-html/lib/dts/Content.d.ts index ad9930a..418d1fe 100644 --- a/js/apl-html/lib/dts/Content.d.ts +++ b/js/apl-html/lib/dts/Content.d.ts @@ -7,6 +7,7 @@ declare namespace APL { export class ImportRef { public version(): string; public name(): string; + public domain(): string; public toString(): string; } diff --git a/js/apl-html/lib/dts/Context.d.ts b/js/apl-html/lib/dts/Context.d.ts index 1164b3f..ac1cee8 100644 --- a/js/apl-html/lib/dts/Context.d.ts +++ b/js/apl-html/lib/dts/Context.d.ts @@ -50,6 +50,8 @@ declare namespace APL { public setBackground(background: APL.IBackground): void; + public getDocumentState(): Promise; + public getDataSourceContext(): Promise; public getVisualContext(): Promise; @@ -89,7 +91,7 @@ declare namespace APL { public nextTime(): number; - public getViewportPixelSize(): object[]; + public getViewportPixelSize(): object; public getViewportWidth(): number; diff --git a/js/apl-html/package.json b/js/apl-html/package.json index 67f1dea..7a31805 100644 --- a/js/apl-html/package.json +++ b/js/apl-html/package.json @@ -37,20 +37,23 @@ "mp3-parser": "^0.3.0", "rimraf": "^2.6.2", "style-loader": "^0.23.1", - "ts-loader": "^5.3.0", - "ts-node": "^8.0.2", + "ts-loader": "^9.3.1", + "ts-node": "^10.7.0", "tslint": "^5.12.1", "tslint-loader": "^3.5.4", "typedoc": "^0.15.0", - "typescript": "2.7.2", + "typescript": "4.9.5", "uglifyjs-webpack-plugin": "^2.1.2", "utf8": "3.0.0", "uuid": "^3.3.2", "webfontloader": "^1.6.28", - "webpack": "^4.26.1", - "webpack-bundle-analyzer": "^4.6.1", - "webpack-cli": "^3.3.12", - "webpack-merge": "^4.2.1", + "webpack": "5.75.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.10.0", "xregexp": "4.2.4" + }, + "dependencies": { + "path-browserify": "^1.0.1" } } diff --git a/js/apl-html/src/APLRenderer.ts b/js/apl-html/src/APLRenderer.ts index d018ba7..662deed 100644 --- a/js/apl-html/src/APLRenderer.ts +++ b/js/apl-html/src/APLRenderer.ts @@ -23,9 +23,12 @@ import { IExtensionManager } from './extensions/IExtensionManager'; import { ILogger } from './logging/ILogger'; import { LoggerFactory } from './logging/LoggerFactory'; import { AudioPlayerFactory, IAudioPlayerFactory } from './media/audio/AudioPlayerFactory'; +import { FluidityIncidentReporter, FrameStat } from './telemetry/FluidityIncidentReporter'; +import { MetricsRecorder, Segment } from './telemetry/MetricsRecorder'; +import { Timer } from './telemetry/Timer'; import { createAplVersionUtils } from './utils/AplVersionUtils'; import { browserIsEdge } from './utils/BrowserUtils'; -import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER_KEY, HttpStatusCodes } from './utils/Constant'; +import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER_KEY, HttpStatusCodes, TAB_KEY } from './utils/Constant'; import { isDisplayState } from './utils/DisplayStateUtils'; import { getCssGradient, getCssPureColorGradient } from './utils/ImageUtils'; import { fetchMediaResource } from './utils/MediaRequestUtils'; @@ -214,6 +217,14 @@ export interface IAsyncKeyboardEvent extends KeyboardEvent { asyncChecked: boolean; } +/** Provide a fully populated IFluidityIncidentReporterOptions for incident reporting */ +export interface IFluidityIncidentReporterOptions { + windowSize: number; + thresholdUps: number; + displayRefreshTimeMs: number; + minimumDurationMs: number; +} + /** * Options when creating a new APLRenderer */ @@ -288,6 +299,22 @@ export interface IAPLOptions { /** Offset of the local time zone from UTC in milliseconds */ localTimeAdjustment: number; + + /** Disallow moving focus out of APL view by keyboard navigation */ + focusTrap?: boolean; + + /** + * Allow transparent VH background + * NOTE: Supplying enableTransparentBackground may cause gradients with alpha + * channels to behave unexpectedly. Only enable if necessary for your use case. + */ + enableTransparentBackground?: boolean; + /** Allow selection of text */ + enableTextSelection?: boolean; + /** Metrics recorder */ + metricsRecorder?: MetricsRecorder; + /** Provide a fully populated IFluidityIncidentReporterOptions for incident reporting */ + fluidityIncidentReporterOptions?: IFluidityIncidentReporterOptions; } /** @@ -307,16 +334,16 @@ export default abstract class APLRenderer { * @internal * @ignore */ - public componentMap: { [key: string]: Component } = {}; + public componentMap: { [key: string]: Component } = {}; /** * Map of user assigned IDs to component instance * @internal * @ignore */ - public componentIdMap: { [id: string]: Component } = {}; + public componentIdMap: { [id: string]: Component } = {}; - public componentByMappingKey: Map = new Map(); + public componentByMappingKey: Map> = new Map>(); /** * @internal @@ -371,13 +398,25 @@ export default abstract class APLRenderer { * @internal * @ignore */ - private view: HTMLElement | undefined; + protected view: HTMLElement | undefined; + + /** + * @internal + * @ignore + */ + private paused: boolean = false; /** * @internal * @ignore */ - private startTime: number = Number.NaN; + private previousElapsedTime: number = 0; + + /** + * @internal + * @ignore + */ + private renderingStartTime: number = Number.NaN; /** * @internal @@ -445,6 +484,12 @@ export default abstract class APLRenderer { */ private lastKnownViewHeight: number = 0; + /** + * @internal + * @ignore + */ + private isFirstTickAfterRender: boolean; + /** * @internal * @ignore @@ -455,6 +500,13 @@ export default abstract class APLRenderer { return this.mOptions as any as Options; } + private focusTrap: boolean = false; + + protected metricsRecorder?: MetricsRecorder; + private lastTextMeasurement?: Timer; + private lastLayoutViews?: Timer; + protected fluidityIncidentReporter: FluidityIncidentReporter; + /** * THis constructor is private * @param mOptions options passed in through `create` @@ -532,13 +584,48 @@ export default abstract class APLRenderer { this.onViewportSizeUpdate = mOptions.onViewportSizeUpdate; } + if (mOptions.metricsRecorder) { + this.metricsRecorder = mOptions.metricsRecorder; + + if (this.areFluidityIncidentReporterOptionsPresent(mOptions.fluidityIncidentReporterOptions)) { + this.fluidityIncidentReporter = new FluidityIncidentReporter( + mOptions.fluidityIncidentReporterOptions.windowSize, + mOptions.fluidityIncidentReporterOptions.thresholdUps, + mOptions.fluidityIncidentReporterOptions.displayRefreshTimeMs, + mOptions.fluidityIncidentReporterOptions.minimumDurationMs, + this.metricsRecorder, + this.reportFluidityEvent + ); + } + } + + if (mOptions.focusTrap) { + this.focusTrap = mOptions.focusTrap; + } + this.maxTimeDeltaBetweenFrames = (1000 * this.TOLERANCE / this.MAXFPS); } + private areFluidityIncidentReporterOptionsPresent(options?: IFluidityIncidentReporterOptions) { + if (options) { + if (options.windowSize && + options.thresholdUps && + options.displayRefreshTimeMs && + options.minimumDurationMs) { + return true; + } + } + return false; + } + public isBound(): boolean { return !!this.view; } + public getView(): HTMLElement | undefined { + return this.view; + } + public bindToView(view: HTMLElement) { if (this.view) { this.logger.warn('Already binded to a view, ignored'); @@ -552,7 +639,6 @@ export default abstract class APLRenderer { } this.view.style.display = 'flex'; this.view.style.overflow = 'hidden'; - this.view.tabIndex = 0; this.lastKnownViewWidth = this.mOptions.viewport.width; this.lastKnownViewHeight = this.mOptions.viewport.height; @@ -589,8 +675,6 @@ export default abstract class APLRenderer { } this.view = undefined; } - window.removeEventListener('keydown', this.passKeyDownToCore); - window.removeEventListener('keyup', this.passKeyUpToCore); } public init(metricRecorder?: (m: APL.DisplayMetric) => void) { @@ -598,18 +682,16 @@ export default abstract class APLRenderer { this.logger.error('not binded to a view'); return; } - const startTime = performance.now(); - if (this.mOptions.mode === 'TV') { - window.addEventListener('keydown', this.passKeyDownToCore); - window.addEventListener('keyup', this.passKeyUpToCore); - } + const renderingStartTime = performance.now(); + this.reportMetricStart('LayoutViews'); + this.isFirstTickAfterRender = true; this.renderComponents(); const stopTime = performance.now(); if (typeof metricRecorder === 'function') { metricRecorder({ kind: 'timer', name: 'APL-Web.RootContext.inflate', - value: stopTime - startTime + value: stopTime - renderingStartTime }); } @@ -694,7 +776,7 @@ export default abstract class APLRenderer { // Setting backgroundColor to black to ensure the correct behaviour // of a gradient containing an alpha channel component - this.view!.style.backgroundColor = 'black'; + this.view!.style.backgroundColor = this.mOptions.enableTransparentBackground ? 'transparent' : 'black'; const background = this.context.getBackground(); // Spec: If the background property is partially transparent @@ -842,6 +924,7 @@ export default abstract class APLRenderer { */ public onMeasure(component: APL.Component, measureWidth: number, widthMode: MeasureMode, measureHeight: number, heightMode: MeasureMode) { + this.reportMetricStart('TextMeasurement'); if (this.mOptions.viewport.maxWidth) { measureWidth = Math.min(measureWidth, this.mOptions.viewport.maxWidth); } @@ -850,7 +933,9 @@ export default abstract class APLRenderer { } const comp = new TextMeasurement(component, measureWidth, measureHeight); comp.init(); - return comp.onMeasure(measureWidth, widthMode, measureHeight, heightMode); + const onMeasureResult = comp.onMeasure(measureWidth, widthMode, measureHeight, heightMode); + this.reportMetricEnd('TextMeasurement'); + return onMeasureResult; } /** @@ -886,8 +971,12 @@ export default abstract class APLRenderer { } this.view = undefined; } - window.removeEventListener('keydown', this.passKeyDownToCore); - window.removeEventListener('keyup', this.passKeyUpToCore); + if (this.metricsRecorder) { + this.metricsRecorder.dumpCounters(); + if (this.fluidityIncidentReporter) { + this.fluidityIncidentReporter.emitFluidityMetrics(); + } + } } /** @@ -918,10 +1007,12 @@ export default abstract class APLRenderer { */ public async stopUpdate(): Promise { if (!this.requestId) { - this.logger.warn('already stopped'); + return; } window.cancelAnimationFrame(this.requestId); this.requestId = undefined; + this.stopTime(); + this.paused = true; return Promise.resolve(); } @@ -929,13 +1020,32 @@ export default abstract class APLRenderer { * Resume Animation Frame */ public async resumeUpdate(): Promise { - if (this.requestId) { - this.logger.warn('already running'); + if (this.requestId && !this.paused) { + return; } + this.paused = false; + this.startTime(); this.requestId = requestAnimationFrame(this.update); return Promise.resolve(); } + private startTime() { + if (this.paused) { return; } + this.renderingStartTime = Date.now(); + } + + private stopTime() { + if (this.paused) { return; } + if (!isNaN(this.renderingStartTime)) { + this.previousElapsedTime += Date.now() - this.renderingStartTime; + this.renderingStartTime = Number.NaN; + } + } + + private elapsed() { + return this.paused ? this.previousElapsedTime : Date.now() - this.renderingStartTime + this.previousElapsedTime; + } + /** * Return a map of components where the key matches the non-unique part of mappingKey * (when mappings are created a unique identifier is appended to ensure maps are unique) @@ -1053,11 +1163,11 @@ export default abstract class APLRenderer { */ private updateTime(): void { const now = Date.now(); - if (isNaN(this.startTime)) { - this.startTime = now; + if (isNaN(this.renderingStartTime) && !this.paused) { + this.renderingStartTime = now; } // move clock forward - this.context.updateTime(now - this.startTime, now); + this.context.updateTime(this.elapsed(), now); // Check once per second for a DST change or any other time-zone change if (now > this.lastDSTCheck + 1000) { @@ -1089,6 +1199,7 @@ export default abstract class APLRenderer { * @ignore */ private coreFrameUpdate(): void { + const begin = Date.now(); if (this.getAudioPlayerFactory()) { this.getAudioPlayerFactory().tick(); } @@ -1120,6 +1231,24 @@ export default abstract class APLRenderer { } this.setScreenLock(this.context.screenLock()); } + + const end = Date.now(); + if (this.metricsRecorder && this.fluidityIncidentReporter) { + setTimeout(() => { + this.fluidityIncidentReporter.addFrameStat(new FrameStat(begin, end)); + }); + } + + if (this.isFirstTickAfterRender) { + this.reportMetricEnd('LayoutViews'); + this.isFirstTickAfterRender = false; + } + } + + private reportFluidityEvent = (incidentId: number, frameStats: FrameStat[], upsValues: number[]) => { + // TODO: Call into DevTools FrameMetrics here + this.logger.info(`Reporting FluidityIncident: ${incidentId}, ${frameStats.map((value) => [value.begin, value.end])}, ` + + `${upsValues} ${this.context.getDocumentState()}`); } /** @@ -1280,20 +1409,12 @@ export default abstract class APLRenderer { } } - private canPassLocalKeyDown = (event: IAsyncKeyboardEvent) => { - return this.mOptions.mode !== 'TV' || !this.isDPadKey(event.code); - } - private handleKeyDown = async (evt: IAsyncKeyboardEvent) => { - if (this.canPassLocalKeyDown(evt)) { - await this.passKeyboardEventToCore(evt, KeyHandlerType.KeyDown); - } + await this.passKeyboardEventToCore(evt, KeyHandlerType.KeyDown); } private handleKeyUp = async (evt: IAsyncKeyboardEvent) => { - if (this.canPassLocalKeyDown(evt)) { - await this.passKeyboardEventToCore(evt, KeyHandlerType.KeyUp); - } + await this.passKeyboardEventToCore(evt, KeyHandlerType.KeyUp); } /** @@ -1324,15 +1445,49 @@ export default abstract class APLRenderer { return evt.code; } - private passKeyboardEventToCore = async (evt: IAsyncKeyboardEvent, keyHandlerType: number) => { - if (this.context) { - const keyboard: APL.Keyboard = this.getKeyboard(evt); - await this.context.handleKeyboard(keyHandlerType, keyboard); + private shouldPassKeyboardEventToCore(event: IAsyncKeyboardEvent, focusedComponentId: string): boolean { + if (!focusedComponentId) { + return false; + } + + const isViewAlreadyFocused = () => { + return this.view!.contains(document.activeElement); + }; + + const isFocusLost = () => { + return !this.view!.contains(document.activeElement) + && !(document.activeElement instanceof HTMLTextAreaElement); + }; + + return this.isDPadKey(event.code) || isFocusLost() || isViewAlreadyFocused(); + } + + private async passKeyboardEventToCore(event: IAsyncKeyboardEvent, handlerType: KeyHandlerType): Promise { + if (!this.context) { + return; + } + + const focusedComponentId = await this.context.getFocused(); + + if (this.shouldPassKeyboardEventToCore(event, focusedComponentId)) { + this.ensureComponentIsFocused(focusedComponentId, event.code); + const keyboard: APL.Keyboard = this.getKeyboard(event); + const consumed = await this.context.handleKeyboard(handlerType, keyboard); + if (consumed) { + event.preventDefault(); + } + } else if (!focusedComponentId) { + this.focusTopLeft(); } } private isDPadKey = (key: string): boolean => { - return key === ENTER_KEY || key === ARROW_LEFT || key === ARROW_UP || key === ARROW_RIGHT || key === ARROW_DOWN; + return key === ENTER_KEY || key === ARROW_LEFT || key === ARROW_UP + || key === ARROW_RIGHT || key === ARROW_DOWN || key === TAB_KEY; + } + + public focusTrapped(): boolean { + return this.focusTrap; } private renderComponents(): void { @@ -1383,50 +1538,10 @@ export default abstract class APLRenderer { } } - private passKeyDownToCore = (event: IAsyncKeyboardEvent) => { - this.passWindowEventsToCore(event, KeyHandlerType.KeyDown); - } - - private passKeyUpToCore = (event: IAsyncKeyboardEvent) => { - this.passWindowEventsToCore(event, KeyHandlerType.KeyUp); - } - - private passWindowEventsToCore = async (event: IAsyncKeyboardEvent, handler: KeyHandlerType) => { - if (!this.context) { - return; - } - - const focusedComponentId = await this.context.getFocused(); - - if (this.shouldPassWindowEventToCore(event, focusedComponentId)) { - this.ensureComponentIsFocused(focusedComponentId, event.code); - this.passKeyboardEventToCore(event, handler); - } else if (!focusedComponentId) { - this.focusTopLeft(); - } - } - - private shouldPassWindowEventToCore(event: IAsyncKeyboardEvent, focusedComponentId: string) { - const isViewAlreadyFocused = () => { - return this.view!.contains(document.activeElement); - }; - - const isFocusLost = () => { - return !this.view!.contains(document.activeElement) - && !(document.activeElement instanceof HTMLTextAreaElement); - }; - - return this.isDPadKey(event.code) - && focusedComponentId - && (isFocusLost() || isViewAlreadyFocused()); - } - private ensureComponentIsFocused(id: string, code: string): void { - if (code === ENTER_KEY) { - const component = this.componentMap[id] as ActionableComponent; - if (component['focus']) { - component.focus(); - } + const component = this.componentMap[id] as ActionableComponent; + if (component && component['focus']) { + component.focus(); } } @@ -1445,4 +1560,66 @@ export default abstract class APLRenderer { this.onViewportSizeUpdate(this.lastKnownViewWidth, this.lastKnownViewHeight); } } + + /** + * @internal + * @ignore + */ + protected reportMetricStart(name: string): void { + if (!this.metricsRecorder) { + // Do nothing if we aren't reporting metrics + return; + } + + switch (name) { + case 'TextMeasurement': + if (this.lastTextMeasurement) { + this.logger.warn('Overwriting a kMeasureText segment that was not stopped'); + } + this.lastTextMeasurement = + this.metricsRecorder?.startTimer(Segment.kMeasureText, new Map()); + break; + case 'LayoutViews': + if (this.lastLayoutViews) { + this.logger.warn('Overwriting a kLayoutViews segment that was not stopped'); + } + this.lastLayoutViews = + this.metricsRecorder?.startTimer(Segment.kLayoutViews, new Map()); + break; + default: + this.logger.warn('Unknown starting metrics type from APLRenderer'); + } + } + + /** + * @internal + * @ignore + */ + protected reportMetricEnd(name: string): void { + if (!this.metricsRecorder) { + // Do nothing if we aren't reporting metrics + return; + } + + switch (name) { + case 'TextMeasurement': + if (this.lastTextMeasurement) { + this.lastTextMeasurement.stop(); + this.lastTextMeasurement = undefined; + } else { + this.logger.warn('Attempting to stop a kMeasureText segment that was not started'); + } + break; + case 'LayoutViews': + if (this.lastLayoutViews) { + this.lastLayoutViews.stop(); + this.lastLayoutViews = undefined; + } else { + this.logger.warn('Attempting to stop a kLayoutViews segment that was not started'); + } + break; + default: + this.logger.warn('Unknown ending metrics type from APLRenderer'); + } + } } diff --git a/js/apl-html/src/assets/css/fonts.css b/js/apl-html/src/assets/css/fonts.css index 296764b..4b8a7de 100644 --- a/js/apl-html/src/assets/css/fonts.css +++ b/js/apl-html/src/assets/css/fonts.css @@ -7,6 +7,7 @@ @font-face { font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmber_Rg_v2.ttf'); + font-display: optional; } /* Ember Thin */ @@ -14,6 +15,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-Thin.ttf'); font-weight: 100; + font-display: optional; } /* Ember Extra Light - remap to Light */ @@ -21,6 +23,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-Light.ttf'); font-weight: 200; + font-display: optional; } /* Ember Light */ @@ -28,6 +31,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-Light.ttf'); font-weight: 300; + font-display: optional; } /* Ember Normal (Regular) - v2 */ @@ -35,6 +39,7 @@ font-family: 'amazon-ember'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmber_Rg_v2.ttf'); font-weight: 400; + font-display: optional; } /* Ember Medium - v2 */ @@ -42,6 +47,7 @@ font-family: 'amazon-ember'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmber_Md_v2.ttf'); font-weight: 500; + font-display: optional; } /* Ember SemiBold */ @@ -49,6 +55,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-SemiBold.ttf'); font-weight: 600; + font-display: optional; } /* Ember Bold */ @@ -56,6 +63,7 @@ font-family: 'amazon-ember'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmber_Bd_v2.ttf'); font-weight: 700; + font-display: optional; } /* Ember Extra Bold - remap to Heavy */ @@ -63,6 +71,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-Heavy.ttf'); font-weight: 800; + font-display: optional; } /* Ember Heavy (Black) */ @@ -70,6 +79,7 @@ font-family: "amazon-ember"; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-Heavy.ttf'); font-weight: 900; + font-display: optional; } /* Ember Thin Italic */ @@ -78,6 +88,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-ThinItalic.ttf'); font-weight: 100; font-style: italic; + font-display: optional; } /* Ember Extra Light Italic - remap to Light Italic */ @@ -86,6 +97,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-LightItalic.ttf'); font-weight: 200; font-style: italic; + font-display: optional; } /* Ember Light Italic */ @@ -94,6 +106,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-LightItalic.ttf'); font-weight: 300; font-style: italic; + font-display: optional; } /* Ember Italic */ @@ -102,6 +115,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-RegularItalic.ttf'); font-weight: 400; font-style: italic; + font-display: optional; } /* Ember Medium Italic */ @@ -110,6 +124,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-MediumItalic.ttf'); font-weight: 500; font-style: italic; + font-display: optional; } /* Ember SemiBold Italic */ @@ -118,6 +133,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-SemiBoldItalic.ttf'); font-weight: 600; font-style: italic; + font-display: optional; } /* Ember Bold Italic */ @@ -126,6 +142,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-BoldItalic.ttf'); font-weight: 700; font-style: italic; + font-display: optional; } /* Ember Extra Bold Italic - remap to Heavy Italic */ @@ -134,6 +151,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-HeavyItalic.ttf'); font-weight: 800; font-style: italic; + font-display: optional; } /* Ember HeavyItalic */ @@ -142,12 +160,14 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Amazon-Ember-HeavyItalic.ttf'); font-weight: 900; font-style: italic; + font-display: optional; } /* Ember Display Default */ @font-face { font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Rg.ttf'); + font-display: optional; } /* Ember Display Thin - remap to Light */ @@ -155,6 +175,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt.ttf'); font-weight: 100; + font-display: optional; } /* Ember Display Extra Light - remap to Light */ @@ -162,6 +183,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt.ttf'); font-weight: 200; + font-display: optional; } /* Ember Display Light */ @@ -169,6 +191,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt.ttf'); font-weight: 300; + font-display: optional; } /* Ember Display Normal (Regular) */ @@ -176,6 +199,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Rg.ttf'); font-weight: 400; + font-display: optional; } /* Ember Display Medium */ @@ -183,6 +207,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Md.ttf'); font-weight: 500; + font-display: optional; } /* Ember Display SemiBold - remap to Bold */ @@ -190,6 +215,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Bd.ttf'); font-weight: 600; + font-display: optional; } /* Ember Display Bold */ @@ -197,6 +223,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Bd.ttf'); font-weight: 700; + font-display: optional; } /* Ember Display Extra Bold - remap to Heavy */ @@ -204,6 +231,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_He.ttf'); font-weight: 800; + font-display: optional; } /* Ember Display Heavy */ @@ -211,6 +239,7 @@ font-family: 'amazon-ember-display'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_He.ttf'); font-weight: 900; + font-display: optional; } /* Ember Display Thin Italic - remap to Light Italic */ @@ -219,6 +248,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt_It.ttf'); font-weight: 100; font-style: italic; + font-display: optional; } /* Ember Display Extra Light Italic - remap to Light Italic */ @@ -227,6 +257,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt_It.ttf'); font-weight: 200; font-style: italic; + font-display: optional; } /* Ember Display Light Italic */ @@ -235,6 +266,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Lt_It.ttf'); font-weight: 300; font-style: italic; + font-display: optional; } /* Ember Display Italic */ @@ -243,6 +275,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Rg_It.ttf'); font-weight: 400; font-style: italic; + font-display: optional; } /* Ember Display Medium Italic */ @@ -251,6 +284,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Md_It.ttf'); font-weight: 500; font-style: italic; + font-display: optional; } /* Ember Display SemiBold Italic - remap to Bold Italic */ @@ -259,6 +293,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Bd_It.ttf'); font-weight: 600; font-style: italic; + font-display: optional; } /* Ember Display Bold Italic */ @@ -267,6 +302,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_Bd_It.ttf'); font-weight: 700; font-style: italic; + font-display: optional; } /* Ember Display Extra Bold Italic - remap to Heavy Italic */ @@ -275,6 +311,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_He_It.ttf'); font-weight: 800; font-style: italic; + font-display: optional; } /* Ember Display HeavyItalic */ @@ -283,11 +320,13 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/AmazonEmberDisplay_He_It.ttf'); font-weight: 900; font-style: italic; + font-display: optional; } @font-face { font-family: 'Bookerly'; src: url('https://d1gkjrhppbyzyh.cloudfront.net/Bookerly-Regular.ttf'); + font-display: optional; } @font-face { @@ -295,6 +334,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Bookerly-Regular.ttf'); font-weight: 400; font-style: normal; + font-display: optional; } @font-face { @@ -302,6 +342,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Bookerly-Bold.ttf'); font-weight: 600; font-style: normal; + font-display: optional; } @font-face { @@ -309,6 +350,7 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Bookerly-Italic.ttf'); font-weight: 400; font-style: italic; + font-display: optional; } @font-face { @@ -316,4 +358,5 @@ src: url('https://d1gkjrhppbyzyh.cloudfront.net/Bookerly-BoldItalic.ttf'); font-weight: 600; font-style: italic; + font-display: optional; } diff --git a/js/apl-html/src/components/ActionableComponent.ts b/js/apl-html/src/components/ActionableComponent.ts index 5434d0c..cbf611e 100644 --- a/js/apl-html/src/components/ActionableComponent.ts +++ b/js/apl-html/src/components/ActionableComponent.ts @@ -9,14 +9,20 @@ import { Component, FactoryFunction, IGenericPropType } from './Component'; /** * @ignore */ -export class ActionableComponent extends Component { +export class ActionableComponent extends Component { constructor(renderer: APLRenderer, component: APL.Component, factory: FactoryFunction, parent?: Component) { super(renderer, component, factory, parent); - this.container.tabIndex = -1; + if (component.isFocusable()) { + this.container.tabIndex = 0; + this.focus = () => this.container.focus(); + } else { + this.container.tabIndex = -1; + } } public focus = () => { - this.container.focus(); + // } + protected blur = () => {}; } diff --git a/js/apl-html/src/components/Component.ts b/js/apl-html/src/components/Component.ts index 025e279..f6a72c4 100644 --- a/js/apl-html/src/components/Component.ts +++ b/js/apl-html/src/components/Component.ts @@ -13,12 +13,15 @@ import {GradientSpreadMethod} from '../enums/GradientSpreadMethod'; import {GradientUnits} from '../enums/GradientUnits'; import {LayoutDirection} from '../enums/LayoutDirection'; import {PropertyKey} from '../enums/PropertyKey'; +import {Role} from '../enums/Role'; +import {ScrollDirection} from '../enums/ScrollDirection'; import {UpdateType} from '../enums/UpdateType'; import {ILogger} from '../logging/ILogger'; import {LoggerFactory} from '../logging/LoggerFactory'; import {getRectDifference} from '../utils/AplRectUtils'; import {numberToColor} from '../utils/ColorUtils'; import {ChildAction} from '../utils/Constant'; +import {processNextTick} from '../utils/EventUtils'; import {getScaledTransform} from '../utils/TransformUtils'; import {fillAndStrokeConverter} from './avg/GraphicsUtils'; import {createBoundsFitter} from './helpers/BoundsFitter'; @@ -86,6 +89,7 @@ export interface IComponentProperties { [PropertyKey.kPropertyShadowVerticalOffset]: number; [PropertyKey.kPropertyShadowRadius]: number; [PropertyKey.kPropertyShadowColor]: number; + [PropertyKey.kPropertyScrollPosition]: number; } export interface IValueWithReference { @@ -97,12 +101,12 @@ export interface IValueWithReference { * @ignore */ export type FactoryFunction = (renderer: APLRenderer, component: APL.Component, - parent?: Component, ensureLayout?: boolean, - insertAt?: number) => Component; + parent?: Component, ensureLayout?: boolean, + insertAt?: number) => Component; export type Executor = () => void; -export abstract class Component extends EventEmitter { +export abstract class Component extends EventEmitter { /// Logger to be used for this component logs. protected logger: ILogger; @@ -114,7 +118,7 @@ export abstract class Component extends EventEmitt /** * Array of children components in this hierarchy */ - public children: Component[] = []; + public children: Array> = []; /** Map of every property */ public props: IGenericPropType = {}; @@ -159,7 +163,7 @@ export abstract class Component extends EventEmitt * @ignore */ constructor(public renderer: APLRenderer, public component: APL.Component, - protected factory: FactoryFunction, public parent?: Component) { + protected factory: FactoryFunction, public parent?: Component) { super(); this.logger = LoggerFactory.getLogger(COMPONENT_TYPE_MAP[component.getType()] || 'Component'); this.$container.css({ @@ -201,7 +205,24 @@ export abstract class Component extends EventEmitt PropertyKey.kPropertyShadowHorizontalOffset, PropertyKey.kPropertyShadowVerticalOffset, PropertyKey.kPropertyShadowRadius, - PropertyKey.kPropertyShadowColor); + PropertyKey.kPropertyShadowColor) + (this.setRole, PropertyKey.kPropertyRole, PropertyKey.kPropertyAccessibilityLabel) + (this.setScrollPos, PropertyKey.kPropertyScrollPosition); + } + + // Since we are getting dirty properies from core + // We will need to adjust our scroll position to match core's position + private setScrollPos = () => { + const scrollSide = (this.props[PropertyKey.kPropertyScrollDirection] + === ScrollDirection.kScrollDirectionHorizontal) ? 'scrollLeft' : 'scrollTop'; + + this.container[scrollSide] = this.props[PropertyKey.kPropertyScrollPosition]; + // Sometimes the scroll can only be applied through processNextTick. + if (this.container[scrollSide] !== this.props[PropertyKey.kPropertyScrollPosition]) { + processNextTick(() => { + this.container[scrollSide] = this.props[PropertyKey.kPropertyScrollPosition]; + }); + } } /** @@ -275,10 +296,19 @@ export abstract class Component extends EventEmitt * @ignore */ public setProperties(props: PropsType) { - + let needUpdate = false; + const oldProps = this.props; Object.keys(props).forEach((keyString) => { const key = parseInt(keyString, 10) as PropertyKey; - this.props[key] = props[key]; + if (key in oldProps) { + if (oldProps[key] !== props[key]) { + this.props[key] = props[key]; + needUpdate = true; + } + } else { + this.props[key] = props[key]; + needUpdate = true; + } }); Object.keys(props).forEach((keyString) => { const key = parseInt(keyString, 10) as PropertyKey; @@ -289,7 +319,9 @@ export abstract class Component extends EventEmitt } } }); - this.onPropertiesUpdated(); + if (needUpdate) { + this.onPropertiesUpdated(); + } } /** @@ -803,4 +835,103 @@ export abstract class Component extends EventEmitt protected enableClipping() { this.$container.css('overflow', 'hidden'); } + + protected setRole = () => { + const role = this.props[PropertyKey.kPropertyRole] as Role; + const label = this.props[PropertyKey.kPropertyAccessibilityLabel] as string; + if (label) { + this.$container.attr('aria-label', label); + } + + switch (role) { + case Role.kRoleAdjustable: + this.$container.attr('role', 'adjustable'); + break; + case Role.kRoleAlert: + this.$container.attr('role', 'alert'); + break; + case Role.kRoleButton: + this.$container.attr('role', 'button'); + break; + case Role.kRoleCheckBox: + this.$container.attr('role', 'checkbox'); + break; + case Role.kRoleComboBox: + this.$container.attr('role', 'combobox'); + break; + case Role.kRoleHeader: + this.$container.attr('role', 'heading'); + break; + case Role.kRoleImage: + this.$container.attr('role', 'img'); + break; + case Role.kRoleImageButton: + this.$container.attr('role', 'button'); + break; + case Role.kRoleKeyboardKey: + this.$container.attr('role', 'button'); + break; + case Role.kRoleLink: + this.$container.attr('role', 'link'); + break; + case Role.kRoleList: + this.$container.attr('role', 'list'); + break; + case Role.kRoleListItem: + this.$container.attr('role', 'listitem'); + break; + case Role.kRoleMenu: + this.$container.attr('role', 'menu'); + break; + case Role.kRoleMenuBar: + this.$container.attr('role', 'menubar'); + break; + case Role.kRoleMenuItem: + this.$container.attr('role', 'menuitem'); + break; + case Role.kRoleProgressBar: + this.$container.attr('role', 'progressbar'); + break; + case Role.kRoleRadio: + this.$container.attr('role', 'radio'); + break; + case Role.kRoleRadioGroup: + this.$container.attr('role', 'radiogroup'); + break; + case Role.kRoleScrollBar: + this.$container.attr('role', 'scrollbar'); + break; + case Role.kRoleSearch: + this.$container.attr('role', 'search'); + break; + case Role.kRoleSpinButton: + this.$container.attr('role', 'spinbutton'); + break; + case Role.kRoleSummary: + this.$container.attr('role', 'summary'); + break; + case Role.kRoleSwitch: + this.$container.attr('role', 'switch'); + break; + case Role.kRoleTab: + this.$container.attr('role', 'tab'); + break; + case Role.kRoleTabList: + this.$container.attr('role', 'tablist'); + break; + case Role.kRoleText: + this.$container.attr('role', 'text'); + break; + case Role.kRoleTimer: + this.$container.attr('role', 'timer'); + break; + case Role.kRoleToolBar: + this.$container.attr('role', 'toolbar'); + break; + case Role.kRoleNone: + default: + break; + } + + } } diff --git a/js/apl-html/src/components/Image.ts b/js/apl-html/src/components/Image.ts index 3391dc5..e87bb1a 100644 --- a/js/apl-html/src/components/Image.ts +++ b/js/apl-html/src/components/Image.ts @@ -80,7 +80,8 @@ export class Image extends Component { 'left': '0px' }; private svgImageElementProperties = { - position: 'relative' + position: 'relative', + display: 'block' }; constructor(renderer: APLRenderer, component: APL.Component, factory: FactoryFunction, parent?: Component) { @@ -247,6 +248,11 @@ export class Image extends Component { // Update Image this.imageSVGElement.setAttribute('href', scaledActualURL); + const label = this.props[PropertyKey.kPropertyAccessibilityLabel] as string; + if (label) { + this.imageSVGElement.setAttribute('alt', label); + } + // Sizing createStylesApplier({ element: this.svgElement, diff --git a/js/apl-html/src/components/ScrollView.ts b/js/apl-html/src/components/ScrollView.ts index dbe9874..aa7ea8b 100644 --- a/js/apl-html/src/components/ScrollView.ts +++ b/js/apl-html/src/components/ScrollView.ts @@ -5,21 +5,13 @@ import * as $ from 'jquery'; import APLRenderer from '../APLRenderer'; -import { PropertyKey } from '../enums/PropertyKey'; import { Component, FactoryFunction, IComponentProperties } from './Component'; import { Scrollable } from './Scrollable'; /** * @ignore */ -export interface IScrollViewProperties extends IComponentProperties { - [PropertyKey.kPropertyScrollPosition]: number; -} - -/** - * @ignore - */ -export class ScrollView extends Scrollable { +export class ScrollView extends Scrollable { constructor(renderer: APLRenderer, component: APL.Component, factory: FactoryFunction, parent?: Component) { super(renderer, component, factory, parent); @@ -53,21 +45,6 @@ export class ScrollView extends Scrollable { return top; } - public async setProperties(props: IScrollViewProperties) { - super.setProperties(props); - // Since we are getting dirty properies from core - // We will need to adjust our scroll position to match core's position - if (PropertyKey.kPropertyScrollPosition in props) { - this.container[this.scrollSide] = this.props[PropertyKey.kPropertyScrollPosition]; - // Sometimes the scroll does not get applied to Perfect Scroll and can be only applied through setTimeout() - if (this.container[this.scrollSide] !== this.props[PropertyKey.kPropertyScrollPosition]) { - setTimeout(() => { - this.container[this.scrollSide] = this.props[PropertyKey.kPropertyScrollPosition]; - }, 0); - } - } - } - public destroy() { $(this.container).off('scroll'); super.destroy(); diff --git a/js/apl-html/src/components/Scrollable.ts b/js/apl-html/src/components/Scrollable.ts index 9913034..2c82b74 100644 --- a/js/apl-html/src/components/Scrollable.ts +++ b/js/apl-html/src/components/Scrollable.ts @@ -24,7 +24,7 @@ export interface IScollOptions { /** * @ignore */ -export abstract class Scrollable +export abstract class Scrollable extends ActionableComponent { public static FOCUS_SCROLL_VELOCITY: number = 5.0; @@ -40,6 +40,7 @@ export abstract class Scrollable constructor(renderer: APLRenderer, component: APL.Component, factory: FactoryFunction, parent?: Component) { super(renderer, component, factory, parent); const onScroll = async (event: WheelEvent) => { + event.preventDefault(); const scrollPosition = this.getScrollPosition(); function getLargerAbsoluteValue(deltaX: number, deltaY: number) { if (Math.abs(deltaX) > Math.abs(deltaY)) { diff --git a/js/apl-html/src/components/TouchWrapper.ts b/js/apl-html/src/components/TouchWrapper.ts index c828e42..6bdc852 100644 --- a/js/apl-html/src/components/TouchWrapper.ts +++ b/js/apl-html/src/components/TouchWrapper.ts @@ -26,6 +26,18 @@ export class TouchWrapper extends ActionableComponent { // override or add more propExecutors this.propExecutor (this.updateUponChildrenChange, PropertyKey.kPropertyNotifyChildrenChanged); + + this.$container.css( + 'cursor', + !this.component.getCalculatedByKey(PropertyKey.kPropertyDisabled) && + ((this.component.getCalculated()[PropertyKey.kPropertyOnPress] + && this.component.getCalculated()[PropertyKey.kPropertyOnPress].length > 0) || + (this.component.getCalculated()[PropertyKey.kPropertyOnDown] + && this.component.getCalculated()[PropertyKey.kPropertyOnDown].length > 0) || + (this.component.getCalculated()[PropertyKey.kPropertyOnUp] + && this.component.getCalculated()[PropertyKey.kPropertyOnUp].length > 0)) + ? 'pointer' : 'default' + ); } protected isLayout(): boolean { diff --git a/js/apl-html/src/components/avg/VectorGraphic.ts b/js/apl-html/src/components/avg/VectorGraphic.ts index a3bc116..eb7fa94 100644 --- a/js/apl-html/src/components/avg/VectorGraphic.ts +++ b/js/apl-html/src/components/avg/VectorGraphic.ts @@ -96,6 +96,9 @@ export class VectorGraphic extends ActionableComponent const layoutDirection = root.getValue(GraphicPropertyKey.kGraphicPropertyLayoutDirection); this.svg.setAttributeNS('', 'viewBox', `0 0 ${vpw} ${vph}`); + this.svg.setAttributeNS('', 'width', `${vpw}`); + this.svg.setAttributeNS('', 'height', `${vph}`); + const innerBounds = this.getInnerBounds(); const scaleX = width / vpw; const scaleY = height / vph; diff --git a/js/apl-html/src/components/pager/PagerComponent.ts b/js/apl-html/src/components/pager/PagerComponent.ts index 30b94b7..dd206a9 100644 --- a/js/apl-html/src/components/pager/PagerComponent.ts +++ b/js/apl-html/src/components/pager/PagerComponent.ts @@ -34,7 +34,7 @@ export class PagerComponent extends ActionableComponent { * @returns {number} The currently displayed page */ public getCoreCurrentPage(): number { - const props = this.component.getCalculated() as IPagerProperties; + const props = this.component.getCalculated(); return props[PropertyKey.kPropertyCurrentPage]; } diff --git a/js/apl-html/src/components/text/DocumentBuilder.ts b/js/apl-html/src/components/text/DocumentBuilder.ts index 1ff5fdb..df62a25 100644 --- a/js/apl-html/src/components/text/DocumentBuilder.ts +++ b/js/apl-html/src/components/text/DocumentBuilder.ts @@ -15,9 +15,11 @@ export class DocumentBuilder { private static logger: ILogger = LoggerFactory.getLogger('DocumentBuilder'); private root: ISpannedTextNode; private markStyles: IRichTextStyles; + private listCount: number; constructor(markStyles: IRichTextStyles, end: number) { this.root = { type: 'root', start: 0, end, children: [] }; this.markStyles = markStyles; + this.listCount = 0; } public add(span: ISpannedTextNode) { this.addTo(this.root, span); @@ -28,7 +30,56 @@ export class DocumentBuilder { this.process(child, targetElement); } } + this.groupListItems(targetElement); } + + /** + * Group consecutive list items into common unordered lists + * @private + * @param {HTMLElement} rootElement the root node under which elements will be grouped. + */ + private groupListItems(rootElement: HTMLElement) { + const rangeList = [] as Range[]; + let listInProgress = false; + for (const child of rootElement.children) { + if (!this.elementContainsListItem(child)) { + listInProgress = false; + } else { + if (!listInProgress) { + const cleanupRange = document.createRange(); + cleanupRange.setStart(child, 0); + rangeList.push(cleanupRange); + listInProgress = true; + } + rangeList[rangeList.length - 1].setEndAfter(child); + } + } + if (rangeList.length === 0) { + return; + } + for (const cleanupRange of rangeList) { + const ulElement = document.createElement('ul'); + ulElement.style.marginLeft = '1em'; + ulElement.style.marginTop = '0px'; + ulElement.style.marginBottom = '0px'; + ulElement.style.paddingLeft = '0px'; + ulElement.style.paddingTop = '0px'; + ulElement.style.paddingBottom = '0px'; + ulElement.style.listStyleType = '\' \\2022\\0020\''; + + const extracted = cleanupRange.extractContents(); + ulElement.appendChild(extracted); + cleanupRange.insertNode(ulElement); + } + } + + private elementContainsListItem(element: Element) { + if (element.nodeName === 'LI') { + return true; + } + return element.getElementsByTagName('li').length > 0; + } + private addTo(to: ISpannedTextNode, what: ISpannedTextNode): boolean { let added = false; @@ -103,6 +154,10 @@ export class DocumentBuilder { case SpanType.kSpanTypeLineBreak: convertedElement = document.createElement('br'); break; + case SpanType.kSpanTypeListItem: + convertedElement = document.createElement('li'); + convertedElement.id = 'li_' + Date.now() + '_' + this.listCount++; + break; case SpanType.kSpanTypeSuperscript: convertedElement.style.fontSize = 'smaller'; convertedElement.style.verticalAlign = 'super'; diff --git a/js/apl-html/src/components/text/Geometry.ts b/js/apl-html/src/components/text/Geometry.ts index ef0a8f6..0e5db63 100644 --- a/js/apl-html/src/components/text/Geometry.ts +++ b/js/apl-html/src/components/text/Geometry.ts @@ -5,7 +5,7 @@ 'use strict'; -import { allTextNodes, textNodes } from './NodeTraverse'; +import { allNodes, allTextNodes } from './NodeTraverse'; /** * Specifies a range of text on a single line @@ -260,28 +260,47 @@ export class Geometry { const lines: Node[] = []; // tslint:disable-next-line - for (let i = 0; i < lineRanges.length; i++) { - // for any given lineRange.end, find the that node that encloses it - const lineRange = lineRanges[i]; - let node: Node = undefined; - const nodes = textNodes(this.element); // use generator + for (const lineRange of lineRanges) { + // for any given lineRange, find the nodes that encloses it + // https://javascript.info/selection-range + + let endNode: Node = undefined; + let startNode: Node = undefined; + const nodes = allNodes(this.element); // use generator + let nodeCounter = 0; + let nodeSelected = -1; + let wrap = false; for (const n of nodes) { - if (lineRange.end < (offset + n.textContent.length)) { - node = n; - break; + if (n.nodeType === Node.TEXT_NODE) { + if (nodeSelected >= 0) { + break; + } + if (lineRange.start >= offset && lineRange.start < (offset + n.textContent.length)) { + startNode = n; + } + if (lineRange.end >= offset && lineRange.end < (offset + n.textContent.length)) { + endNode = n; + nodeSelected = nodeCounter; + range.setEnd(endNode, lineRange.end + 1 - offset); + if (lineRange.end + 1 !== offset + n.textContent.length) { + wrap = true; + } + } + offset += n.textContent.length; + } else if (this.isLineBreakElement(n) && nodeCounter === nodeSelected + 1 && !wrap) { + endNode = n; + nodeSelected = nodeCounter; + range.setEndAfter(endNode); } - offset += n.textContent.length; + nodeCounter++; } - if (node === undefined) { + if (endNode === undefined) { return; } - range.setStart(this.element, 0); - range.setEnd(node, (lineRange.end + 1 - offset)); - /* extractContents removes content while making the remainder valid - i.e. inserts tags at head of reminder + i.e. inserts tags at head of remainder hello world ^ @@ -289,9 +308,88 @@ export class Geometry { extractContents() === "hello " remainder === "world" + + For something an element which has children, like a
  • element, + this will split the list item into multiple list items and incorrectly + add the parent element. This occur where children are broken across lines. +
  • hello world
  • + ^ + | cut off point + + extractContents() === "
  • hello
  • " + remainder === "
  • world
  • " + The code below detects when this occurs, and appends the split lines as + children of the appropriate element. + + 1. If the item is a list item, use the id to determine if it is a continuation + of an existing list item. + a. If so, append to the list so it does not create a new bullet. + b. If not, and there is an unordered list in progess, add to that list. + 2. If it is a new list item, or not a list item, just append as-is. The new list + item will start a new ordered list. */ - const content = range.extractContents(); - lines.push(content); + + // Is this text a list item? + const liAncestor = this.getAncestorWithName('LI', startNode); + let lastDocumentFragment = undefined; + if (lines.length > 0) { + lastDocumentFragment = lines[lines.length - 1]; + } + + // Was the last item added to the DOM a list item? + let lastListItems = undefined; + if (lastDocumentFragment) { + lastListItems = lastDocumentFragment.firstElementChild.getElementsByTagName('li'); + } + + // Check if the item was a list item, and if the IDs match. + // Cannot just use an `===` operator because the layout process changes the elements + // and would not recognize the same parent. + // This will occur if a list item wraps to a new line, or a list item contains multiple + // children. + let idsMatch = false; + if (liAncestor && lastListItems && lastListItems.length > 0) { + const lastElementTest = lastListItems[lastListItems.length - 1]; + if ((lastElementTest as Element).getAttribute('id') === (liAncestor as Element).getAttribute('id')) { + idsMatch = true; + } + } + + if (liAncestor && idsMatch) { + // startNode is just a textNode from the previous step. This is + // necessary so any styling on this text will be preserved. + while (startNode.parentElement.nodeName !== 'LI') { + startNode = startNode.parentElement; + } + range.setStartBefore(startNode); + const content = range.extractContents(); + const dataElement = document.createElement('data'); + dataElement.appendChild(content); + lastListItems[lastListItems.length - 1].appendChild(dataElement); + } else if (liAncestor && this.containsChildWithName('UL', lastDocumentFragment)) { + // If this is a list item and we can appending to an existing list + let listStart = liAncestor; + while (listStart.parentElement.nodeName !== 'UL') { + listStart = listStart.parentElement; + } + range.setStartBefore(listStart); + const content = range.extractContents(); + let lastElement = lastDocumentFragment; + while (lastElement.nodeName !== 'UL' && lastElement.firstChild) { + lastElement = lastElement.firstChild; + } + lastElement.appendChild(content); + } else { + // Otherwise delete any styling that may be floating around as it could + // lead to unexpected whitespace, then append the line. + const cleanupRange = document.createRange(); + cleanupRange.setStart(this.element, 0); + cleanupRange.setEndBefore(startNode); + cleanupRange.extractContents(); + range.setStart(this.element, 0); + const content = range.extractContents(); + lines.push(content); + } offset = lineRange.end + 1; } @@ -306,4 +404,36 @@ export class Geometry { this.element.appendChild(dataElement); }); } + + private isLineBreakElement(node: Node) { + return node.nodeName === 'BR'; + } + + private getAncestorWithName(tag: string, node: Node): Node { + while (node && node !== this.element && node.nodeName !== 'DIV') { + if (node.nodeName === tag) { + return node; + } else { + node = node.parentElement; + } + } + + if (node.nodeName === tag) { + return node; + } + return undefined; + } + + private containsChildWithName(tag: string, node: Node): boolean { + if (node.nodeName === tag) { + return true; + } + while (node.firstChild) { + if (node.nodeName === tag) { + return true; + } + node = node.firstChild; + } + return false; + } } diff --git a/js/apl-html/src/components/text/NodeTraverse.ts b/js/apl-html/src/components/text/NodeTraverse.ts index a9ee680..eda45f3 100644 --- a/js/apl-html/src/components/text/NodeTraverse.ts +++ b/js/apl-html/src/components/text/NodeTraverse.ts @@ -6,25 +6,37 @@ 'use strict'; /** - * The actual Text inside an Element or Attr + * Generate text nodes of all descendent of given root * - * https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + * @param root Containing node */ -const NODE_TYPE_TEXT = 3; +function* textNodes(root: Node) { + const nodesToVisit = [root]; + + while (nodesToVisit.length > 0) { + const n = nodesToVisit.shift(); + if (n.nodeType === Node.TEXT_NODE) { + yield n; + } + // tslint:disable-next-line + for (let i = n.childNodes.length - 1; i >= 0; i--) { + nodesToVisit.unshift(n.childNodes[i]); + } + } +} /** - * Generate text nodes of all descendent of given root + * Get nodes of all descendents of a given root * * @param root Containing node */ -export function* textNodes(root: Node) { +export function *allNodes(root: Node) { const nodesToVisit = [root]; while (nodesToVisit.length > 0) { const n = nodesToVisit.shift(); - if (n.nodeType === NODE_TYPE_TEXT) { - yield n; - } + yield n; + // tslint:disable-next-line for (let i = n.childNodes.length - 1; i >= 0; i--) { nodesToVisit.unshift(n.childNodes[i]); diff --git a/js/apl-html/src/components/text/Text.ts b/js/apl-html/src/components/text/Text.ts index 05ed2ed..66733b2 100644 --- a/js/apl-html/src/components/text/Text.ts +++ b/js/apl-html/src/components/text/Text.ts @@ -4,7 +4,8 @@ */ import * as $ from 'jquery'; -import APLRenderer from '../../APLRenderer'; +import APLRenderer, { IAPLOptions } from '../../APLRenderer'; +import {ComponentType} from '../../enums/ComponentType'; import {FontStyle} from '../../enums/FontStyle'; import {PropertyKey} from '../../enums/PropertyKey'; import {TextAlign} from '../../enums/TextAlign'; @@ -61,7 +62,6 @@ export class Text extends Component { /** @internal */ protected textCss: any = { 'display': 'table-cell', - 'overflow-wrap': 'break-word', 'white-space': 'pre-wrap', '-webkit-user-select': 'none', '-moz-user-select': 'none', @@ -70,6 +70,17 @@ export class Text extends Component { 'hyphens': 'none' }; + /** @internal */ + protected textCssAllowsSelection: any = { + 'display': 'table-cell', + 'white-space': 'pre-wrap', + '-webkit-user-select': 'text', + '-moz-user-select': 'text', + '-ms-user-select': 'text', + 'user-select': 'text', + 'hyphens': 'none' + }; + /** @internal */ protected styledText: any; @@ -80,15 +91,18 @@ export class Text extends Component { protected lineRanges: ILineRange[]; /** @internal */ - private cacheKaraokeLineOffset = 0; + private enableTextSelection?: boolean; /** @internal */ - private cacheKaraokeLine = 0; + private currentHighlighted: number = -1; /** @internal */ constructor(renderer: APLRenderer, component: APL.Component, factory: FactoryFunction, parent?: Component) { super(renderer, component, factory, parent); this.richTextParser = new RichTextParser(); + if (renderer) { + this.enableTextSelection = (renderer.options as IAPLOptions).enableTextSelection; + } this.propExecutor (this.setDimensions, PropertyKey.kPropertyBounds, PropertyKey.kPropertyInnerBounds) (this.setText, PropertyKey.kPropertyText) @@ -111,34 +125,27 @@ export class Text extends Component { return this.lineRanges; } - /** @internal */ - private resetKaraokeCache(): void { - this.cacheKaraokeLineOffset = 0; - this.cacheKaraokeLine = 0; - } - /** @internal */ public getLineByRange(rangeStart: number, rangeEnd: number): number { - if (rangeEnd < this.cacheKaraokeLineOffset) { - this.resetKaraokeCache(); - } + let lineStart = 0; + let byteSum = 0; - for (; this.cacheKaraokeLine < this.lineRanges.length; this.cacheKaraokeLine++) { - const lineRange = this.lineRanges[this.cacheKaraokeLine]; + for (let lineIndex = 0; lineIndex < this.lineRanges.length; lineIndex++) { + const lineRange = this.lineRanges[lineIndex]; const lineText = this.styledText.text.substring(lineRange.start, lineRange.end + 1); - const utf8TextAtLine = utf8.encode(lineText); + const byteSize = utf8.encode(lineText).length; - if (rangeStart >= this.cacheKaraokeLineOffset && - rangeStart <= (this.cacheKaraokeLineOffset + utf8TextAtLine.length)) { - return this.cacheKaraokeLine; + if (byteSum <= rangeStart && byteSum + byteSize > rangeStart) { + lineStart = lineIndex; } - this.cacheKaraokeLineOffset += utf8TextAtLine.length; - } - - this.resetKaraokeCache(); + if (byteSum + byteSize > rangeEnd) { + break; + } - return -1; + byteSum += byteSize; + } + return lineStart; } /** @internal */ @@ -152,7 +159,12 @@ export class Text extends Component { * @param unset on unhighlighting used to determine if the color style should be removed or the color just changed * @internal */ - public highlight(lineNumber?: number, unset?: boolean) { + public highlight(lineNumber: number, unset?: boolean) { + if (!unset) { + this.currentHighlighted = lineNumber; + } else { + this.currentHighlighted = -1; + } // make sure line ranges is available const updateStyleProp = (index: number, addColor: boolean) => { const lineElement: HTMLElement = this.textContainer.childNodes[index] as HTMLElement; @@ -184,13 +196,38 @@ export class Text extends Component { public setDimensions = () => { this.setBoundsAndDisplay(); - this.$textContainer.css(this.textCss); + if (this.enableTextSelection && !this.isChildOfAnEnabledTouchWrapper()) { + this.$textContainer.css(this.textCssAllowsSelection); + } else { + this.$textContainer.css(this.textCss); + } this.$textContainer.css('width', this.innerBounds.width); this.$textContainer.css('height', this.innerBounds.height); this.$textContainer.css('word-break', 'break-word'); } + private isChildOfAnEnabledTouchWrapper(): boolean { + let parent = this.parent; + while (parent) { + if (parent.component.getType() === ComponentType.kComponentTypeTouchWrapper && + this.doesTouchWrapperHaveHandlers(parent)) { + + return true; + } else { + parent = parent.parent; + } + } + return false; + } + + private doesTouchWrapperHaveHandlers(touchwrapper: Component): boolean { + return (touchwrapper.component.getCalculated()[PropertyKey.kPropertyOnPress].length > 0 || + touchwrapper.component.getCalculated()[PropertyKey.kPropertyOnDown].length > 0 || + touchwrapper.component.getCalculated()[PropertyKey.kPropertyOnUp].length > 0 || + touchwrapper.component.getCalculated()[PropertyKey.kPropertyGestures].length > 0); + } + private setTextClamping = () => { this.maxLines = this.props[PropertyKey.kPropertyMaxLines]; } @@ -385,6 +422,9 @@ export class Text extends Component { } this.container.appendChild(this.textContainer); this.lineRanges = m.getLineRanges(); + if (this.currentHighlighted >= 0) { + this.highlight(this.currentHighlighted); + } } protected applyCssShadow = (shadowParams: string) => { @@ -415,6 +455,7 @@ export class TextMeasurement extends Text { this.$measurementBox.css('isolation', 'isolate'); this.$measurementBox.css('width', width + 1); this.$measurementBox.css('height', height + 1); + this.$textContainer.css('overflow-wrap', 'break-word'); } /** diff --git a/js/apl-html/src/events/Event.ts b/js/apl-html/src/events/Event.ts index 17c3409..cc87f4c 100644 --- a/js/apl-html/src/events/Event.ts +++ b/js/apl-html/src/events/Event.ts @@ -11,8 +11,6 @@ import { LoggerFactory } from '../logging/LoggerFactory'; const EVENT_TYPE_MAP = { [EventType.kEventTypeSendEvent]: 'SendEvent', - [EventType.kEventTypeControlMedia]: 'ControlMedia', - [EventType.kEventTypePlayMedia]: 'PlayMedia', [EventType.kEventTypeRequestLineBounds]: 'RequestLineBounds', [EventType.kEventTypeLineHighlight]: 'LineHighlight', [EventType.kEventTypeFinish]: 'Finish', diff --git a/js/apl-html/src/events/Focus.ts b/js/apl-html/src/events/Focus.ts index c0463ef..df71740 100644 --- a/js/apl-html/src/events/Focus.ts +++ b/js/apl-html/src/events/Focus.ts @@ -5,8 +5,11 @@ import {EventProperty} from '..'; import {ActionableComponent} from '../components/ActionableComponent'; +import {FocusDirection} from '../enums/FocusDirection'; import {Event} from './Event'; +const FOCUSABLE_ELEMENTS_SELECTOR = 'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; + /** * @ignore */ @@ -15,19 +18,64 @@ export class Focus extends Event { const component = this.event.getComponent(); if (component) { const viewhostComponent = this.renderer.componentMap[component.getUniqueId()] as ActionableComponent; - if (!viewhostComponent || !viewhostComponent.focus) { - this.event.resolve(); - return; + if (viewhostComponent && viewhostComponent.focus) { + viewhostComponent.focus(); } - viewhostComponent.focus(); this.event.resolve(); } else { - if (this.event.getValue(EventProperty.kEventPropertyDirection)) { - this.event.resolve(); + const direction = this.event.getValue(EventProperty.kEventPropertyDirection); + if (direction !== FocusDirection.kFocusDirectionNone) { + if (!this.renderer.focusTrapped()) { + this.focusOnNextElement(direction); + this.event.resolve(); + } } else { (document.activeElement as HTMLElement).blur(); this.event.resolveWithArg(1); } } } + + private focusOnNextElement(direction: FocusDirection) { + const focusableElements = Array.prototype.slice.call(document.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)); + const initialIndex = focusableElements.indexOf(document.activeElement); + let currentIndex = initialIndex; + let indexStep = 0; + if (direction === FocusDirection.kFocusDirectionForward || + direction === FocusDirection.kFocusDirectionDown || + direction === FocusDirection.kFocusDirectionRight) { + indexStep = 1; + } else { + indexStep = -1; + } + + // We want the next element on the page that doesn't have the renderer's bound view as a parent + let nextElementIsChildOfRendererView = true; + let breakIfValidElementNotFound = false; + while (nextElementIsChildOfRendererView) { + currentIndex = (currentIndex + indexStep) % focusableElements.length; + if (currentIndex === initialIndex) { + breakIfValidElementNotFound = true; + currentIndex = (currentIndex + indexStep) % focusableElements.length; + } + const nextElement = focusableElements[currentIndex]; + + if (breakIfValidElementNotFound || !this.isChildOfRendererView(nextElement)) { + nextElement.focus(); + nextElementIsChildOfRendererView = false; + } + } + } + + private isChildOfRendererView(element: (Element | null)): boolean { + let htmlElement = element; + while (htmlElement !== null) { + if (htmlElement === this.renderer.getView()) { + return true; + } else { + htmlElement = htmlElement.parentElement; + } + } + return false; + } } diff --git a/js/apl-html/src/index.ts b/js/apl-html/src/index.ts index 3816888..fa3951d 100644 --- a/js/apl-html/src/index.ts +++ b/js/apl-html/src/index.ts @@ -76,6 +76,7 @@ export * from './enums/PointerEventType'; export * from './enums/PointerType'; export * from './enums/Position'; export * from './enums/PropertyKey'; +export * from './enums/Role'; export * from './enums/ScrollDirection'; export * from './enums/TextAlign'; export * from './enums/TextAlignVertical'; @@ -108,3 +109,9 @@ export * from './logging/LogCommand'; export * from './logging/LoggerFactory'; export {LogLevel as JSLogLevel} from './logging/LogLevel'; export * from './logging/LogTransport'; +export * from './telemetry/Counter'; +export * from './telemetry/Timer'; +export * from './telemetry/MetricsEvent'; +export * from './telemetry/MetricsRecorder'; +export * from './telemetry/FluidityIncidentReporter'; +export * from './telemetry/TDigest'; diff --git a/js/apl-html/src/media/video/HLSVideoPlayer.ts b/js/apl-html/src/media/video/HLSVideoPlayer.ts index c97c063..9555e01 100644 --- a/js/apl-html/src/media/video/HLSVideoPlayer.ts +++ b/js/apl-html/src/media/video/HLSVideoPlayer.ts @@ -318,7 +318,7 @@ function isHLSExtension(url: string): boolean { const urlObject = new URL(url); urlObject.search = ''; - const extension = path.extname(urlObject); + const extension = path.extname(urlObject.toString()); return SupportedHLSExtensionTypes.reduce((accumulator, currentExtensionType) => { return accumulator || extension.includes(currentExtensionType); }, false); diff --git a/js/apl-html/src/telemetry/Counter.ts b/js/apl-html/src/telemetry/Counter.ts new file mode 100644 index 0000000..d737e31 --- /dev/null +++ b/js/apl-html/src/telemetry/Counter.ts @@ -0,0 +1,36 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { MetricsEventType } from './MetricsEvent'; +import { MetricsRecorder } from './MetricsRecorder'; + +export interface ICounter { + // Increments a counter by the specified amount. + increment(amount: number): void; +} + +export class Counter implements ICounter { + private name: string; + private value: number = 0; + private metricsRecorder: MetricsRecorder; + + constructor(metricsRecorder: MetricsRecorder, name: string) { + this.name = name; + this.metricsRecorder = metricsRecorder; + } + + public increment(amount: number): void { + this.value += amount; + } + + public publish(): void { + this.metricsRecorder.publishToAllSinks( + this.name, + MetricsEventType.Counter, + new Map(), + this.value + ); + } +} diff --git a/js/apl-html/src/telemetry/FluidityIncidentReporter.ts b/js/apl-html/src/telemetry/FluidityIncidentReporter.ts new file mode 100644 index 0000000..304bd00 --- /dev/null +++ b/js/apl-html/src/telemetry/FluidityIncidentReporter.ts @@ -0,0 +1,157 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Counter } from './Counter'; +import { MetricsRecorder } from './MetricsRecorder'; +import { TDigest } from './TDigest'; + +export class FrameStat { + public begin: number; + public end: number; + + constructor(begin: number, end: number) { + this.begin = begin; + this.end = end; + } +} + +export interface IFluidityIncidentReporter { + addFrameStat(frameStat: FrameStat): void; +} + +export class FluidityIncidentReporter { + private lastFrameStat: FrameStat | null = null; + private readonly frameTimes: number[]; + private readonly windowSize: number; + private readonly displayRefreshTimeMs: number; + private readonly thresholdUPS: number; + private readonly minimumDurationMs: number; + private rollingSum: number = 0; + private rollingSquaredSum: number = 0; + private activeIncident: boolean = false; + private tm95UPS: number = 0; + private timeWhenUpsRoseAboveThreshold: number = 0; + private incidentReportedFrameStats: FrameStat[] = []; + private incidentReportedUpsValues: number[] = []; + private currentIncidentId: number = 0; + + private metricsRecorder: MetricsRecorder; + private reportFluidityEvent: (incidentId: number, frameStats: FrameStat[], upsValues: number[]) => void; + private fluidityIncidentCounter: Counter; + private tm95Counter: Counter; + private fluiditySuccessCounter: Counter; + private rollingUpsList: number[]; + private upsDigest: TDigest; + + constructor( + windowSize: number, + thresholdUPS: number, + displayRefreshTimeMs: number, + minimumDurationMs: number, + metricsRecorder: MetricsRecorder, + reportFluidityEvent: (incidentId: number, frameStats: FrameStat[], upsValues: number[]) => void + ) { + this.windowSize = windowSize; + this.thresholdUPS = thresholdUPS < 1 ? 1 : thresholdUPS; + this.displayRefreshTimeMs = displayRefreshTimeMs; + this.minimumDurationMs = minimumDurationMs; + this.frameTimes = []; + this.upsDigest = new TDigest(); + this.rollingUpsList = []; + + this.metricsRecorder = metricsRecorder; + this.reportFluidityEvent = reportFluidityEvent; + this.fluidityIncidentCounter = new Counter(this.metricsRecorder, 'fluidityIncidentCounter'); + this.tm95Counter = new Counter(this.metricsRecorder, 'tm95UPS'); + this.fluiditySuccessCounter = new Counter(this.metricsRecorder, 'fluiditySuccessCounter'); + } + + public addFrameStat(frameStat: FrameStat): void { + if (this.lastFrameStat === null) { + this.lastFrameStat = frameStat; + return; + } + + let incomingFrameTime = frameStat.begin - this.lastFrameStat.begin; + this.lastFrameStat = frameStat; + + if (incomingFrameTime < this.displayRefreshTimeMs) { + incomingFrameTime = this.displayRefreshTimeMs; + } + + let outgoingFrameTime = 0.0; + if (this.frameTimes.length === this.windowSize) { + outgoingFrameTime = this.frameTimes.shift() || 0; + } + + this.frameTimes.push(incomingFrameTime); + this.rollingSum += incomingFrameTime - outgoingFrameTime; + this.rollingSquaredSum += (incomingFrameTime * incomingFrameTime) - (outgoingFrameTime * outgoingFrameTime); + + const rollingMean = this.rollingSum / this.frameTimes.length; + let rollingVariance = (this.rollingSquaredSum / this.frameTimes.length) + + ((this.frameTimes.length * rollingMean * rollingMean) / this.frameTimes.length) + - (2 * rollingMean * this.rollingSum) / this.frameTimes.length; + + if (rollingVariance < 0.0) { + rollingVariance = 0.0; + } + + const rollingStandardDeviation = Math.sqrt(rollingVariance); + const rollingUpfd = rollingMean + 2 * rollingStandardDeviation; + const rollingUps = rollingUpfd / this.displayRefreshTimeMs; + this.rollingUpsList.push(rollingUps); + this.upsDigest.add(rollingUps); + + if (rollingUps > this.thresholdUPS && this.timeWhenUpsRoseAboveThreshold === 0 && !this.activeIncident) { + this.timeWhenUpsRoseAboveThreshold = frameStat.begin; + } + + if (rollingUps > this.thresholdUPS && !this.activeIncident) { + this.incidentReportedFrameStats.push(frameStat); + this.incidentReportedUpsValues.push(rollingUps); + } + + if (rollingUps > this.thresholdUPS + && !this.activeIncident + && this.timeWhenUpsRoseAboveThreshold !== 0 + && (frameStat.begin - this.timeWhenUpsRoseAboveThreshold) > this.minimumDurationMs) { + this.currentIncidentId++; + this.fluidityIncidentCounter.increment(1); + this.fluidityIncidentCounter.publish(); + this.activeIncident = true; + this.reportFluidityEvent( + this.currentIncidentId, + this.getAndResetFrameIncidentReportedFrameStats(), + this.getAndResetFrameIncidentReportedUpsValue()); + } else if (rollingUps <= this.thresholdUPS) { + this.timeWhenUpsRoseAboveThreshold = 0; + this.activeIncident = false; + } + } + + // TODO: Methods below are to support integration with DevTools FrameMetrics domain + + public emitFluidityMetrics(): void { + this.tm95UPS = this.upsDigest.trimmedMean(0.0, 0.96); + this.tm95Counter.increment(this.tm95UPS); + this.tm95Counter.publish(); + + this.fluiditySuccessCounter.increment(1); + this.fluiditySuccessCounter.publish(); + } + + private getAndResetFrameIncidentReportedFrameStats(): FrameStat[] { + const frameStats = this.incidentReportedFrameStats; + this.incidentReportedFrameStats = []; + return frameStats; + } + + private getAndResetFrameIncidentReportedUpsValue(): number[] { + const upsValues = this.incidentReportedUpsValues; + this.incidentReportedUpsValues = []; + return upsValues; + } +} diff --git a/js/apl-html/src/telemetry/MetricsEvent.ts b/js/apl-html/src/telemetry/MetricsEvent.ts new file mode 100644 index 0000000..0c59411 --- /dev/null +++ b/js/apl-html/src/telemetry/MetricsEvent.ts @@ -0,0 +1,29 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +export interface IMetricsEvent { + // The name of this metric. + metricName: string; + + // The type of metric event this is. + type: MetricsEventType; + + // The snapshot of metadata at the time of recording this metric. + metadata: Map; + + // Value depends on what the type is. See enum comments. + value: number; +} + +export enum MetricsEventType { + // Counters have a value that is the current increment of a counter. + Counter, + // The end of some measurable operation. The value is the elapsed time in milliseconds. + SegmentEnd, + // The end of some measurable operation that failed. The value is the elapsed time in milliseconds. + SegmentFailed, + // A significant event in the document lifecycle. The value is a platform timestamp in milliseconds. + Milestone +} diff --git a/js/apl-html/src/telemetry/MetricsRecorder.ts b/js/apl-html/src/telemetry/MetricsRecorder.ts new file mode 100644 index 0000000..39818a1 --- /dev/null +++ b/js/apl-html/src/telemetry/MetricsRecorder.ts @@ -0,0 +1,144 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Counter } from './Counter'; +import { IMetricsEvent, MetricsEventType } from './MetricsEvent'; +import { Timer } from './Timer'; + +export interface IMetricsRecorder { + // Create a counter object. + createCounter(counterName: string): Counter; + + // Records a milestone. + recordMilestone(milestoneName: string): void; + + // Starts and records a timer object. When finished, the timer should be stopped. + // Metadata may include values specific to what is being measured. For example, asset urls, or extension names. + startTimer(timerName: string, metadata: Map): Timer; + + // Adds a new sink to this recorder. The recorder can have multiple sinks. + // Metrics are published in no particular order to the sinks. + addSink(sink: IMetricsSink): void; + + // Add metadata that will be included with all metrics. + // Will replace value if key already exists. + addMetadata(key: string, value: string): void; + + // Merges the MetricsRecorder's metadata dictionary with this one. + // Will overwrite values if keys exist. + mergeMetadata(metadata: Map): void; +} + +export interface IMetricsSink { + metricPublished(event: IMetricsEvent): void; +} + +/** + * Defines rendering milestones for APL documents. Milestones are single points in time. + */ +export enum Milestone { + kDocumentReceived = 'M.DocumentReceived', + kDocumentPrepared = 'M.DocumentPrepared', + kDocumentRendered = 'M.DocumentRendered' +} + +/** + * Defines rendering segments for APL documents. Segments have a defined start/end. + */ +export enum Segment { + kCreateContent = 'S.CreateContent', + kPrepareContent = 'S.PrepareContent', + kRegisterExtensions = 'S.RegisterExtensions', + kInflateRootContext = 'S.InflateRootContext', + kInflateViews = 'S.InflateViews', + kLayoutViews = 'S.LayoutViews', + kMeasureText = 'S.MeasureText', + kRenderDocument = 'S.RenderDocument' +} + +/** + * + */ +export enum CounterName { + kMeasureText = 'C.MeasureText' +} + +// -------- INTERFACE IMPLEMENTATION -------- + +export class MetricsRecorder implements IMetricsRecorder { + private sinks: IMetricsSink[] = []; + private metadata: Map; + private counterList: Map; + + constructor() { + this.metadata = new Map(); + this.counterList = new Map(); + Object.keys(CounterName).map((key) => { + this.counterList.set(CounterName[key], this.createCounter(CounterName[key])); + }); + } + + public createCounter(counterName: CounterName): Counter { + return new Counter(this, counterName); + } + + public recordMilestone(milestoneName: Milestone): void { + this.publishToAllSinks( + milestoneName, + MetricsEventType.Milestone, + this.metadata, + this.generateTimestamp() + ); + } + + public startTimer(timerName: Segment, metadata: Map): Timer { + if (timerName === Segment.kMeasureText) { + this.incrementCounter(CounterName.kMeasureText); + } + return new Timer(this, timerName, metadata); + } + + public addSink(sink: IMetricsSink): void { + this.sinks.push(sink); + } + + public addMetadata(key: string, value: string): void { + this.metadata.set(key, value); + } + + public mergeMetadata(metadata: Map): void { + this.metadata = new Map([...this.metadata, ...metadata]); + } + + public incrementCounter(name: CounterName, amount: number = 1): void { + this.counterList.get(name)?.increment(amount); + } + + public dumpCounters(): void { + this.counterList.forEach((counter) => counter.publish()); + } + + // -------- HELPER METHODS -------- + + public generateTimestamp(): number { + return performance.now(); + } + + public publishToAllSinks(metricName: string, type: MetricsEventType, metadata: Map, value: number) { + if (this.sinks.length === 0) { + console.log('No sinks added.'); + return; + } + + this.sinks.forEach((sink) => { + sink.metricPublished({ + metricName, + type, + metadata: new Map([...this.metadata, ...metadata]), + value + } as IMetricsEvent); + }); + } +} diff --git a/js/apl-html/src/telemetry/TDigest.ts b/js/apl-html/src/telemetry/TDigest.ts new file mode 100644 index 0000000..db828e0 --- /dev/null +++ b/js/apl-html/src/telemetry/TDigest.ts @@ -0,0 +1,199 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +const DEFAULT_COMPRESSION_FACTOR = 10.0; + +export class Centroid { + constructor(public mean: number, public count: number) {} + + public add(value: number, weight: number): void { + const totalCount = this.count + weight; + this.mean = (this.mean * this.count + value * weight) / totalCount; + this.count = totalCount; + } +} + +export class TDigest { + private centroids: Centroid[] = []; + private count: number = 0; + private compression: number; + + constructor(compression: number = DEFAULT_COMPRESSION_FACTOR) { + this.compression = compression; + } + + public add(value: number, weight: number = 1): void { + // If this is the first value being added to the T-Digest, simply create a new Centroid and add to the vector. + if (this.centroids.length === 0) { + this.centroids.push(new Centroid(value, weight)); + this.count = weight; + return; + } + + let index = this.binarySearchCentroids(value); + if (index < 0) { + index = -index - 1; + } + + let nearest: Centroid; + if (index > 0 && index < this.centroids.length) { + const left = this.centroids[index - 1]; + const right = this.centroids[index]; + if (Math.abs(left.mean - value) < Math.abs(right.mean = value)) { + nearest = left; + index--; + } else { + nearest = right; + } + } else if (index === 0) { + nearest = this.centroids[0]; + } else { + nearest = this.centroids[this.centroids.length - 1]; + } + + // Calculate the quantile of the nearest centroid. + // this.sumWeight(0, index) calculates the total weight of all centroids up to the index of the nearest centroid + // (nearest.count / 2) adds half the weight of the nearest centroid. + // (this.count + weight) is the total weight of all centroids, including the new value being added. + // The result is the quantile of the nearest centroid, + // which represents its position within the overall distribution. + const qQuantile = (this.sumWeight(0, index) + nearest.count / 2) / (this.count + weight); + + // Calculate the size (maximum weight) of the nearest centroid based on the calculated quantile. + // 4 * (this.count + weight) is a constant factor related to the compression parameter of the TDigest. + // qQuantile * (1 - qQuantile) is the variance of the quantile, which represents the ideal size of the centroid. + // this.compression is a parameter that controls the overall compression of the TDigest. + // The result is the max weight that the nearest centroid should have, based on the current state of the TDigest + const qSize = 4 * (this.count + weight) * qQuantile * (1 - qQuantile) / this.compression; + + // If the nearest centroid can still hold more values, then add the new value to the centroid, + // else create a new Centroid and add it to the array of Centroids. + if (nearest.count + weight <= qSize) { + nearest.add(value, weight); + } else { + this.centroids.splice(index, 0, new Centroid(value, weight)); + } + + // Update the total weight of all the centroids in the data structure. + this.count += weight; + + // If the number of Centroids in the system is more than a constant based on the compression, + // then compress, or in other words merge centroids, while maintaining compression and distribution + if (this.centroids.length > 10 * this.compression) { + this.compress(); + } + } + + public getSum(): number { + return this.centroids.reduce((sum, c) => sum + c.count * c.mean, 0); + } + + public trimmedMean(lowerQuantile: number, upperQuantile: number): number { + // If the TDigest is empty, return 0.0 + if (this.centroids.length === 0) { + return 0.0; + } + + // Calculate the lower and upper ranks based on the provided quantiles + const lowerRank = lowerQuantile * this.count; + const upperRank = upperQuantile * this.count; + let sum = 0; + let trimmedCount = 0; + let cumulative = 0; + + // Iterate through the centroids + for (const c of this.centroids) { + // If the centroid is fully within the lower and upper ranks, + // add its full value and count to the sum and trimmed count + if (cumulative >= lowerRank && cumulative + c.count <= upperRank) { + sum += c.mean * c.count; + trimmedCount += c.count; + } else if (cumulative < lowerRank && cumulative + c.count > lowerRank) { + // If the centroid straddles the lower rank, + // add the partial count to the sum and trimmed count + const partialCount = cumulative + c.count - lowerRank; + sum += c.mean * partialCount; + trimmedCount += partialCount; + } else if (cumulative < upperRank && cumulative + c.count > upperRank) { + // If the centroid straddles the upper rank, + // add the partial count to the sum and trimmed count + const partialCount = upperRank - cumulative; + sum += c.mean * partialCount; + trimmedCount += partialCount; + } + // Update the cumulative count + cumulative += c.count; + // Stop iterating if the upperRank is reached + if (cumulative >= upperRank) { + break; + } + } + + // Calculate and return the trimmed mean + return trimmedCount > 0 ? sum / trimmedCount : 0.0; + } + + private sumWeight(start: number, end: number): number { + return this.centroids.slice(start, end).reduce((sum, c) => sum + c.count, 0); + } + + private compress(): void { + // Create a new vector to hold the compressed centroids + const compressed: Centroid[] = []; + // Track the total weight (count) of the centroids + let totalWeight = 0; + // Keep track of the current index in the compressed vector + let currentIndex = 0; + + // For each centroid, check the nearest centroid and compress if possible. + for (const c of this.centroids) { + if (compressed.length === 0 || currentIndex >= compressed.length) { + // If the compressed array is empty or if the end is reached, + // add a new centroid to the compressed array + compressed.push(new Centroid(c.mean, c.count)); + currentIndex = compressed.length - 1; + } else { + // Calculate the quantile and the desired size of the current centroid + const q = totalWeight / this.count; + const k = 4 * this.count * q * (1 - q) / this.compression; + + // If the current centroid can be merged with the nearest compressed centroid, + // add the current centroid's values to the compressed centroid + if (compressed[currentIndex].count + c.count <= k) { + compressed[currentIndex].add(c.mean, c.count); + } else { + // Otherwise, create a new compressed centroid + compressed.push(new Centroid(c.mean, c.count)); + currentIndex = compressed.length - 1; + } + } + // Update the total weight + totalWeight += c.count; + } + + // Replace the original centroids with the compressed centroids + this.centroids = compressed; + } + + private binarySearchCentroids(value: number): number { + let left = 0; + let right = this.centroids.length; + + while (left < right) { + const mid = Math.floor((left + right) / 2); + if (this.centroids[mid].mean < value) { + left = mid + 1; + } else { + right = mid; + } + } + + if (left < this.centroids.length && this.centroids[left].mean === value) { + return left; + } else { + return -left - 1; + } + } +} diff --git a/js/apl-html/src/telemetry/Timer.ts b/js/apl-html/src/telemetry/Timer.ts new file mode 100644 index 0000000..2c9243c --- /dev/null +++ b/js/apl-html/src/telemetry/Timer.ts @@ -0,0 +1,53 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { MetricsEventType } from './MetricsEvent'; +import { MetricsRecorder, Segment } from './MetricsRecorder'; + +export interface ITimer { + // Stops the timer and emits a EndSegment event. After stopping, the timer cannot be restarted. + stop(): void; + + // Stops the timer and emits a FailSegment event. After failing, the timer cannot be restarted. + fail(): void; +} + +export class Timer implements ITimer { + private name: Segment; + private metadata: Map; + private metricsRecorder: MetricsRecorder; + private startTime: number; + + constructor( + metricsRecorder: MetricsRecorder, + name: Segment, + metadata: Map + ) { + this.name = name; + this.metadata = metadata; + this.metricsRecorder = metricsRecorder; + this.startTime = this.metricsRecorder.generateTimestamp(); + } + + public stop(): void { + const endTime = this.metricsRecorder.generateTimestamp(); + this.metricsRecorder.publishToAllSinks( + this.name, + MetricsEventType.SegmentEnd, + this.metadata, + endTime - this.startTime + ); + } + + public fail(): void { + const endTime = this.metricsRecorder.generateTimestamp(); + this.metricsRecorder.publishToAllSinks( + this.name, + MetricsEventType.SegmentFailed, + this.metadata, + endTime - this.startTime + ); + } +} diff --git a/js/apl-html/src/utils/AplVersionUtils.ts b/js/apl-html/src/utils/AplVersionUtils.ts index 2c18d7e..4843b0d 100644 --- a/js/apl-html/src/utils/AplVersionUtils.ts +++ b/js/apl-html/src/utils/AplVersionUtils.ts @@ -21,6 +21,7 @@ export const APL_2023_2 = 13; export const APL_2023_3 = 14; export const APL_2024_1 = 15; export const APL_2024_2 = 16; +export const APL_2024_3 = 17; export const APL_LATEST = Number.MAX_VALUE; export interface AplVersionUtils { @@ -46,7 +47,8 @@ export function createAplVersionUtils(): AplVersionUtils { ['2023.2', APL_2023_2], ['2023.3', APL_2023_3], ['2024.1', APL_2024_1], - ['2024.2', APL_2024_2] + ['2024.2', APL_2024_2], + ['2024.3', APL_2024_3] ]); return { diff --git a/js/apl-html/src/utils/Constant.ts b/js/apl-html/src/utils/Constant.ts index d33639b..7c0929f 100644 --- a/js/apl-html/src/utils/Constant.ts +++ b/js/apl-html/src/utils/Constant.ts @@ -16,6 +16,7 @@ export const ARROW_LEFT = 'ArrowLeft'; export const ARROW_UP = 'ArrowUp'; export const ARROW_RIGHT = 'ArrowRight'; export const ARROW_DOWN = 'ArrowDown'; +export const TAB_KEY = 'Tab'; export const HttpStatusCodes = { Ok: 200, diff --git a/js/apl-html/src/utils/FontUtils.ts b/js/apl-html/src/utils/FontUtils.ts index f5d4f5b..7dd7b0b 100644 --- a/js/apl-html/src/utils/FontUtils.ts +++ b/js/apl-html/src/utils/FontUtils.ts @@ -68,7 +68,6 @@ const FONT_STYLE_MAPPING: { [alias: number]: string } = { [FontStyle.kFontStyleItalic]: 'italic' }; const DEFAULT_FONT_STYLE: string = FONT_STYLE_MAPPING[FontStyle.kFontStyleNormal]; -const DEFAULT_FONT_FAMILY = SANS_SERIF; const ARABIC_ENABLED_FONTS: string[] = [ 'amazon ember' ]; @@ -96,7 +95,7 @@ export class FontUtils { */ public static async initialize() { if (!this.initialized) { - const initializePromise = new Promise((res) => { + const initializePromise = new Promise((res) => { this.initializationCallback = res; }); const customLoader: WebFont.Custom = { @@ -193,8 +192,8 @@ function setFontOptions(options: SetFontOptions) { return Object.assign(defaultOptions, options); } -function findFontFamily(fontFamily: string, defaultFontFamily = DEFAULT_FONT_FAMILY): string { - function findFont(font: string, defaultFont = undefined) { +function findFontFamily(fontFamily: string): string { + function findFont(font: string) { const trimmedFontFamily = font.trim(); let sanitizedFontFamily = trimmedFontFamily.toLowerCase(); sanitizedFontFamily = replaceAll(sanitizedFontFamily, '-', ' '); @@ -203,45 +202,49 @@ function findFontFamily(fontFamily: string, defaultFontFamily = DEFAULT_FONT_FAM return FONT_ALIAS_MAPPING[sanitizedFontFamily]; } - return defaultFont ? defaultFont : trimmedFontFamily; + return trimmedFontFamily; } if (isMultiFontFamily(fontFamily)) { const fonts = fontFamily.split(','); return fonts.map((font) => { - return findFont(font, defaultFontFamily); + return findFont(font); }).reduce((accumulator, current) => { return accumulator ? `${accumulator}, ${current}` : current; }, ''); } - return findFont(fontFamily, defaultFontFamily); + return findFont(fontFamily); } -function findFontStyle(fontStyle: FontStyle, lang: string = undefined, logger: ILogger = undefined): string { +function findFontStyle(fontStyle: FontStyle, lang?: string, logger?: ILogger): string { if (FONT_STYLE_MAPPING.hasOwnProperty(fontStyle)) { return langSupportedFontStyle(fontStyle, lang, logger); } return DEFAULT_FONT_STYLE; } -function findFontWeight(fontWeight: FontWeight, lang: string = undefined, logger: ILogger = undefined): FontWeight { +function findFontWeight(fontWeight: FontWeight, lang?: string, logger?: ILogger): FontWeight { if (isArabicLang(lang) && !arrayIncludes(ARABIC_SUPPORTED_FONT_WEIGHTS, fontWeight)) { let fontOverride = FontWeights.Regular; if (fontWeight >= FontWeights.Medium) { fontOverride = FontWeights.Bold; } - logger.warn(`Font Weight: "${fontWeight}" not supported in "${lang}". Default using "${fontOverride}"`); + if (logger) { + logger.warn(`Font Weight: "${fontWeight}" not supported in "${lang}". Default using "${fontOverride}"`); + } return fontOverride; } return fontWeight; } -function langSupportedFontStyle(fontStyle: FontStyle, lang: string, logger: ILogger) { +function langSupportedFontStyle(fontStyle: FontStyle, lang?: string, logger?: ILogger) { if (isArabicLang(lang) && !arrayIncludes(ARABIC_SUPPORTED_FONT_STYLES, fontStyle)) { const style = FONT_STYLE_MAPPING.hasOwnProperty(fontStyle) ? FONT_STYLE_MAPPING[fontStyle] : 'unsupported style'; const styleOverride = DEFAULT_FONT_STYLE; - logger.warn(`Font Style: "${style}" not supported in "${lang}". Default using "${styleOverride}"`); + if (logger) { + logger.warn(`Font Style: "${style}" not supported in "${lang}". Default using "${styleOverride}"`); + } return styleOverride; } return FONT_STYLE_MAPPING[fontStyle]; @@ -265,7 +268,7 @@ function fontFamilySupportsArabic(fontFamily: string): boolean { return supportsArabic(fontFamily); } -function isArabicLang(bcp47: string): boolean { +function isArabicLang(bcp47?: string): boolean { // BCP47 String begins with 'ar' return bcp47 !== undefined && bcp47.indexOf('ar') === 0; } diff --git a/js/apl-html/src/utils/MediaRequestUtils.ts b/js/apl-html/src/utils/MediaRequestUtils.ts index 21bbbba..d5d8a5d 100644 --- a/js/apl-html/src/utils/MediaRequestUtils.ts +++ b/js/apl-html/src/utils/MediaRequestUtils.ts @@ -44,8 +44,6 @@ const mediaRequestMap = { const {renderer} = args; return await renderer.onRequestGraphic(vectorGraphicSource[vectorGraphicSource.length - 1] , headers[vectorGraphicSource.length - 1]); - }, - [EventMediaType.kEventMediaTypeVideo]: () => { } }; diff --git a/js/apl-html/webpack.common.js b/js/apl-html/webpack.common.js index 3246d13..33333fb 100644 --- a/js/apl-html/webpack.common.js +++ b/js/apl-html/webpack.common.js @@ -35,7 +35,9 @@ module.exports = { ] }, resolve: { - extensions: ['.tsx', '.ts', '.js'] + extensions: ['.tsx', '.ts', '.js'], + fallback: { + path: require.resolve("path-browserify") } }, output: { filename: 'index.js', diff --git a/js/apl-html/webpack.dev.js b/js/apl-html/webpack.dev.js index ca61f3d..4ed4a75 100644 --- a/js/apl-html/webpack.dev.js +++ b/js/apl-html/webpack.dev.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { diff --git a/js/apl-html/webpack.prod.js b/js/apl-html/webpack.prod.js index 3ce1c75..bdbb805 100644 --- a/js/apl-html/webpack.prod.js +++ b/js/apl-html/webpack.prod.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; diff --git a/js/apl-html/webpack.test.js b/js/apl-html/webpack.test.js index 98aa7fc..b97a247 100644 --- a/js/apl-html/webpack.test.js +++ b/js/apl-html/webpack.test.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { diff --git a/js/apl-wasm/wasm-loader.js b/js/apl-wasm/export-module.js similarity index 100% rename from js/apl-wasm/wasm-loader.js rename to js/apl-wasm/export-module.js diff --git a/js/apl-wasm/package-lock.json b/js/apl-wasm/package-lock.json deleted file mode 100644 index 487e6b0..0000000 --- a/js/apl-wasm/package-lock.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "name": "apl-wasm", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.19.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz", - "integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==", - "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" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "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" - } - }, - "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 - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "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 - }, - "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" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "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 - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "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 - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "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" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "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" - } - }, - "ts-loader": { - "version": "6.2.2", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^4.0.0", - "semver": "^6.0.0" - } - }, - "typescript": { - "version": "2.9.2", - "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 - } - } -} diff --git a/js/apl-wasm/package.json b/js/apl-wasm/package.json index 3ef51f4..095b7f5 100644 --- a/js/apl-wasm/package.json +++ b/js/apl-wasm/package.json @@ -47,16 +47,16 @@ "rimraf": "^2.6.2", "sinon": "^7.5.0", "source-map-loader": "^0.2.4", - "ts-loader": "^6.2.2", - "ts-node": "^8.10.2", + "ts-loader": "^9.3.1", + "ts-node": "^10.7.0", "tslint": "^5.12.1", "tslint-loader": "^3.5.4", "typedoc": "^0.15.0", - "typescript": "2.9.2", + "typescript": "4.9.5", "uglifyjs-webpack-plugin": "^2.1.2", - "webpack": "^4.26.1", - "webpack-bundle-analyzer": "^4.6.1", - "webpack-cli": "^3.3.12", - "webpack-merge": "^4.2.1" + "webpack": "5.75.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.10.0" } } diff --git a/js/apl-wasm/src/APLWASMRenderer.ts b/js/apl-wasm/src/APLWASMRenderer.ts index fc2339d..61b8ee9 100644 --- a/js/apl-wasm/src/APLWASMRenderer.ts +++ b/js/apl-wasm/src/APLWASMRenderer.ts @@ -7,7 +7,8 @@ import APLRenderer, { commandFactory, Content, DefaultAudioPlayer, DeviceMode, DisplayState, FontUtils, IAPLOptions, IAudioEventListener, IAudioPlayerFactory, IConfigurationChangeOptions, JSLogLevel, LiveArray, LiveMap, - LocaleMethods, LoggerFactory, LogTransport, MediaPlayerHandle, OnLogCommand, ViewportShape + LocaleMethods, LoggerFactory, LogTransport, MediaPlayerHandle, OnLogCommand, + Segment, ViewportShape } from 'apl-html'; import { ConfigurationChange } from './ConfigurationChange'; import { PackageLoader } from './content/PackageLoader'; @@ -56,7 +57,7 @@ export interface IAPLWASMOptions extends IAPLOptions { /** Document State to restore */ documentState?: IDocumentState; /** Override package download. Reject the Promise to fallback to the default logic. */ - packageLoader?: (name: string, version: string, url?: string) => Promise; + packageLoader?: (name: string, version: string, url?: string, domain?: string) => Promise; /** callback for APL Log Command handling, will overwrite the callback during Content creation */ onLogCommand?: OnLogCommand; /** @internal */ @@ -323,10 +324,15 @@ export class APLWASMRenderer extends APLRenderer { if (this.options.extensionManager) { // Extensions requested by the content + const registerExtensionsSegment = + this.metricsRecorder?.startTimer(Segment.kRegisterExtensions, new Map()); this.options.extensionManager.registerRequestedExtensions(this.rootConfig, this.content); this.extensionManager = this.options.extensionManager; + registerExtensionsSegment?.stop(); } + const inflateRootContextSegment = + this.metricsRecorder?.startTimer(Segment.kInflateRootContext, new Map()); if (!this.context) { if (this.options.documentState) { await this.restoreDocument(this.options.documentState); @@ -346,14 +352,19 @@ export class APLWASMRenderer extends APLRenderer { if (!this.context) { this.logger.warn('Template provided is invalid.'); this.updateDocumentState(DocumentState.error); + inflateRootContextSegment?.fail(); return Promise.reject('Failed to create context'); } this.coreDocumentContext = this.context.topDocument(); this.updateDocumentState(DocumentState.inflated); + inflateRootContextSegment?.stop(); + const inflateViewsSegment = this.metricsRecorder?.startTimer(Segment.kInflateViews, new Map()); super.init(); this.updateDocumentState(DocumentState.displayed); + inflateViewsSegment?.stop(); + if (this.extensionManager) { this.extensionManager.onDocumentRender(this.context, this.content.getContent()); } @@ -466,8 +477,20 @@ export class APLWASMRenderer extends APLRenderer { } public async loadPackages(): Promise { + const prepareContentSegment = + this.metricsRecorder?.startTimer(Segment.kPrepareContent, new Map()); + return new Promise((resolve) => { - this.content.getContent().load(() => resolve(true), () => resolve(false)); + this.content.getContent().load( + () => { + prepareContentSegment?.stop(); + resolve(true); + }, + () => { + prepareContentSegment?.fail(); + resolve(false); + } + ); }); } diff --git a/js/apl-wasm/src/content/PackageLoader.ts b/js/apl-wasm/src/content/PackageLoader.ts index dfb9264..e192bce 100644 --- a/js/apl-wasm/src/content/PackageLoader.ts +++ b/js/apl-wasm/src/content/PackageLoader.ts @@ -34,13 +34,14 @@ export class PackageLoader { */ private loadPackages: Map; - private overridePackageLoader?: (name: string, version: string, url?: string) => Promise; + private overridePackageLoader?: (name: string, version: string, url?: string, domain?: string) => Promise; /** * Initialize PackageLoader attributes * @memberOf PackageLoader */ - constructor(overridePackageLoader?: (name: string, version: string) => Promise) { + constructor(overridePackageLoader?: (name: string, version: string, url?: string, domain?: string) + => Promise) { this.logger = LoggerFactory.getLogger('PackageLoader'); this.loadPackages = new Map(); this.overridePackageLoader = overridePackageLoader; @@ -72,14 +73,18 @@ export class PackageLoader { /** * Walk a list of packages until all of them have been loaded. */ - private async ensureLoaded(importRequests: APL.ImportRequest[]): Promise { + private async ensureLoaded(importRequests: APL.ImportRequest[]): Promise { return new Promise((resolve, reject) => { let count = importRequests.length; if (count > 0) { importRequests.forEach(async (pkg) => { - await this.loadPackage(pkg.reference().name(), pkg.reference().version(), - pkg.source()); + await this.loadPackage( + pkg.reference().name(), + pkg.reference().version(), + pkg.source(), + pkg.reference().domain() + ); count -= 1; if (count === 0) { resolve(); @@ -94,7 +99,7 @@ export class PackageLoader { /* * Execute a package load. */ - private async loadPackage(name: string, version: string, url: string): Promise { + private async loadPackage(name: string, version: string, url: string, domain: string): Promise { const key = `${name}/${version}`; if (this.loadPackages.get(key)) { const data: ILoadingProcessData | undefined = this.loadPackages.get(key); @@ -110,7 +115,7 @@ export class PackageLoader { if (this.overridePackageLoader) { // The runtime has provided their own package loader implementation - return this.overridePackageLoader(name, version, url).then((jsonResponse) => { + return this.overridePackageLoader(name, version, url, domain).then((jsonResponse) => { if (pkg) { pkg.json = JSON.parse(jsonResponse); pkg.state = LoadState.done; diff --git a/js/apl-wasm/src/document/DocumentContext.ts b/js/apl-wasm/src/document/DocumentContext.ts index bd70335..57a56c3 100644 --- a/js/apl-wasm/src/document/DocumentContext.ts +++ b/js/apl-wasm/src/document/DocumentContext.ts @@ -5,8 +5,8 @@ import { Content, DefaultAudioPlayer, DisplayState as CoreDisplayState, IAudioEventListener, IConfigurationChangeOptions, ILogger, LocaleMethods, - LoggerFactory, - MediaPlayerHandle} from 'apl-html'; + LoggerFactory, MediaPlayerHandle, MetricsRecorder, Milestone, + Segment} from 'apl-html'; import { v4 as uuidv4 } from 'uuid'; import { APLWASMRenderer, IAPLWASMOptions } from '../APLWASMRenderer'; import { Queue } from '../common/Queue'; @@ -66,8 +66,12 @@ export class DocumentContext { private documentConfig: APL.DocumentConfig; + private metricsRecorder?: MetricsRecorder; + private saved: boolean = false; + private paused: boolean = false; + constructor(request: IRenderDocumentRequest, vhContext: ViewhostContext, fillMissingData = true) { if (!request.doc) { throw new Error('Document is required'); @@ -76,6 +80,8 @@ export class DocumentContext { request.data = '{}'; } this.logger = LoggerFactory.getLogger('DocumentContext'); + this.metricsRecorder = vhContext.getMetricsRecorder(); + this.metricsRecorder?.recordMilestone(Milestone.kDocumentReceived); if (request.token) { this.token = request.token; @@ -112,8 +118,12 @@ export class DocumentContext { this.rootConfig.documentManager(this.documentManager.provideCppDocumentManager()); this.createMetrics(vhConfig); + + const createContentSegment = this.metricsRecorder?.startTimer(Segment.kCreateContent, + new Map()); this.content = Content.create(request.doc, request.data, vhConfig.onLogCommand, this.metrics, this.rootConfig, fillMissingData); + createContentSegment?.stop(); if (vhConfig.onDocumentStateUpdate) { this.stateListeners.set(0, { @@ -130,7 +140,8 @@ export class DocumentContext { content: this.content, metrics: this.metrics, isAutoSizing: this.isAutoSizing, - onDocumentStateUpdate: (state) => this.onDocumentStateUpdate(state) + onDocumentStateUpdate: (state) => this.onDocumentStateUpdate(state), + metricsRecorder: this.metricsRecorder }; this.aplRenderer = APLWASMRenderer.create(options); this.aplRenderer.setRootConfig(this.rootConfig); @@ -191,7 +202,10 @@ export class DocumentContext { return this.getHandle(); } return this.aplRenderer!.prepare() - .then(() => new DocumentHandle(this)) + .then(() => { + this.metricsRecorder?.recordMilestone(Milestone.kDocumentPrepared); + return new DocumentHandle(this); + }) .catch((e) => Promise.reject(e)); } @@ -206,9 +220,21 @@ export class DocumentContext { this.aplRenderer!.bindToView(view); this.saved = false; + const renderDocumentSegment = this.metricsRecorder?.startTimer(Segment.kRenderDocument, + new Map()); return this.aplRenderer!.init() - .then(() => new DocumentHandle(this)) - .catch((e) => Promise.reject(e)); + .then(() => { + this.metricsRecorder?.recordMilestone(Milestone.kDocumentRendered); + renderDocumentSegment?.stop(); + if (this.paused) { + this.aplRenderer!.stopUpdate(); + } + return new DocumentHandle(this); + }) + .catch((e) => { + renderDocumentSegment?.fail(); + return Promise.reject(e); + }); } public unbindFromView() { @@ -342,6 +368,7 @@ export class DocumentContext { * @ignore */ public async pause(): Promise { + this.paused = true; if (!this.aplRenderer) { return Promise.reject('Context destroyed'); } @@ -353,6 +380,7 @@ export class DocumentContext { * @ignore */ public async resume(): Promise { + this.paused = false; if (!this.aplRenderer) { return Promise.reject('Context destroyed'); } diff --git a/js/apl-wasm/src/extensions/unifiedBackstack/SavedDocument.ts b/js/apl-wasm/src/extensions/unifiedBackstack/SavedDocument.ts index 69c957b..07ca915 100644 --- a/js/apl-wasm/src/extensions/unifiedBackstack/SavedDocument.ts +++ b/js/apl-wasm/src/extensions/unifiedBackstack/SavedDocument.ts @@ -3,9 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ +import { IConfigurationChangeOptions } from 'apl-html'; import { DocumentContext } from '../../document/DocumentContext'; export class SavedDocument { + private storedConfigurationChange: IConfigurationChangeOptions | null; + public static create(context: DocumentContext, id: string): SavedDocument { return new SavedDocument(context, id); } @@ -15,6 +18,10 @@ export class SavedDocument { } public restore(): DocumentContext { + if (this.storedConfigurationChange) { + this.context.configurationChange(this.storedConfigurationChange); + this.storedConfigurationChange = null; + } return this.context; } @@ -25,4 +32,8 @@ export class SavedDocument { public getId(): string { return this.id; } + + public storeConfigurationChange(configChange: IConfigurationChangeOptions) { + this.storedConfigurationChange = { ...this.storedConfigurationChange, ...configChange }; + } } diff --git a/js/apl-wasm/src/extensions/unifiedBackstack/Stack.ts b/js/apl-wasm/src/extensions/unifiedBackstack/Stack.ts index e230077..54dcd95 100644 --- a/js/apl-wasm/src/extensions/unifiedBackstack/Stack.ts +++ b/js/apl-wasm/src/extensions/unifiedBackstack/Stack.ts @@ -64,4 +64,8 @@ export class Stack { public getLiveIds(): LiveArray { return this.idStack; } + + public getStackedItems(): SavedDocument[] { + return this.stackedItems; + } } diff --git a/js/apl-wasm/src/extensions/unifiedBackstack/UnifiedBackstackExtension.ts b/js/apl-wasm/src/extensions/unifiedBackstack/UnifiedBackstackExtension.ts index e0eb60d..a1ddf41 100644 --- a/js/apl-wasm/src/extensions/unifiedBackstack/UnifiedBackstackExtension.ts +++ b/js/apl-wasm/src/extensions/unifiedBackstack/UnifiedBackstackExtension.ts @@ -6,6 +6,7 @@ import { ExtensionCommandDefinition, ExtensionEventHandler, + IConfigurationChangeOptions, IExtension, IExtensionEventCallbackResult, ILiveDataDefinition @@ -250,4 +251,9 @@ export class UnifiedBackstackExtension implements IExtension, GoBackListener { } } + public provideConfigChangeToStackedDocuments(configChange: IConfigurationChangeOptions) { + this.backstack.getStackedItems().forEach( (savedDocument) => { + savedDocument.storeConfigurationChange(configChange); + }); + } } diff --git a/js/apl-wasm/src/viewhost/APLViewhostWASM.ts b/js/apl-wasm/src/viewhost/APLViewhostWASM.ts index 7c0cbf7..61d6f14 100644 --- a/js/apl-wasm/src/viewhost/APLViewhostWASM.ts +++ b/js/apl-wasm/src/viewhost/APLViewhostWASM.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { FontUtils, IConfigurationChangeOptions, ILogger, LoggerFactory } from 'apl-html'; +import { FontUtils, IConfigurationChangeOptions, ILogger, LoggerFactory, MetricsRecorder } from 'apl-html'; import { AplDisplayState } from '../common/ViewhostTypes'; import { DocumentContext } from '../document/DocumentContext'; import { DocumentHandle } from '../document/DocumentHandle'; @@ -17,6 +17,7 @@ export class APLViewhostWASM { private logger: ILogger; private viewhostContext: ViewhostContext; private viewController: ViewController; + private metricsRecorder?: MetricsRecorder; /** * @param viewhostConfig IAPLViewhostConfig to initialize the VH @@ -29,7 +30,11 @@ export class APLViewhostWASM { private constructor(viewhostConfig: IAPLViewhostConfig) { LoggerFactory.initialize(viewhostConfig.logLevel || 'debug', viewhostConfig.logTransport); this.logger = LoggerFactory.getLogger('APLViewhost'); - this.viewhostContext = ViewhostContext.create(viewhostConfig); + if (viewhostConfig.metricSinks) { + this.metricsRecorder = new MetricsRecorder(); + viewhostConfig.metricSinks.forEach((sink) => { this.metricsRecorder!.addSink(sink); }); + } + this.viewhostContext = ViewhostContext.create(viewhostConfig, this.metricsRecorder); this.viewController = ViewController.create(this.viewhostContext); this.logger.info('APLViewhostWASM created'); } @@ -145,4 +150,12 @@ export class APLViewhostWASM { public updateDisplayState(state: AplDisplayState) { this.viewController.updateDisplayState(state); } + + public pauseDocument() { + this.viewController.pauseDocument(); + } + + public resumeDocument() { + this.viewController.resumeDocument(); + } } diff --git a/js/apl-wasm/src/viewhost/ViewController.ts b/js/apl-wasm/src/viewhost/ViewController.ts index a787c0e..b29d72e 100644 --- a/js/apl-wasm/src/viewhost/ViewController.ts +++ b/js/apl-wasm/src/viewhost/ViewController.ts @@ -23,6 +23,7 @@ export class ViewController { private backstackExtension?: UnifiedBackstackExtension; private displayState = AplDisplayState.foreground; private viewhostContext: ViewhostContext; + private paused: boolean = false; /** * @param viewhostConfig IAPLViewhostConfig to initialize the VH @@ -98,12 +99,16 @@ export class ViewController { } } this.currentDocument = documentContext; + if (this.paused) { + this.currentDocument.pause(); + } return this.currentDocument.renderDocument(this.view); } private tryPushToBackstack(documentContext: DocumentContext): boolean { if (this.backstackExtension && this.backstackExtension.shouldCacheActiveDocument()) { this.logger.info('push to backstack'); + documentContext.pause(); documentContext.unbindFromView(); documentContext.updateDisplayState(AplDisplayState.hidden); return this.backstackExtension.addDocumentContextToBackstack(documentContext); @@ -123,6 +128,9 @@ export class ViewController { } this.currentDocument = documentContext; + if (!this.paused) { + this.currentDocument.resume(); + } this.currentDocument.renderDocument(this.view); this.currentDocument.updateDisplayState(this.displayState); } @@ -132,6 +140,9 @@ export class ViewController { * @param config IConfigurationChangeOptions */ public configurationChange(config: IConfigurationChangeOptions) { + if (this.backstackExtension) { + this.backstackExtension.provideConfigChangeToStackedDocuments(config); + } if (this.currentDocument) { this.currentDocument.configurationChange(config); } @@ -148,4 +159,23 @@ export class ViewController { this.displayState = state; } + public resumeDocument() { + if (!this.paused) { + this.logger.warn('resumeDocument called when not paused'); + } + this.paused = false; + if (this.currentDocument) { + this.currentDocument.resume(); + } + } + + public pauseDocument() { + if (this.paused) { + this.logger.warn('pauseDocument called when already paused'); + } + this.paused = true; + if (this.currentDocument) { + this.currentDocument.pause(); + } + } } diff --git a/js/apl-wasm/src/viewhost/ViewhostConfig.ts b/js/apl-wasm/src/viewhost/ViewhostConfig.ts index e42a0cd..c2b71ac 100644 --- a/js/apl-wasm/src/viewhost/ViewhostConfig.ts +++ b/js/apl-wasm/src/viewhost/ViewhostConfig.ts @@ -3,8 +3,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { AudioPlayerFactory, DeviceMode, IDataSourceFetchRequest, - IDeveloperToolOptions, IEnvironment, IExtensionEvent, ISendEvent, +import { AudioPlayerFactory, DeviceMode, IDataSourceFetchRequest, IDeveloperToolOptions, + IEnvironment, IExtensionEvent, IMetricsSink, ISendEvent, IVideoFactory, IViewportCharacteristics, JSLogLevel, LogTransport } from 'apl-html'; import { DocumentHandle } from '../document/DocumentHandle'; import { DocumentState } from '../document/DocumentState'; @@ -71,7 +71,7 @@ export interface IAPLViewhostConfig { /** Extension Manager */ extensionManager?: ExtensionManager; /** Override package download. Reject the Promise to fallback to the default logic. */ - packageLoader?: (name: string, version: string, url?: string) => Promise; + packageLoader?: (name: string, version: string, url?: string, domain?: string) => Promise; /** callback for APL Log Command handling, will overwrite the callback used in Content creation */ onLogCommand?: (level: number, message: string, args: object) => void; /** Skip force loading of fonts loading. For tests mainly as electron flacky with it. */ @@ -80,4 +80,14 @@ export interface IAPLViewhostConfig { onDocumentStateUpdate?: (handle: DocumentHandle, state: DocumentState) => void; /** Backstack extension provider */ backstackExtension?: UnifiedBackstackExtension; + /** + * Allow transparent VH background + * NOTE: Supplying enableTransparentBackground may cause gradients with alpha + * channels to behave unexpectedly. Only enable if necessary for your use case. + */ + enableTransparentBackground?: boolean; + /** Allow selection of text */ + enableTextSelection?: boolean; + /** Metrics sink */ + metricSinks?: IMetricsSink[]; } diff --git a/js/apl-wasm/src/viewhost/ViewhostContext.ts b/js/apl-wasm/src/viewhost/ViewhostContext.ts index 7ba3c3b..2f70f10 100644 --- a/js/apl-wasm/src/viewhost/ViewhostContext.ts +++ b/js/apl-wasm/src/viewhost/ViewhostContext.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { IConfigurationChangeOptions, JSLogLevel } from 'apl-html'; +import { IConfigurationChangeOptions, JSLogLevel, MetricsRecorder } from 'apl-html'; import { IAPLViewhostConfig } from './ViewhostConfig'; /** @@ -14,14 +14,16 @@ import { IAPLViewhostConfig } from './ViewhostConfig'; export class ViewhostContext { private viewhostConfig: IAPLViewhostConfig; private logLevel: JSLogLevel; + private metricsRecorder?: MetricsRecorder; - public static create(viewhostConfig: IAPLViewhostConfig): ViewhostContext { - return new ViewhostContext(viewhostConfig); + public static create(viewhostConfig: IAPLViewhostConfig, metricsRecorder?: MetricsRecorder): ViewhostContext { + return new ViewhostContext(viewhostConfig, metricsRecorder); } - private constructor(viewhostConfig: IAPLViewhostConfig) { + private constructor(viewhostConfig: IAPLViewhostConfig, metricsRecorder?: MetricsRecorder) { this.viewhostConfig = viewhostConfig; this.logLevel = viewhostConfig.logLevel || 'debug'; + this.metricsRecorder = metricsRecorder; } public getConfig(): IAPLViewhostConfig { @@ -78,4 +80,8 @@ export class ViewhostContext { public setLogLevel(logLevel: JSLogLevel): void { this.logLevel = logLevel; } + + public getMetricsRecorder(): MetricsRecorder|undefined { + return this.metricsRecorder; + } } diff --git a/js/apl-wasm/webpack.common.js b/js/apl-wasm/webpack.common.js index 8f69e92..d92051b 100644 --- a/js/apl-wasm/webpack.common.js +++ b/js/apl-wasm/webpack.common.js @@ -23,7 +23,7 @@ module.exports = { { test: /apl-wasm\.js$/, use: [{ - loader: 'wasm-loader', + loader: 'export-module', options: { debug: true } @@ -44,7 +44,7 @@ module.exports = { }, resolveLoader: { alias: { - 'wasm-loader': path.resolve(__dirname, './wasm-loader.js') + 'export-module': path.resolve(__dirname, './export-module.js') } }, output: { diff --git a/js/apl-wasm/webpack.dev.js b/js/apl-wasm/webpack.dev.js index ca61f3d..4ed4a75 100644 --- a/js/apl-wasm/webpack.dev.js +++ b/js/apl-wasm/webpack.dev.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { diff --git a/js/apl-wasm/webpack.happynpm.js b/js/apl-wasm/webpack.happynpm.js index e84f6df..0cd44fa 100644 --- a/js/apl-wasm/webpack.happynpm.js +++ b/js/apl-wasm/webpack.happynpm.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; diff --git a/js/apl-wasm/webpack.prod.js b/js/apl-wasm/webpack.prod.js index 3ce1c75..bdbb805 100644 --- a/js/apl-wasm/webpack.prod.js +++ b/js/apl-wasm/webpack.prod.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; diff --git a/js/apl-wasm/webpack.test.js b/js/apl-wasm/webpack.test.js index e8fe073..4adf98d 100644 --- a/js/apl-wasm/webpack.test.js +++ b/js/apl-wasm/webpack.test.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -const merge = require('webpack-merge'); +const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { diff --git a/js/dts-packer/package.json b/js/dts-packer/package.json index 7ba0ee7..c386bd4 100644 --- a/js/dts-packer/package.json +++ b/js/dts-packer/package.json @@ -15,10 +15,10 @@ "mkdirp": "^0.5.1", "rimraf": "^2.6.2", "source-map-loader": "^0.2.4", - "ts-loader": "^5.3.0", - "typescript": "2.7.2", - "webpack": "^4.26.1", - "webpack-cli": "^3.3.12", - "webpack-merge": "^4.2.1" + "ts-loader": "^9.3.1", + "typescript": "4.9.5", + "webpack": "5.75.0", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.10.0" } } diff --git a/js/dts-packer/src/index.ts b/js/dts-packer/src/index.ts index 370531d..19690f4 100644 --- a/js/dts-packer/src/index.ts +++ b/js/dts-packer/src/index.ts @@ -4,7 +4,7 @@ */ import * as ts from "typescript"; -import { Compiler, compilation } from "webpack"; +import { Compiler } from "webpack"; import fs = require('fs'); import path = require('path'); import mkdirp = require('mkdirp'); @@ -218,7 +218,7 @@ export default class DtsPackerPlugin { apply(compiler: Compiler) { this.compiler = compiler; - compiler.plugin('done', () => { + compiler.hooks.done.tap('BuildStatsPlugin', () => { const name = path.basename(compiler.context); const m = new NodeModules(this.options.require, compiler.outputPath); m.addModule('@amzn/'+name, true); diff --git a/js/yarn.lock b/js/yarn.lock index ea73da3..4b3b0e0 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -31,6 +31,13 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@cypress/listr-verbose-renderer@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" @@ -84,10 +91,63 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.25" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" + integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" @@ -125,11 +185,57 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@types/chai@~4.1.7": version "4.1.7" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/istanbul@^0.4.30": version "0.4.30" resolved "https://registry.yarnpkg.com/@types/istanbul/-/istanbul-0.4.30.tgz#073159320ab3296b2cfeb481f756a1f8f4c9c8e4" @@ -142,6 +248,11 @@ dependencies: "@types/sizzle" "*" +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json-schema@^7.0.4": version "7.0.5" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" @@ -176,6 +287,13 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== +"@types/node@*": + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== + dependencies: + undici-types "~5.26.4" + "@types/node@^10.12.18": version "10.17.26" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.26.tgz#a8a119960bff16b823be4c617da028570779bcfd" @@ -206,150 +324,141 @@ resolved "https://registry.yarnpkg.com/@types/webfontloader/-/webfontloader-1.6.32.tgz#8a02698b7a07a9f2cc8e34d7223dc5d59ccff77a" integrity sha512-l83V/2iHvBTIlKUM1+UlabS/Jd65HVfKmqS+zPhwDlgldPtd5ujPDt0Y1es19xLWcN8NC3wwSTd71Qxbst+Kpw== -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== dependencies: - "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -371,21 +480,31 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= +acorn-import-assertions@^1.7.6: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^8.0.4: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -396,6 +515,11 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.0.tgz#5c894537098785926d71e696114a53ce768ed773" integrity sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw== +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + ajv@^5.0.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -406,7 +530,7 @@ ajv@^5.0.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2: +ajv@^6.1.0, ajv@^6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== @@ -416,7 +540,7 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.3: +ajv@^6.12.3, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -456,11 +580,6 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -476,7 +595,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -495,14 +614,6 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -550,21 +661,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -587,20 +683,6 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -613,29 +695,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-wait-until@1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/async-wait-until/-/async-wait-until-1.2.6.tgz#b6d8ada89913028af1928ee078925af75862b108" @@ -668,11 +732,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -774,24 +833,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -804,23 +845,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - blob-util@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" @@ -831,16 +860,6 @@ bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" - integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -856,22 +875,6 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -879,76 +882,20 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" - integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.2" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== +browserslist@^4.14.5: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - pako "~1.0.5" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffer-crc32@~0.2.3: version "0.2.13" @@ -960,30 +907,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - cacache@^12.0.2, cacache@^12.0.3: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -1005,21 +933,6 @@ cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -1038,7 +951,7 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1048,6 +961,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-lite@^1.0.30001587: + version "1.0.30001621" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz#4adcb443c8b9c8303e04498318f987616b8fea2e" + integrity sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1083,7 +1001,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1140,40 +1058,6 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -1191,24 +1075,6 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -1241,15 +1107,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1259,6 +1116,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1269,14 +1135,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1301,6 +1159,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -1318,6 +1181,11 @@ commander@2.15.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.12.1, commander@^2.15.1, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1343,11 +1211,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1363,16 +1226,6 @@ concat-stream@^1.5.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - convert-source-map@^1.5.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1392,11 +1245,6 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - copy-dir@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/copy-dir/-/copy-dir-1.3.0.tgz#8c65130e11d8313a6ac2c0578e4c6c6f70b456ba" @@ -1430,36 +1278,10 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-env@^5.2.0: version "5.2.1" @@ -1479,7 +1301,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1488,23 +1310,6 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - css-loader@^3.0.0: version "3.6.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" @@ -1606,6 +1411,11 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -1627,7 +1437,7 @@ debug@4.3.4: dependencies: ms "2.1.2" -debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@^2.1.3, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1655,7 +1465,7 @@ debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1665,11 +1475,6 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -1687,46 +1492,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -1749,15 +1519,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -1765,11 +1526,6 @@ dir-glob@^2.0.0: dependencies: path-type "^3.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - "dts-packer@link:dts-packer": version "0.0.0" uid "" @@ -1823,6 +1579,11 @@ electron-mocha@^6.0.4: mocha "^5.2.0" which "^1.3.1" +electron-to-chromium@^1.4.668: + version "1.4.777" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.777.tgz#f846fbba23fd11b3c6f97848cdda94896fdb8baf" + integrity sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw== + electron-window@^0.8.0: version "0.8.1" resolved "https://registry.yarnpkg.com/electron-window/-/electron-window-0.8.1.tgz#16ca187eb4870b0679274fc8299c5960e6ab2c5e" @@ -1844,24 +1605,6 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -elliptic@^6.0.0, elliptic@^6.5.2: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1879,21 +1622,25 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d" - integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" + graceful-fs "^4.2.4" + tapable "^2.2.0" env-paths@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= -errno@^0.1.3, errno@~0.1.7: +envinfo@^7.7.3: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== @@ -1907,17 +1654,27 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -1934,12 +1691,12 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" esprima@2.7.x, esprima@^2.7.1: @@ -1952,23 +1709,28 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -1989,18 +1751,10 @@ eventemitter3@^3.1.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^4.0.2: version "4.1.0" @@ -2029,60 +1783,11 @@ exit-hook@^1.0.0: resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - extract-zip@^1.0.3, extract-zip@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" @@ -2123,6 +1828,11 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fclone@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" @@ -2155,21 +1865,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2209,15 +1904,13 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" + locate-path "^5.0.0" + path-exists "^4.0.0" flat@^5.0.2: version "5.0.2" @@ -2232,11 +1925,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2251,13 +1939,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -2318,19 +1999,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -2341,7 +2009,12 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2363,11 +2036,6 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - getos@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" @@ -2404,6 +2072,11 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -2470,42 +2143,6 @@ global-dirs@^2.0.1: dependencies: ini "1.3.7" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2523,11 +2160,16 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -2587,37 +2229,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2625,22 +2236,12 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" + function-bind "^1.1.2" he@1.1.1: version "1.1.1" @@ -2665,27 +2266,16 @@ hls.js@^0.13.1: eventemitter3 "3.1.0" url-toolkit "^2.1.6" -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -2695,11 +2285,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -2712,11 +2297,6 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -2727,13 +2307,13 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -2770,36 +2350,31 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - ini@1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -interpret@^1.0.0, interpret@^1.4.0: +interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -2807,32 +2382,11 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2840,11 +2394,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2852,6 +2401,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" @@ -2859,55 +2415,11 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - is-electron-renderer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2" integrity sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI= -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2942,7 +2454,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -2957,13 +2469,6 @@ is-installed-globally@^0.3.2: global-dirs "^2.0.1" is-path-inside "^3.0.1" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2986,7 +2491,7 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -3023,11 +2528,6 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -3038,7 +2538,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3048,14 +2548,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= @@ -3121,6 +2614,15 @@ istanbul@^0.4.5, istanbul@~0.4.5: which "^1.1.1" wordwrap "^1.0.0" +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jquery-touchswipe@^1.6.19: version "1.6.19" resolved "https://registry.yarnpkg.com/jquery-touchswipe/-/jquery-touchswipe-1.6.19.tgz#dfd5ddaec0b78212dd500d29707129b9c7fd6cd4" @@ -3171,10 +2673,10 @@ jsesc@^1.3.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.3.0: version "0.3.1" @@ -3234,26 +2736,7 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA== -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -3326,10 +2809,10 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.0" @@ -3340,15 +2823,6 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3357,6 +2831,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -3467,53 +2948,16 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - marked@^0.8.0: version "0.8.2" resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - meow@^3.1.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -3535,25 +2979,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - micromatch@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -3562,20 +2987,12 @@ micromatch@^4.0.0: braces "^3.0.1" picomatch "^2.0.5" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -3592,16 +3009,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - "minimatch@2 || 3", minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3654,14 +3061,6 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -3669,7 +3068,7 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4: +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.4: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -3742,10 +3141,10 @@ mp3-parser@^0.3.0: resolved "https://registry.yarnpkg.com/mp3-parser/-/mp3-parser-0.3.0.tgz#f659268afb8326ded5cda302eda3ba52b0f61874" integrity sha1-9lkmivuDJt7VzaMC7aO6UrD2GHQ= -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.0.0: version "2.0.0" @@ -3762,34 +3161,12 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - nanoid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.6.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -3810,34 +3187,10 @@ nise@^1.5.2: lolex "^5.0.1" path-to-regexp "^1.7.0" -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nopt@3.x: version "3.0.6" @@ -3856,13 +3209,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -3903,34 +3249,11 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3974,17 +3297,12 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= -p-limit@^2.0.0, p-limit@^2.2.1: +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -4005,6 +3323,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -4022,11 +3347,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -4036,18 +3356,6 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -4055,20 +3363,10 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-dirname@^1.0.0: version "1.0.2" @@ -4140,17 +3438,6 @@ pathval@^1.1.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -4166,6 +3453,11 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -4205,10 +3497,12 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" postcss-modules-extract-imports@^2.0.0: version "2.0.0" @@ -4288,11 +3582,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - progress-stream@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" @@ -4321,18 +3610,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -4363,11 +3640,6 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -4378,11 +3650,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -4393,21 +3660,13 @@ ramda@~0.26.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - rc@^1.2.1: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -4435,7 +3694,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4448,15 +3707,6 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -4467,22 +3717,6 @@ readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -4504,6 +3738,13 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -4522,29 +3763,6 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -4590,35 +3808,17 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: +resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@1.1.x: version "1.1.7" @@ -4641,6 +3841,15 @@ resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -4657,11 +3866,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - rimraf@^2.4.4, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -4676,14 +3880,6 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -4698,7 +3894,7 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -4708,13 +3904,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -4745,16 +3934,30 @@ schema-utils@^2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.3.0: +semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -4772,40 +3975,19 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -serialize-javascript@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" @@ -4865,14 +4047,14 @@ sinon@^7.5.0: nise "^1.5.2" supports-color "^5.5.0" -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== +sirv@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" slash@^1.0.0: version "1.0.0" @@ -4884,36 +4066,6 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -4927,18 +4079,7 @@ source-map-loader@^0.2.4: async "^2.5.0" loader-utils "^1.1.0" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.17, source-map-support@~0.5.12: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -4946,12 +4087,7 @@ source-map-support@^0.5.17, source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -4961,6 +4097,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -4999,13 +4140,6 @@ speedometer@~0.1.2: resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0= -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -5033,22 +4167,6 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -5057,17 +4175,6 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -5090,15 +4197,6 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -5117,13 +4215,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -5150,13 +4241,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -5222,7 +4306,7 @@ supports-color@5.4.0: dependencies: has-flag "^3.0.0" -supports-color@8.1.1: +supports-color@8.1.1, supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -5248,13 +4332,6 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -5272,34 +4349,31 @@ symbol-observable@^1.1.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terser-webpack-plugin@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" - integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^3.1.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.26.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map-support "~0.5.20" throttleit@0.0.2: version "0.0.2" @@ -5327,13 +4401,6 @@ through2@~0.2.3: readable-stream "~1.1.9" xtend "~2.1.1" -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" @@ -5341,31 +4408,11 @@ tmp@~0.2.1: dependencies: rimraf "^3.0.0" -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -5373,20 +4420,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== tough-cookie@~2.5.0: version "2.5.0" @@ -5406,37 +4443,34 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-loader@^5.3.0: - version "5.4.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.4.5.tgz#a0c1f034b017a9344cef0961bfd97cc192492b8b" - integrity sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw== +ts-loader@^9.3.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" - micromatch "^3.1.4" - semver "^5.0.1" - -ts-loader@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" - integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== - dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" + chalk "^4.1.0" + enhanced-resolve "^5.0.0" micromatch "^4.0.0" - semver "^6.0.0" - -ts-node@^8.0.2, ts-node@^8.10.2: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" - integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== - dependencies: + semver "^7.3.4" + source-map "^0.7.4" + +ts-node@^10.7.0: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" + create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.17" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: @@ -5481,11 +4515,6 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -5542,21 +4571,16 @@ typedoc@^0.15.0: typedoc-default-themes "^0.6.3" typescript "3.7.x" -typescript@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" - integrity sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw== - -typescript@2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" - integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== - typescript@3.7.x: version "3.7.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.7.tgz#c931733e2ec10dda56b855b379cc488a72a81199" integrity sha512-MmQdgo/XenfZPvVLtKZOq9jQQvzaUAUpcKW8Z43x9B2fOm4S5g//tPtMweZUIP+SoBqrVPEIm+dJeQ9dfO0QdA== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + uglify-js@^3.1.4: version "3.14.2" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.2.tgz#d7dd6a46ca57214f54a2d0a43cad0f35db82ac99" @@ -5587,15 +4611,10 @@ underscore@>=1.8.3, underscore@^1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.4.tgz#7886b46bbdf07f768e0052f1828e1dcab40c0dee" integrity sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== uniq@^1.0.1: version "1.0.1" @@ -5626,23 +4645,18 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.13: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -5651,11 +4665,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - url-toolkit@^2.1.6: version "2.2.0" resolved "https://registry.yarnpkg.com/url-toolkit/-/url-toolkit-2.2.0.tgz#9a57b89f315d4b7dc340e150bcfa548ddf5f5ce9" @@ -5669,44 +4678,25 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -5725,65 +4715,55 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" - integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== +watchpack@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.0" - watchpack-chokidar2 "^2.0.0" webfontloader@^1.6.28: version "1.6.28" resolved "https://registry.yarnpkg.com/webfontloader/-/webfontloader-1.6.28.tgz#db786129253cb6e8eae54c2fb05f870af6675bae" integrity sha1-23hhKSU8tujq5UwvsF+HCvZnW64= -webpack-bundle-analyzer@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" - integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== +webpack-bundle-analyzer@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" - chalk "^4.1.0" commander "^7.2.0" + debounce "^1.2.1" + escape-string-regexp "^4.0.0" gzip-size "^6.0.0" - lodash "^4.17.20" + html-escaper "^2.0.2" opener "^1.5.2" - sirv "^1.0.7" + picocolors "^1.0.0" + sirv "^2.0.3" ws "^7.3.1" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" webpack-log@^2.0.0: version "2.0.0" @@ -5793,14 +4773,16 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== +webpack-merge@^5.10.0, webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: - lodash "^4.17.15" + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" -webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.4.0: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -5808,41 +4790,42 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.26.1: - version "4.43.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" - integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@5.75.0: + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.6.1" - webpack-sources "^1.4.1" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -5856,6 +4839,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -5886,15 +4874,6 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -5926,11 +4905,6 @@ xregexp@4.2.4: dependencies: "@babel/runtime-corejs2" "^7.2.0" -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" @@ -5938,6 +4912,11 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -5958,14 +4937,6 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -5994,22 +4965,6 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" diff --git a/package.json b/package.json index d05b7d6..5c4ed57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apl-viewhost-web", - "version": "2024.2.0", + "version": "2024.3.0", "description": "This is a Web-assembly version (WASM) of apl viewhost web.", "license": "Apache 2.0", "repository": { diff --git a/scripts/fetch.js b/scripts/fetch.js index e309c27..2172371 100644 --- a/scripts/fetch.js +++ b/scripts/fetch.js @@ -3,8 +3,7 @@ const https = require('https'); const fs = require('fs'); -const artifactUrl = 'https://d1gkjrhppbyzyh.cloudfront.net/apl-viewhost-web/c5f16015-4f4a-4450-8e3f-7924429dc443/index.js'; - +const artifactUrl = 'https://d2o906d8ln7ui1.cloudfront.net/apl-viewhost-web-2024.3.js'; const outputFilePath = 'index.js'; const outputFile = fs.createWriteStream(outputFilePath); diff --git a/wasm/CMakeLists.txt b/wasm/CMakeLists.txt index 5ce1a1a..f5ae138 100644 --- a/wasm/CMakeLists.txt +++ b/wasm/CMakeLists.txt @@ -3,7 +3,7 @@ get_directory_property(ENUMGEN_BIN DIRECTORY ${APL_CORE_PATH} DEFINITION ENUMGEN include(config.cmake) include_directories(include) -add_executable(apl-wasm +add_executable(${CMAKE_PROJECT_NAME} src/audioplayer.cpp src/audioplayerfactory.cpp src/mediaplayer.cpp @@ -37,29 +37,45 @@ add_executable(apl-wasm src/documentconfig.cpp src/documentcontext.cpp src/documentmanager.cpp) -target_link_libraries(apl-wasm apl) -target_link_libraries(apl-wasm ${YOGA_LIB}) -target_include_directories(apl-wasm PRIVATE include) +target_link_libraries(${CMAKE_PROJECT_NAME} apl) +target_link_libraries(${CMAKE_PROJECT_NAME} ${YOGA_LIB}) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE include) #install required files set(JS_DIR ${CMAKE_SOURCE_DIR}/js) set(SANDBOX_DIR ${CMAKE_SOURCE_DIR}/sandbox) set(WEB_PUBLIC_DIR ${SANDBOX_DIR}/apl-wasm-sandbox/public) set(DIST_DIR ${JS_DIR}/apl-wasm/lib) -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/apl-wasm.js + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.js DESTINATION ${WEB_PUBLIC_DIR}) -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/apl-wasm.js - DESTINATION ${DIST_DIR}) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.js + DESTINATION ${DIST_DIR}) + if(WASM_ASMJS) - install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/apl-wasm.js.mem + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.js.mem DESTINATION ${WEB_PUBLIC_DIR}) +else(WASM_ASMJS) + if(NOT BUNDLE_MODE) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.wasm + DESTINATION ${WEB_PUBLIC_DIR}) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.wasm + DESTINATION ${DIST_DIR}) + endif() endif(WASM_ASMJS) +set_target_properties( + ${CMAKE_PROJECT_NAME} + PROPERTIES LINK_FLAGS ${WASM_FLAGS} +) + add_custom_target(generate-wasm-enums ALL - COMMAND cd ${APL_PROJECT_DIR} && ${ENUMGEN_BIN} + COMMAND cd ${APL_PROJECT_DIR} && ${ENUMGEN_BIN} -f "AnimationQuality" -f "AudioPlayerEventType" -f "AudioTrack" @@ -111,6 +127,7 @@ add_custom_target(generate-wasm-enums ALL -f "PointerType" -f "Position" -f "PropertyKey" + -f "Role" -f "ScreenShape" -f "ScrollDirection" -f "Snap" @@ -127,10 +144,10 @@ add_custom_target(generate-wasm-enums ALL -l typescript -o ${JS_DIR}/apl-html/src/enums ${APL_CORE_PATH}/aplcore/include/**/*.h ${APL_CORE_PATH}/aplcore/include/apl/**/*.h - DEPENDS enumgen - ) + DEPENDS enumgen +) -add_dependencies(apl-wasm generate-wasm-enums) +add_dependencies(${CMAKE_PROJECT_NAME} generate-wasm-enums) if(CMAKE_BUILD_TYPE MATCHES Debug) set(YARN_BUILD_COMMAND "build:wasm:dev") @@ -142,15 +159,15 @@ add_custom_target(wasm-build COMMAND bash -c "yarn install" COMMAND bash -c "yarn ${YARN_BUILD_COMMAND}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js - DEPENDS apl-wasm generate-wasm-enums) + DEPENDS ${CMAKE_PROJECT_NAME} generate-wasm-enums) add_custom_target(wasm-build-test - COMMAND bash -c "yarn install" - COMMAND bash -c "yarn build:wasm:test" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js - DEPENDS apl-wasm generate-wasm-enums) + COMMAND bash -c "yarn install" + COMMAND bash -c "yarn build:wasm:test" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js + DEPENDS ${CMAKE_PROJECT_NAME} generate-wasm-enums) add_custom_target(wasm-test - COMMAND bash -c "yarn test" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js/apl-wasm - DEPENDS wasm-build-test) + COMMAND bash -c "yarn test" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/js/apl-wasm + DEPENDS wasm-build-test) diff --git a/wasm/config.cmake b/wasm/config.cmake index 32a66f6..36a7ac3 100644 --- a/wasm/config.cmake +++ b/wasm/config.cmake @@ -13,7 +13,7 @@ else(WASM_ASMJS) endif(WASM_ASMJS) # this prevents exporting node specific code -set(WASM_FLAGS "${WASM_FLAGS} -s ENVIRONMENT='web' -s SINGLE_FILE=1") +set(WASM_FLAGS "${WASM_FLAGS} -s ENVIRONMENT='web'") set(WASM_FLAGS "${WASM_FLAGS} -s NO_FILESYSTEM=1") diff --git a/wasm/include/wasm/component.h b/wasm/include/wasm/component.h index 3f70575..9805fa9 100644 --- a/wasm/include/wasm/component.h +++ b/wasm/include/wasm/component.h @@ -25,12 +25,13 @@ struct ComponentMethods { static std::string getId(const apl::ComponentPtr& component); static apl::ComponentPtr getParent(const apl::ComponentPtr& component); + static bool isFocusable(const apl::ComponentPtr& component); + static void update(apl::ComponentPtr& component, int type, int val); static void updateEditText(apl::ComponentPtr& component, int type, const std::string& val); static void pressed(apl::ComponentPtr& component); static void updateScrollPosition(apl::ComponentPtr& component, float scrollPosition); static void updatePagerPosition(apl::ComponentPtr& component, int pagerPosition); - static void updateMediaState(apl::ComponentPtr& component, const emscripten::val& state, bool fromEvent); static bool updateGraphic(apl::ComponentPtr& component, const std::string& avg); static size_t getChildCount(const apl::ComponentPtr& component); diff --git a/wasm/include/wasm/context.h b/wasm/include/wasm/context.h index e5d48b3..2743c49 100644 --- a/wasm/include/wasm/context.h +++ b/wasm/include/wasm/context.h @@ -29,6 +29,7 @@ struct ContextMethods { static apl::DocumentContextPtr topDocument(const apl::RootContextPtr& context); static emscripten::val getBackground(const apl::RootContextPtr& context); static void setBackground(const apl::RootContextPtr& context, emscripten::val background); + static std::string getDocumentState(const apl::RootContextPtr& context); static std::string getDataSourceContext(const apl::RootContextPtr& context); static std::string getVisualContext(const apl::RootContextPtr& context); static void clearPending(const apl::RootContextPtr& context); diff --git a/wasm/include/wasm/importrequest.h b/wasm/include/wasm/importrequest.h index 7b82704..50198a4 100644 --- a/wasm/include/wasm/importrequest.h +++ b/wasm/include/wasm/importrequest.h @@ -22,7 +22,8 @@ EMSCRIPTEN_BINDINGS(apl_wasm_importrequest) { emscripten::class_("ImportRef") .function("toString", &apl::ImportRef::toString) .function("version", &apl::ImportRef::version) - .function("name", &apl::ImportRef::name); + .function("name", &apl::ImportRef::name) + .function("domain", &apl::ImportRef::domain); } } // namespace wasm diff --git a/wasm/src/component.cpp b/wasm/src/component.cpp index 248e646..131bdee 100644 --- a/wasm/src/component.cpp +++ b/wasm/src/component.cpp @@ -61,6 +61,11 @@ ComponentMethods::getParent(const apl::ComponentPtr& component) { return component->getParent(); } +bool +ComponentMethods::isFocusable(const apl::ComponentPtr& component) { + return component->isFocusable(); +} + void ComponentMethods::update(apl::ComponentPtr& component, int type, int val) { component->update(static_cast(type), val); @@ -88,28 +93,6 @@ ComponentMethods::updatePagerPosition(apl::ComponentPtr& component, int pagerPos component->update(kUpdatePagerPosition, pagerPosition); } -void -ComponentMethods::updateMediaState(apl::ComponentPtr& component, const emscripten::val& state, bool fromEvent) { - if (!state.hasOwnProperty("trackIndex") || !state.hasOwnProperty("trackCount") || - !state.hasOwnProperty("currentTime") || !state.hasOwnProperty("duration") || - !state.hasOwnProperty("paused") || !state.hasOwnProperty("ended") || - !state.hasOwnProperty("errorCode") || !state.hasOwnProperty("trackState") || - !state.hasOwnProperty("muted")) - { - LOG(LogLevel::ERROR) << "Can't update media state. MediaStatus structure is wrong."; - return; - } - - MediaState mediaState(state["trackIndex"].as(), state["trackCount"].as(), - state["currentTime"].as(), state["duration"].as(), - state["paused"].as(), state["ended"].as(), - state["muted"].as()); - mediaState.withTrackState(static_cast(state["trackState"].as())); - mediaState.withErrorCode(state["errorCode"].as()); - - component->updateMediaState(mediaState, fromEvent); -} - bool ComponentMethods::updateGraphic(apl::ComponentPtr& component, const std::string& avg) { auto json = GraphicContent::create(avg); @@ -246,6 +229,7 @@ EMSCRIPTEN_BINDINGS(apl_wasm_component) { .function("getParent", &internal::ComponentMethods::getParent) .function("getChildCount", &internal::ComponentMethods::getChildCount) .function("getChildAt", &internal::ComponentMethods::getChildAt) + .function("isFocusable", &internal::ComponentMethods::isFocusable) .function("appendChild", &internal::ComponentMethods::appendChild) .function("insertChild", &internal::ComponentMethods::insertChild) .function("remove", &internal::ComponentMethods::remove) @@ -255,7 +239,6 @@ EMSCRIPTEN_BINDINGS(apl_wasm_component) { .function("pressed", &internal::ComponentMethods::pressed) .function("updateScrollPosition", &internal::ComponentMethods::updateScrollPosition) .function("updatePagerPosition", &internal::ComponentMethods::updatePagerPosition) - .function("updateMediaState", &internal::ComponentMethods::updateMediaState) .function("updateGraphic", &internal::ComponentMethods::updateGraphic) .function("getBoundsInParent", &internal::ComponentMethods::getBoundsInParent) .function("getGlobalBounds", &internal::ComponentMethods::getGlobalBounds) diff --git a/wasm/src/context.cpp b/wasm/src/context.cpp index fc47cbb..7042bdd 100644 --- a/wasm/src/context.cpp +++ b/wasm/src/context.cpp @@ -48,6 +48,17 @@ ContextMethods::setBackground(const apl::RootContextPtr& context, emscripten::va background = bg; } +std::string +ContextMethods::getDocumentState(const apl::RootContextPtr& context) { + rapidjson::Document document(rapidjson::kObjectType); + rapidjson::StringBuffer buffer; + rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); + auto documentState = context->serializeDocumentState(allocator); + rapidjson::Writer writer(buffer); + documentState.Accept(writer); + return buffer.GetString(); +} + std::string ContextMethods::getDataSourceContext(const apl::RootContextPtr& context) { rapidjson::Document document(rapidjson::kObjectType); @@ -64,7 +75,7 @@ ContextMethods::getVisualContext(const apl::RootContextPtr& context) { rapidjson::Document state(rapidjson::kObjectType); rapidjson::StringBuffer buffer; rapidjson::Document::AllocatorType& allocator = state.GetAllocator(); - auto visualContext = context->topComponent()->serializeVisualContext(allocator); + auto visualContext = context->serializeVisualContext(allocator); rapidjson::Writer writer(buffer); visualContext.Accept(writer); return buffer.GetString(); @@ -516,6 +527,7 @@ EMSCRIPTEN_BINDINGS(apl_wasm_context) { .function("topDocument", &internal::ContextMethods::topDocument) .function("getBackground", &internal::ContextMethods::getBackground) .function("setBackground", &internal::ContextMethods::setBackground) + .function("getDocumentState", &internal::ContextMethods::getDocumentState) .function("getDataSourceContext", &internal::ContextMethods::getDataSourceContext) .function("getVisualContext", &internal::ContextMethods::getVisualContext) .function("clearPending", &internal::ContextMethods::clearPending) diff --git a/wasm/src/textlayout.cpp b/wasm/src/textlayout.cpp index 2597baa..2419e9f 100644 --- a/wasm/src/textlayout.cpp +++ b/wasm/src/textlayout.cpp @@ -82,7 +82,7 @@ WasmTextLayout::getLineRangeFromByteRange(apl::Range byteRange) const { const char* utf8Bytes = lineText.c_str(); auto byteSize = std::strlen(utf8Bytes); - if (byteSum < byteRange.lowerBound() && byteSum + byteSize > byteRange.lowerBound()) { + if (byteSum <= byteRange.lowerBound() && byteSum + byteSize > byteRange.lowerBound()) { lineStart = lineIndex; }